gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:58 27 4
gpt4 key购买 nike

我正在使用 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]

关于python - 不应自动运行的 Django 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com