我已经为我的django应用程序编写了一系列测试,并想在我的生产数据库的副本上运行它们。
据我所知,最好的方法是使用固定装置加载:
- 运行manage.py dumpdata -o app.dump
- 将结果的app.dump文件移至[App Name]文件夹中的固定文件 中的固定文件目录
- 在我的django.test.testcase子类上指定"固定式"类属性
但是,这种方法很麻烦。我有多个应用程序,并且正在运行manage.py dumpdata,每次我想测试我的应用程序都会在固定文件中手动移动文件。
是否有一种更简单的方法可以自动生成我的整个生产数据库的副本并针对它测试我的django应用程序?
通常,对实时数据库进行测试或现场DB的副本。为什么?因为测试需要可预测。当您制作Live DB的副本时,输入将变得不可预测。第二个问题是您不能在实时网站上显然测试,因此您需要克隆数据。对于超过几个MB的任何东西来说,这很慢。
即使DB很小,dumpdata
也不是loaddata
。这是因为默认情况下,DumpData的JSON格式具有大型生成开销,更不用说使数据文件非常笨重了。使用loadData导入甚至较慢。
制作克隆的唯一现实方法是使用内置的进出口/导入机制的数据库引擎。对于仅复制数据库文件的SQLite。对于MySQL,它被选择为Outfile,然后选择负载数据填充。对于PostgreSQL,它的副本遵循副本,依此类推。
所有这些导出/导入命令都可以使用Django中可用的LowLevel连接对象执行,因此可以用于加载固定装置。
您没有提及您正在使用哪个版本的Django,但请查看1.11文档:
- dumpdata可以从特定数据库中倾倒所有应用程序的数据,而不是需要单独进行。
- loadData可以为多个应用程序加载数据,以及在单个应用程序目录中查找
fixtures
子目录,它还可以查看Fixture_dirs中定义的目录。
,从1.11文档中尚不清楚有关固定装置的测试,但它们是否也会在fixture_dirs中查看。因此,这可能无法完全解决您的问题。