Django - 使用大型静态数据表进行测试

时间:2010-05-17 12:46:30

标签: django django-testing django-fixtures

我正在使用“manage.py test”以及使用'dumpdata'创建的JSON夹具

我的问题是灯具中的几个表非常大(例如一个包含美国所有城市名称的表),这使得运行测试非常慢。

看到这些表中的几个从未被程序修改过(例如 - 城市名称永远不需要修改),为每次测试运行创建和拆除这些表都没有多大意义。

使用这种数据测试此代码有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

这是我的解决方案:

class xxxx(TestCase):
    def setUp(self):
        import _mysql
        db=_mysql.connect('xxxx', 'xxxx', 'xxxx', "test_xxxxxxx")
        db.query(open('sql/xxxxxx.sql').read())

sql文件是我使用phpMyAdmin导出的一系列insert语句。读取sql语句比导入JSON或YAML fixture更快。这肯定不是最优雅的解决方案,但它确实有效。

根据Loading SQL dump before running Django tests中的第三个答案,您只需将此sql文件放在app目录下的'sql'目录中即可。在执行'manage.py syncdb'时,这对我来说对于生产数据库很有用,但由于某种原因,在执行'manage.py test'时,这些数据实际上并没有导入到测试数据库中,即使是“安装自定义SQL”行xxxx.xxxx模型'出现在输出中。所以,我在setUp()

中编写了自己的代码

答案 1 :(得分:0)

您应该查看nose框架。看起来您可以更好地控制何时加载测试夹具以及何时撕裂:

"nose supports fixtures at the package, module, class, and test case level, so expensive initialization can be done as infrequently as possible. See Fixtures for more."

此外,看起来有针对鼻子的django插件:on google

希望它会有所帮助。