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

如何在生产数据库的副本上运行Django测试?,django,testing,automated-tests,fixtures,testcase,Django,Testing,Automated Tests,Fixtures,Testcase,我已经为我的Django应用程序编写了一系列测试,并希望在我的生产数据库副本上运行它们 据我所知,最好的方法是这样做: 运行manage.py dumpdata-o app.dump 将生成的app.dump文件移动到[app name]文件夹中的fixtures目录 在django.test.TestCase子类上指定“fixtures”类属性 然而,这种方法很麻烦。我有多个应用程序,每次我想测试我的应用程序时,都要为每个应用程序运行manage.py dumpdata并手动移动fixtu

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

据我所知,最好的方法是这样做:

  • 运行manage.py dumpdata-o app.dump
  • 将生成的app.dump文件移动到[app name]文件夹中的fixtures目录
  • 在django.test.TestCase子类上指定“fixtures”类属性
然而,这种方法很麻烦。我有多个应用程序,每次我想测试我的应用程序时,都要为每个应用程序运行manage.py dumpdata并手动移动fixtures文件,这是一件痛苦的事情


有没有一种更简单的方法可以自动生成我的整个生产数据库的副本,并根据它测试我的Django应用程序?

您没有提到您使用的是哪个版本的Django,但查看了1.11文档:

  • ,而不是需要单独完成
  • ,以及在各个应用程序目录中查找
    fixtures
    子目录,它还可以查找

不过,目前还不清楚他们是否也会在FIXTURE_DIRS中寻找。因此,这可能无法完全解决您的问题。

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

即使数据库很小,
dumpdata
后跟
loaddata
也不是办法。这是因为dumpdata默认以JSON格式导出,生成开销很大,更不用说使数据文件非常庞大了。使用loaddata导入更慢

制作克隆的唯一现实方法是使用内置的数据库引擎导出/导入机制。对于sqlite,它只是复制db文件。对于mysql,先选择OUTFILE,然后加载数据填充。对于postgresql,它是COPY TO,后跟COPY FROM等等


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

这仅适用于小型网站。如果我知道有几GB的数据,你认为仅仅设置测试需要多长时间!幸运的是,我的网站很小。谢谢你的回复,e4c5。基本上我听到的是,我应该找到另一种方法来做我想做的事情。我已将此问题作为单独的问题发布在此处,以防您有想法: