Python 在运行Django测试之前加载SQL转储
我有一个相当复杂的Django项目,这使得很难/不可能使用fixture来加载数据 我想做的是在testrunner创建了所有表之后,在实际测试开始运行之前,从生产数据库服务器加载一个数据库转储 我在MyTestCase.setUp()中尝试了各种“魔术”,但没有成功Python 在运行Django测试之前加载SQL转储,python,django,django-testing,Python,Django,Django Testing,我有一个相当复杂的Django项目,这使得很难/不可能使用fixture来加载数据 我想做的是在testrunner创建了所有表之后,在实际测试开始运行之前,从生产数据库服务器加载一个数据库转储 我在MyTestCase.setUp()中尝试了各种“魔术”,但没有成功 欢迎提出任何建议。谢谢。固定装置是最好的选择。您是否尝试过使用./manage.py dumpdata从当前数据库创建设备?我没有看到在复杂的模型上失败,但我想这是可能的 假设您使用的是mysql,您应该能够通过使用来编写脚本。您
欢迎提出任何建议。谢谢。固定装置是最好的选择。您是否尝试过使用./manage.py dumpdata从当前数据库创建设备?我没有看到在复杂的模型上失败,但我想这是可能的
假设您使用的是mysql,您应该能够通过使用来编写脚本。您可能需要研究定义自定义测试运行程序。这里有一些信息: 基本上,我认为您可以从django.test.simple.run\u tests复制默认的测试运行程序,然后修改它以满足您的需要
我以前没有这样做过,但据我所知,这是一种定制的方法。Django支持在执行syncdb、重置或启动测试运行程序时加载SQL文件——这正是您所描述的: 您需要在应用程序目录中创建一个“sql”目录,然后在该目录中放置一个名为“mymodel.sql”的文件(其中“mymodel”是相应的模型名称) 可以使用转储工具为数据库创建此SQL
- SQLite[1]:echo.dump'| sqlite3 yourdbname.SQLite>myapp/sql/mymodel.sql
- MySQL[2]:mysqldump yourdbname>myapp/sql/mymodel.sql
- PostgreSQL[3]:pg_dump yourdbname>myapp/sql/mymodel.sql
[3] 如果我没有弄错的话,加载sql会更快,因为它没有固定装置那样的开销。我想解决同样的问题。我有一个很大的数据库要加载进行测试,我想保持快速加载。我广泛使用泛型关系,这是使用夹具时的一个问题。在1.2版本的工作中,这个问题似乎已经得到了解决,看到了吗?很遗憾,你只能对评论投赞成票,而不能投反对票。第一条评论很臭。@S.Lott-这里有一个例子。我试图将测试添加到一个从未考虑过固定装置的遗留项目中。加载夹具会触发许多不必要的行为。我最终会解决这个问题,但在开始大规模重构之前,我需要进行测试。我需要数据来运行测试。自从这个答案发布后,这种行为在Django中变得不可用。Django 1.2现在在运行测试框架时忽略
sql/
目录中的sql
文件。
myproject/
|--myapp/
|--sql/
|--mymodel.sql