我正在寻找一种在 django 测试期间运行完整 celery 设置的方法,在此询问其他问题 https://stackoverflow.com/questions/20638751/run-a-celery-worker-that-connects-to-the-django-test-db
经过思考,我认为我可以满足于运行单元测试(它更像是集成测试),其中我针对主 Django(开发)数据库运行测试脚本。有没有办法编写单元测试,用 Nose 运行它们并针对主数据库执行此操作?我想这将是告诉 Nose (或任何其他框架)有关 django 设置的问题。
我看过django-nose
但无法找到一种方法来告诉它使用主数据库而不是测试数据库。
我不知道鼻子,但这里是如何使用 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)
然后在settings.py中
if 'test' in sys.argv:
TEST_RUNNER = '<?>.ExistingDBTestRunner'
# alternative db settings?
在旧版本的 django 中会有一点不同。此外,您可能需要在测试用例中覆盖 _fixture_setup 和 _fixture_teardown 才能通过。
上面的代码将连接到预先存在的数据库,但由于每个测试都包含在事务中,因此更改将无法用于其他连接(例如 celery 工作线程)。禁用事务的最简单方法是从unittest.TestCase
代替django.test.TestCase
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)