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

Sam*_*Sam 11 testing django automated-tests fixtures testcase

我为我的Django应用程序编写了一系列测试,并希望在我的生产数据库的副本上运行它们.

据我所知,最好的方法是使用夹具加载,如下所示:

  • 运行manage.py dumpdata -o app.dump
  • 将生成的app.dump文件移动到[app name]文件夹中的fixtures目录
  • 在我的django.test.TestCase子类上指定'fixtures'类属性

但是,这种方法很麻烦.我有多个应用程序,并为每个应用程序运行manage.py dumpdata,并且每次我想测试我的应用程序时手动移动fixtures文件都很痛苦.

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

e4c*_*4c5 5

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

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

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

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