django - pytest 和 Django 事务数据库

标签 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

测试示例.py

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

最佳答案

我终于找到了解决方案。

添加 fixture 加载代码到db fixture :

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) 进行测试:

测试示例.py

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

每次测试后,pytest 将刷新您的数据库并用固定数据填充它。

关于django - pytest 和 Django 事务数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549271/

相关文章:

django - from rest_framework.filters import SearchFilter 生成错误,因为无法从 'django.db 导入名称 'ORDER_PATTERN'

python - 如何将 "-c"参数正确传递给 pytest.main?

Python 使用 pytest_mock 在函数中模拟多个查询

python - pytest异常无类型对象不可调用

django - 如何使用 django-pytest 跟踪 Django 重定向?

python - 使用 Django 从 Flask 验证用户身份

python - Django Admin 将我的外键显示为中间模型作为文本输入

python - Python 中的前向类声明

python - Docker runner pytest 不收集测试用例

python - pytest-django 找不到 Django 项目