【问题标题】:Django - testing using large tables of static dataDjango - 使用大型静态数据表进行测试
【发布时间】:2011-02-20 09:40:13
【问题描述】:

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

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

鉴于其中一些表从未被程序修改(例如 - 城市名称永远不需要修改),因此为每次测试运行创建和拆除这些表没有多大意义。

有没有更好的方法来使用这种数据测试这段代码?

【问题讨论】:

    标签: django django-testing django-fixtures


    【解决方案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 导出的插入语句序列。读取 sql 语句比导入 JSON 或 YAML 固定装置快得多。这肯定不是最优雅的解决方案,但它确实有效。

    根据Loading SQL dump before running Django tests的第三个回答,你只需要把这个sql文件放到app目录里面的'sql'目录下。这对我在执行“manage.py syncdb”时对生产数据库有用,但由于某种原因,在执行“manage.py test”时这些数据实际上并未导入到测试数据库中,即使“安装自定义 SQL xxxx.xxxx 模型'出现在输出中。所以,我在 setUp() 中编写了自己的代码

    【讨论】:

      【解决方案2】:

      您应该查看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

      希望它会有所帮助。

      【讨论】:

      • 谢谢。我设法使用 django-nose 插件让鼻子作为测试运行程序工作。但是,我很难用鼻子解决我的问题。我不认为它有能力使用生产数据库上的一些表,这最终是我所追求的。
      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2011-10-30
      • 2019-03-03
      相关资源
      最近更新 更多