Маркер django_db
отвечает только за подключение к тестовой базе данных для помеченного теста. Параметры django, переданные pytest-django
, несут полную ответственность за выбор базы данных, используемой в тестовом прогоне.
Вы можете переопределить использование базы данных в pytest-django
, определив приспособление django_db_setup
. Создайте файл conftest.py
в корневом каталоге проекта, если у вас его еще нет, и переопределите конфигурацию базы данных:
# conftest.py
import pytest
@pytest.fixture(scope='session')
def django_db_setup():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'path/to/dbfile.sqlite3',
}
Однако вы не должны использовать реальную базу данных в тестах. Создайте дамп текущей базы данных, чтобы получить снимок тестовых данных (python manage.py dumpdata > testdata.json
) и загрузите его в пустую тестовую базу данных, чтобы заполнить ее перед запуском теста:
# conftest.py
import pytest
from django.core.management import call_command
@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
with django_db_blocker.unblock():
call_command('loaddata', 'testdata.json')
Теперь вы не можете испортить свой реальный БД при запуске тестов; любые будущие изменения в реальной базе данных не приведут к сбою тестов (например, когда некоторые данные были удалены), и у вас всегда будет детерминированное состояние при каждом запуске теста. Если вам нужны дополнительные тестовые данные, добавьте их в формате JSON в testdata.json
, и ваши тесты хороши.
Источник: Примеры в pytest-django
документах .