Что в pytests эквивалентно setUpTestData в Django?

Я видел TestCase.setUpTestData, который довольно сильно повышает скорость тестирования в моем случае.

Обычно я предпочитаю использовать фикстуры pytest, а не классы TestCase. Однако, когда я создаю фикстуру с охватом сессии, которая выполняет подготовку данных, необходимую для всех тестов с этой фикстурой, я получаю

RuntimeError: Доступ к базе данных не разрешен, используйте метку «django_db» или фиксы «db» или «transactional_db», чтобы разрешить его.

Я выполнил команду https://stackoverflow.com/a/72261942/29412366, но это не дало никакого эффекта.

Как хранить и повторно использовать состояние БД в приложении Django при тестировании с помощью pytest?

Я использую БД in-memory sqlite3.

Я попробовал https://stackoverflow.com/a/72261942/29412366 :

@pytest.mark.django_db
@pytest.fixture(scope='session')
def thing(django_db_setup, django_db_blocker):
    del django_db_setup  # Cannot be used with usefixtures(..) it won't work
    with django_db_blocker.unblock():
        print('sleeping')
        Thing.objects.create(thing='hello')

и ожидал, что тест будет успешно выполнен + сэкономлено время. Вместо этого я получил ошибку RuntimeError, о которой говорилось выше.

(фиксы, скопированные на функцию, работают нормально, но тогда я не экономлю время выполнения теста)

Вернуться на верх