pytest和Django事务数据库

时间:2019-06-11 17:52:48

标签: django pytest pytest-django

我使用生产数据库进行测试(实际上是docker中的测试数据库)。问题是:如何使测试针对此数据库在事务中运行。我需要类似@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 ...

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方法。

将灯具加载代码添加到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将刷新您的数据库并用Fixture数据填充它。