Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在运行Django测试之前加载SQL转储_Python_Django_Django Testing - Fatal编程技术网

Python 在运行Django测试之前加载SQL转储

Python 在运行Django测试之前加载SQL转储,python,django,django-testing,Python,Django,Django Testing,我有一个相当复杂的Django项目,这使得很难/不可能使用fixture来加载数据 我想做的是在testrunner创建了所有表之后,在实际测试开始运行之前,从生产数据库服务器加载一个数据库转储 我在MyTestCase.setUp()中尝试了各种“魔术”,但没有成功 欢迎提出任何建议。谢谢。固定装置是最好的选择。您是否尝试过使用./manage.py dumpdata从当前数据库创建设备?我没有看到在复杂的模型上失败,但我想这是可能的 假设您使用的是mysql,您应该能够通过使用来编写脚本。您

我有一个相当复杂的Django项目,这使得很难/不可能使用fixture来加载数据

我想做的是在testrunner创建了所有表之后,在实际测试开始运行之前,从生产数据库服务器加载一个数据库转储

我在MyTestCase.setUp()中尝试了各种“魔术”,但没有成功


欢迎提出任何建议。谢谢。

固定装置是最好的选择。您是否尝试过使用./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
转储后,您需要编辑文件以删除所有内容,但适当的INSERT语句或其他复杂内容除外。特别是,必须删除事务处理、索引创建和表创建SQL,以避免在加载重复的create语句时出错

我使用这种方法来加载非常非常大的fixture——处理json需要很长时间,但是直接的sql导入非常快

请注意,除了为测试运行程序加载数据外,此方法还将为任何synchdb、reset等调用加载sql,因此您将无法为不同的测试用例加载不同的数据,如果不希望将文件加载回生产服务器,您必须在重设之前删除这些文件

[1]

[2]


[3]

如果我没有弄错的话,加载sql会更快,因为它没有固定装置那样的开销。我想解决同样的问题。我有一个很大的数据库要加载进行测试,我想保持快速加载。我广泛使用泛型关系,这是使用夹具时的一个问题。在1.2版本的工作中,这个问题似乎已经得到了解决,看到了吗?很遗憾,你只能对评论投赞成票,而不能投反对票。第一条评论很臭。@S.Lott-这里有一个例子。我试图将测试添加到一个从未考虑过固定装置的遗留项目中。加载夹具会触发许多不必要的行为。我最终会解决这个问题,但在开始大规模重构之前,我需要进行测试。我需要数据来运行测试。自从这个答案发布后,这种行为在Django中变得不可用。Django 1.2现在在运行测试框架时忽略
sql/
目录中的
sql
文件。
myproject/
   |--myapp/
       |--sql/
           |--mymodel.sql