使用预加载的数据库优化 Django 测试

Optimize Django tests with preloaded database

我正在尝试通过使用自定义 class.

预加载我的测试数据库来减少我的 CI 使用并使我的代码更清晰

我有多个 files/classes 看起来像这样:

class TestSomething(TestCase):
    def setUp(self):
        User.objects.create(...)

    def test_something(self):
        pass

我将它们转换成:

class TestSomething(PreloadedTestCase):
    def test_something(self):
        pass

有一个共同点 PreloadedTestCase class:

class TestSomething(TestCase):
    def setUp(self):
        User.objects.create(...)

这确实使代码更清晰并删除了很多重复行,但似乎增加了 CI 执行时间。

PreloadedTestCase.setUp()运行多次吗?如果是这样,我怎样才能有一个共同的 class 即 运行 对数据库只有一次?
我查看了固定装置,但它只填充了数据库,我必须查询它才能在测试中访问我的对象。

setUp 针对每个测试用例运行,因此您在此处为每个用例创建数据。

setUpClass 为每个 class 运行一次(更好)

setUpModule 每个模块运行

如果需要,请不要忘记拆解内容。

https://docs.python.org/3/library/unittest.html

我发现 pytestpytest-django 更适合这个东西,因为它使固定装置更易于使用。

或者,您可以设置备用数据库以用于 Django 测试 - 这里有一些有用的信息:https://docs.djangoproject.com/en/4.0/topics/testing/advanced/