Django为所有测试类初始化数据测试

Mas*_*isa 7 python testing django automated-tests python-3.x

我需要向我的 django 项目添加测试,我需要在执行测试之前创建数据测试。我在这个问题中阅读了有关设置测试数据的信息。我可以在 setUpClass 中为类中的所有测试创建数据。创建我的完整数据测试是一种耗时的方法,所以我想为所有测试类运行一次,是否有任何方法可以为所有测试类设置一次数据?

Mas*_*isa 9

我找到了我的答案,希望它可以帮助别人。基于 Django文档

测试运行器是一个定义 run_tests() 方法的类。Django 附带了一个 DiscoverRunner 类,它定义了默认的 Django 测试行为。这个类定义了 run_tests() 入口点,以及 run_tests() 用来设置、执行和拆除测试套件的其他方法的选择。

对于这个问题,这个类中有 2 个有用的方法。setup_databasesteardown_databases以便我们可以覆盖它们以初始化所有测试类的数据。

from django.test.runner import DiscoverRunner as BaseRunner

class MyMixinRunner(object):
    def setup_databases(self, *args, **kwargs):
        temp_return = super(MyMixinRunner, self).setup_databases(*args, **kwargs)
        # do something
        return temp_return

    def teardown_databases(self, *args, **kwargs):
        # do somthing
        return super(MyMixinRunner, self).teardown_databases(*args, **kwargs)

class MyTestRunner(MyMixinRunner, BaseRunner):
    pass
Run Code Online (Sandbox Code Playgroud)

定义测试运行器类后,我们需要添加TEST_RUNNER到设置:

TEST_RUNNER = 'path.to.MyTestRunner'
Run Code Online (Sandbox Code Playgroud)