Django和pytest,多个数据库,只用一个数据库
Django and pytest, multiple databases, use only one database
我的项目中有 2 个数据库:
DATABASES = {
'default': env.db('DEFAULT_DATABASE_URL'),
'second': env.db('SECOND_DATABASE_URL'),
}
当我只有一个数据库时,所有需要访问该数据库的测试都顺利通过,但是当我连接第二个数据库时,所有测试开始失败并出现错误 - django.db.utils.IntegrityError: duplicate key value violates unique constraint
.
据我了解,测试针对每个数据库运行两次并因此而崩溃。有什么方法可以告诉 pytest 只使用一个数据库进行测试吗?
一个测试的例子:
@pytest.mark.django_db
def test_complaint_reasons(client: APIClient):
reasons_count = 12
Profile.create_batch(reasons_count)
client.force_login(Factory())
response = client.get(reverse('url'))
assert response.status_code == status.HTTP_200_OK
assert len(response.data) == reasons_count
jsonschema.validate(response.data, ProfileComplaintReasonsSchema)
改用这个标记:
@pytest.mark.django_db(databases=['default', 'second'])
但要小心,因为 it's still experimental。
我的项目中有 2 个数据库:
DATABASES = {
'default': env.db('DEFAULT_DATABASE_URL'),
'second': env.db('SECOND_DATABASE_URL'),
}
当我只有一个数据库时,所有需要访问该数据库的测试都顺利通过,但是当我连接第二个数据库时,所有测试开始失败并出现错误 - django.db.utils.IntegrityError: duplicate key value violates unique constraint
.
据我了解,测试针对每个数据库运行两次并因此而崩溃。有什么方法可以告诉 pytest 只使用一个数据库进行测试吗?
一个测试的例子:
@pytest.mark.django_db
def test_complaint_reasons(client: APIClient):
reasons_count = 12
Profile.create_batch(reasons_count)
client.force_login(Factory())
response = client.get(reverse('url'))
assert response.status_code == status.HTTP_200_OK
assert len(response.data) == reasons_count
jsonschema.validate(response.data, ProfileComplaintReasonsSchema)
改用这个标记:
@pytest.mark.django_db(databases=['default', 'second'])
但要小心,因为 it's still experimental。