根据文档,应该使用--reuse-db
或pytest.ini
中的addopts = --reuse-db
。我尝试了两种方法,它们都不起作用。当前的测试必须在每个测试开始时注册并验证新用户,以便能够访问需要登录的功能。这使得测试运行缓慢,并且随着测试数量的增长,这变得越来越不方便。下面是一个示例来演示:
@pytest.mark.django_db
class TestSignIn:
def test_valid_user(self, client, valid_user_data, django_user_model, django_db_keepdb):
client_signup(client, valid_user_data, django_db_keepdb)
response = activate_user(client)
assert 'sign out' in get_text(response)
def test_sign_in(self, client, valid_user_data, django_user_model, django_db_keepdb):
client_signup(client, valid_user_data)
activate_user(client)
response = client.post(reverse('signout'), follow=True)
assert 'sign in' in get_text(response)
response = client_sign_in(client, valid_user_data)
assert 'sign out' in get_text(response)
在test_valid_user
中,创建了一个新用户,激活用户后,用户将显示:
>>> django_user_model.objects.count()
1
我使用以下方法进行验证:
>>> django_db_keepdb
True
我想重用上一个测试中创建的用户,而不是创建一个新用户。在指定了--reuse-db
的情况下,我希望第二个测试test_sign_in
检测到完全相同的用户。
>>> django_user_model.objects.count()
0
1条答案
按热度按时间oxiaedzo1#
问题是django_db_keepdb fixture用于指示数据库在测试完成后不应被销毁。它不阻止数据库在测试之间被重置。为了在测试之间重用同一用户,您需要使用django_db_reset_sequences fixture。此fixture将重置数据库并保留数据,允许您在后续测试中重用相同的数据。
django_db_reset_sequences固定装置在运行中:
您还需要在每个测试函数的参数列表中包含django_db_reset_sequences fixture,这将重置数据库并保留测试之间的数据,允许您在两个测试中重用同一个用户。