我使用pytest为我的django项目编写与db相关的测试。我使用db fixture在数据库中创建记录。测试运行良好,但如何从真正的Postgres数据库中选择这些记录。当我尝试通过PgAdmin选择这些记录时,我得到了空列表。您能澄清一下db fixture是如何工作的吗?它在哪里存储记录?
发布于 2021-04-12 21:54:14
pytest.mark.django_db将整个测试封装在一个事务中(该事务在测试结束时回滚),该事务在pgadmin中不可见。
您可以尝试使用@pytest.mark.django_db(transaction=True)在测试中启用测试事务。但是,它速度较慢,并且会在测试后刷新数据库
发布于 2021-04-12 23:46:47
在运行测试时,Django创建第二个临时数据库并在其中运行测试,因此它不会影响您的生产/开发数据库,并且您将始终获得相同的、可预测的结果。
最重要的是,根据每个测试的配置,Django可以将测试包装在一个事务中,该事务将在特定测试完成后回滚,因此测试不会相互影响。
如果您希望在实际数据库中看到此数据,则在测试完成后,您必须将您的测试配置为不包装在事务中。当你使用pytest-django时,有两种可能的方法来处理这个问题,这取决于你使用的是哪种“风格”的测试套件:
TestCase或django.test中的TransactionTestCase,请切换到SimpleTestCase。请注意,与此事务回滚一起,您将失去更多与数据库相关的功能。pytest.mark.django_db,只需将其删除即可。至于单独的数据库,您可以在测试期间连接到它,或者在运行测试时向命令行添加一个--reuse-db,这样pytest-django就不会在测试完成后销毁它。这个单独的数据库只是将test_前缀添加到常规数据库名称中。
https://stackoverflow.com/questions/67059095
复制相似问题