我在docker中使用pytest-django与Postgres数据库时遇到了一个问题。问题是pytest在将数据添加到数据库后不会删除数据。当你再次运行相同的测试时,它们仍然可见。我不知道这是pytest,docker还是数据库配置的错误:(
@pytest.fixture
def django_db_setup():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.postgresql',
'HOST': 'postgres',
'NAME': 'name',
}
@pytest.mark.django_db
@pytest.mark.parametrize("parm1,parm2,expected1,expected2", [
(
'000-01', 'NEW', 'NEW', '000-01'
),
(
'000-02', 'NEW2', 'NEW2', '000-02'
),
])
def test_add_model(parm1,parm2,expected1,expected2):
obj = AddModel(
field1=parm1, field2=parm2
)
new = obj.create()
assert new.field1 == expected1
assert new.field2 == expected2
字符串
重新运行此测试会产生错误:重复键值违反唯一约束
1条答案
按热度按时间ddrv8njm1#
这里只缺少
transaction=True
:字符串
有可能你不想在插入数据后删除它,你想要的是在事务中运行测试(结果相同)
https://pytest-django.readthedocs.io/en/latest/database.html#testing-transactions
测试交易
Django本身有一个TransactionTestCase,它允许你测试transactions,并在测试之间刷新数据库以隔离它们。这样做的缺点是,由于需要刷新数据库,这些测试的设置速度要慢得多。pytest-django也支持这种类型的测试,你可以使用django_db标记的参数来选择:
型
编辑:也有可能你不想在运行之间重用测试数据库,而希望每次都创建一个新的数据库:
https://pytest-django.readthedocs.io/en/latest/database.html#reuse-db-reuse-the-testing-database-between-test-runs
我认为前者可能是你想要的,而不是后者,虽然