在主Django数据库上运行Unittest

And*_*res 3 python testing django nose celery

我正在寻找一种在django测试期间运行完整芹菜设置的方法,在另一个SO问题中询问

在考虑之后,我想我可以解决运行单元测试(它更多的是集成测试),其中我对主Django(开发)数据库运行测试脚本.有没有办法编写单元测试,用Nose运行它们并对主数据库这样做?我想这将是关于django设置告诉Nose(或其他任何框架)的问题.

我看过django-nose但是找不到告诉它使用主数据库而不是测试数据库的方法.

jos*_*hua 5

我不知道鼻子,但这里是如何运行与django(1.6)单元测试的现有数据库.

from django.test.runner import DiscoverRunner
from django.db import transaction

class ExistingDBTestRunner(DiscoverRunner):

    def run_tests(self, test_labels, extra_tests=None, **kwargs):
        self.setup_test_environment()
        suite = self.build_suite(test_labels, extra_tests)
        #old_config = self.setup_databases()
        result = self.run_suite(suite)
        #self.teardown_databases(old_config)
        self.teardown_test_environment()
        return self.suite_result(suite, result)
Run Code Online (Sandbox Code Playgroud)

然后在settings.py中

if 'test' in sys.argv:
     TEST_RUNNER = '<?>.ExistingDBTestRunner'
     # alternative db settings?
Run Code Online (Sandbox Code Playgroud)

在较旧版本的django中会有所不同.此外,您可能需要覆盖测试用例中的_fixture_setup和_fixture_teardown才能通过.

上面的代码将连接到一个预先存在的数据库,但由于每个测试都包含在一个事务中,因此其他连接(如芹菜工作者)无法使用这些更改.禁用事务的最简单方法是从而继承unittest.TestCase而不是django.test.TestCase.