如何在生产数据库的副本上运行 Django 测试?

2024-01-12

我已经为我的 Django 应用程序编写了一系列测试,并且想在我的生产数据库的副本上运行它们。

据我所知,最好的方法是使用夹具加载 https://docs.djangoproject.com/en/dev/topics/testing/tools/#fixture-loading像这样:

  • 运行manage.py dumpdata -o app.dump
  • 将生成的 app.dump 文件移动到 [应用程序名称] 文件夹中的装置目录
  • 在我的 django.test.TestCase 子类上指定“fixtures”类属性

然而,这种方法很麻烦。我有多个应用程序,为每个应用程序运行 manage.py dumpdata 并在每次我想测试我的应用程序时手动移动固定文件是一件痛苦的事情。

有没有更简单的方法来自动生成整个生产数据库的副本并针对它测试我的 Django 应用程序?


通常,不鼓励针对实时数据库或实时数据库的副本进行测试。为什么?因为测试需要是可预测的。当您制作实时数据库的副本时,输入变得不可预测。第二个问题是你显然无法在现场进行测试,因此你需要克隆数据。对于大小超过几 MB 的任何东西来说,速度都很慢。

即使 DB 很小,dumpdata其次是loaddata这不是办法。这是因为 dumpdata 默认以 JSON 格式导出,这会产生很大的生成开销,更不用说使数据文件变得非常庞大。使用 loaddata 导入甚至更慢。

进行克隆的唯一现实方法是使用导出/导入机制中内置的数据库引擎。对于 sqlite,这只是复制 db 文件。对于 mysql,它是 SELECT INTO OUTFILE,然后是 LOAD DATA INFILE。对于 postgresql 来说,它是 COPY TO,然后是 COPY FROM 等等。

所有这些导出/导入命令都可以使用 django 中可用的低级连接对象来执行,因此可用于加载装置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在生产数据库的副本上运行 Django 测试? 的相关文章

随机推荐