Skip to main content
 首页 » 编程设计

python之不应自动运行的 Django 测试

2024年10月24日3398°冷暖

我正在使用 Django 1.9 和 Django Restframework 开发传感器 API 和仪表板应用程序。

我有通常的单元测试,当我调用 python manage.py test 时应该运行。

此外,我还有两种不同类型的测试:

a) 测试与上游数据源和 API 的连接。

b) 数据一致性测试。

虽然单元测试应该在任何上下文中运行,但 a) 和 b) 取决于特定的上下文。当此上下文可用(或应该测试)时,我想手动调用它们。

我不希望它们在我调用管理 test 命令时运行(并失败)。

关于如何创建默认排除某些测试文件夹但在显式调用时运行它们的测试运行器的任何建议。

请您参考如下方法:

django 解决方案可以像here

您将依赖于上下文的测试移动到单独的应用程序并将其排除在外。然后实现这个运行器:TEST_RUNNER = 'testing.simple.AdvancedTestSuiteRunner'

from django.test.simple import DjangoTestSuiteRunner #@UnresolvedImport 
import logging 
from django.conf import settings 
EXCLUDED_APPS = getattr(settings, 'TEST_EXCLUDE', []) 
 
    class AdvancedTestSuiteRunner(DjangoTestSuiteRunner): 
        def __init__(self, *args, **kwargs): 
            from django.conf import settings 
            settings.TESTING = True 
            south_log = logging.getLogger("south") 
            south_log.setLevel(logging.WARNING) 
            super(AdvancedTestSuiteRunner, self).__init__(*args, **kwargs) 
 
        def build_suite(self, *args, **kwargs): 
            suite = super(AdvancedTestSuiteRunner, self).build_suite(*args, **kwargs) 
            if not args[0] and not getattr(settings, 'RUN_ALL_TESTS', False): 
                tests = [] 
                for case in suite: 
                    pkg = case.__class__.__module__.split('.')[0] 
                    if pkg not in EXCLUDED_APPS: 
                        tests.append(case) 
                suite._tests = tests  
            return suite 

当显式添加到命令时,应用程序不会被忽略 'python manage.py test south'


或者使用 Nose 测试

他们有分类

@attr(speed='slow') 
class MyTestCase: 
    def test_long_integration(self): 
        pass 
    def test_end_to_end_something(self): 
        pass 

来自 docs

-a=ATTR, --attr=ATTR Run only tests that have attributes specified by ATTR [NOSE_ATTR]

-A=EXPR, --eval-attr=EXPR Run only tests for whose attributes the Python expression EXPR evaluates to True [NOSE_EVAL_ATTR]