使用pytest-django,pytest-splinter和pytest-bdd时使用实际数据回滚数据库

时间:2019-01-29 10:18:57

标签: python django pytest rollback pytest-django

对于Django项目的BDD,我们将pytest-splinter与py-test django(和pytest-bdd)结合使用。

我们对真实数据进行测试。因此,我们希望对数据库所做的所有更改在每次测试之后或在所有测试之后都回滚。

我们的问题:

的正确方法是什么
  • 使用真实的数据库
  • 在浏览器测试后是否有适当的回滚?

到目前为止,我们的位置: 我们在django_db_setup中覆盖了py.test conftest.py固定装置,如下所示:

@pytest.fixture(scope='session')
def django_db_setup(
    request,
    django_test_environment,
    django_db_blocker,
    django_db_use_migrations,
    django_db_keepdb,
    django_db_modify_db_settings,
):
    return

使用py.test live_server固定装置时,通过浏览器进行的数据库更改不会回滚,并累积在我们的数据库中。

@scenario('user_management.feature', 'Add a new user')
def test_add_a_new_user(db):
    pass

使用py.test live_server固定装置时,我们收到一个错误,指出无法刷新数据库表(这不是我们想要的行为)。

@scenario('user_management.feature', 'Add a new user')
def test_add_a_new_user(db, live_server):
    pass

这是错误:

django.db.utils.NotSupportedError: cannot truncate a table referenced in a foreign key constraint django.core.management.base.CommandError: Database carbon-delta-lab couldn't be flushed.

非常感谢您的帮助!

0 个答案:

没有答案