pytest и транзакционная база данных Django

Я использую производственную базу данных для тестов (на самом деле это тестовая база данных в докере). Вопрос в том, как заставить тесты работать в транзакциях с этой базой данных. Мне нужно такое же поведение, как @pytest.mark.django_db(transaction=True), но с производственной базой данных.

Текущая настройка:

conftest.py

@pytest.fixture(scope='session')
def django_db_setup():
    """Avoid creating/setting up the test database"""
    pass


@pytest.fixture
def db(request, django_db_setup, django_db_blocker):
    django_db_blocker.unblock()


@pytest.fixture
def myfixture(db):
    ...
    return SomeObject

test_example.py

def test_something(db, myfixture):
    assert ...

person Ilya    schedule 11.06.2019    source источник
comment
Все дело в настройках: DATABASES   -  person hoefling    schedule 11.06.2019


Ответы (1)


Наконец я нашел решение.

Добавьте код загрузки приборов в db прибор:

conftest.py

from django.core.management import call_command

@pytest.fixture
def db(request, django_db_setup, django_db_blocker):
    django_db_blocker.unblock()
    call_command('loaddata', 'fixture.json')

И используйте @pytest.mark.django_db(transaction=True) с тестами:

test_example.py

@pytest.mark.django_db(transaction=True)
def test_something(db, myfixture):
    assert ...

После каждого теста pytest очищает вашу базу данных и заполняет ее данными фикстур.

person Ilya    schedule 13.06.2019