我很难自定义测试数据库设置行为。我想实现以下目标:
我很难让testsuiterunner绕过创作。
答案 0 :(得分:5)
快进到2016年,django内置了在测试之间保留数据库的能力。它以--keep flag到manage.py
的形式提供Django 1.8中的新功能。在测试运行之间保留测试数据库。这个 具有跳过创建和销毁操作的优点 这可以大大减少运行测试的时间,特别是那些 一个大型的测试套件。如果测试数据库不存在,它将是 在第一次运行时创建,然后为每次后续运行保留。 任何未应用的迁移也将应用于测试数据库 在运行测试套件之前。
这几乎满足了您在问题中提到的所有标准。事实上,它甚至更进了一步。在每次运行之前无需导入转储。
答案 1 :(得分:3)
此TEST_RUNNER适用于Django 1.3
from django.test.simple import DjangoTestSuiteRunner as TestRunner
class DjangoTestSuiteRunner(TestRunner):
def setup_databases(self, **kwargs):
pass
def teardown_databases(self, old_config, **kwargs):
pass
答案 2 :(得分:0)
您需要提供自定义测试运行器。
您有兴趣使用默认django.test.runner.DiscoverRunner
覆盖的位是DiscoverRunner.setup_databases
和DiscoverRunner.teardown_databases
方法。这两种方法涉及创建和销毁测试数据库,并且只执行一次。您将希望提供默认使用现有测试数据库的特定于测试的项目设置,并覆盖这些设置,以便加载转储数据并且不会销毁测试数据库。
根据转储的大小和内容,一个安全的选择可能只是创建一个子进程,将转储管道传输到数据库的SQL命令行界面,否则你可能能够获得一个游标和{{3 }}
如果您希望完全摆脱夹具加载,您可以提供一个自定义基本测试用例,扩展Django的默认execute queries directly,并将TestCase._fixutre_setup
和TestCase._fixutre_teardown
方法覆盖为noop。
django.test.testcases.TestCase
以指向其别名的自定义测试用例。