Оптимизация тестов Django с предварительно загруженной базой данных
Я пытаюсь уменьшить использование CI и сделать мой код чище, предварительно загрузив мою тестовую базу данных с помощью пользовательского класса.
У меня было несколько файлов/классов, которые выглядели следующим образом:
class TestSomething(TestCase):
def setUp(self):
User.objects.create(...)
def test_something(self):
pass
Я преобразовал их в:
class TestSomething(PreloadedTestCase):
def test_something(self):
pass
с общим PreloadedTestCase
классом:
class TestSomething(TestCase):
def setUp(self):
User.objects.create(...)
Это действительно делает код чище и удаляет много дублирующихся строк, но это, кажется, увеличиваетвремя выполнения CI.
Выполняется ли PreloadedTestCase.setUp()
несколько раз? Если да, то как я могу иметь общий класс, который выполняется только один раз с базой данных?
Я изучил fixtures, но он только заполняет базу данных, мне придется запрашивать ее, чтобы получить доступ к моим объектам в тестах.
setUp
выполняется для каждого тестового случая, поэтому здесь вы создаете данные для каждого случая.
setUpClass
выполняется один раз для каждого класса (лучше)
setUpModule
запускается для каждого модуля
Не забудьте про снос, если понадобится.
https://docs.python.org/3/library/unittest.html
Я нахожу pytest
с pytest-django
лучше для этих вещей, так как это делает приспособления более простыми в использовании.
В качестве альтернативы вы можете настроить альтернативные базы данных для использования в тестировании Django - хорошая информация здесь: https://docs.djangoproject.com/en/4.0/topics/testing/advanced/