微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 django-pytest db fixture 创建的真实数据库中查询数据

如何解决如何从 django-pytest db fixture 创建的真实数据库中查询数据

我使用 pytest 为我的 django 项目编写了与数据库相关的测试。我使用 db fixture 在数据库中创建记录。测试工作正常,但如何从真正的 Postgres 数据库中选择这些记录。当我尝试通过 PgAdmin 选择这些记录时,我得到了空列表。您能否阐明 db fixture 的工作原理以及它存储记录的位置?

解决方法

pytest.mark.django_db 将整个测试包装在一个事务中(在测试结束时回滚),该事务在 pgadmin 中不可见。

您可以尝试使用 @pytest.mark.django_db(transaction=True) 在您的测试中启用测试交易。但是比较慢,测试后刷新数据库

,

在运行测试时,Django 会创建第二个临时数据库并在其中运行测试,因此它不会影响您的生产/开发数据库,​​并且您将始终获得相同的预测结果。

最重要的是,根据每个测试的配置方式,Django 可以将测试包装在一个事务中,该事务将在特定测试完成后回滚,因此测试不会相互影响。

如果你想在你的真实数据库中看到这些数据,在测试完成后,你必须配置你的测试,你想让它持久化,不包含在事务中。当您使用 pytest-django 时,有两种可能的方法来处理该问题,具体取决于您使用的是哪种“风格”的测试套件:

  • 如果您使用 TestCase 中的 TransactionTestCasedjango.test,请切换到 SimpleTestCase。请注意,与此事务回滚一起,您将失去更多与数据库相关的功能。
  • 如果您使用的是 pytest.mark.django_db,只需将其删除即可。

对于单独的数据库,您可以在测试期间直接连接到它,也可以在运行测试时在命令行中添加一个 --reuse-db,这样 pytest-django 不会在测试完成后销毁它已完成。这个单独的数据库只会在您的常规数据库名称中添加 test_ 前缀。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。