【问题标题】:Testing application with big database initial information使用大数据库初始信息测试应用程序
【发布时间】:2012-12-26 01:38:51
【问题描述】:

目前我有大量初始数据的大型应用程序。 基本上,我有 postgresql 转储文件,我应该应用一些迁移来获得“好的数据库”。 并且应用程序几乎没有固定装置来重新创建同步/迁移的初始数据。

是的,这真是头疼。

无论如何,Django 复制数据库来执行测试,一切都应该正常工作。但问题是 - 这需要很长时间。

我正在考虑创建自定义测试运行器来重现这些操作,但我想问你!你有什么建议?

【问题讨论】:

  • 您真的需要使用所有初始数据来测试应用程序吗?
  • 是的,您可以将初始数据剥离到最低限度。还是创建新数据?
  • 很遗憾,我不能。因为代码太臃肿,我需要很多时间来发现我真正需要的东西。这不是一个选择,因为我有工作要做。我可以使用 unittest2 进行一些简单的测试,并且对于大多数部分来说都可以。但是......我真的很想能够测试我所做的一切,而不仅仅是内部逻辑的常见部分。

标签: python database django migration


【解决方案1】:

有很多关于包含大量数据的单元测试的好答案

这两个是我的最爱

这是我的Unit Testing with Django Models and a lot of relations involved

还有这个是朋友What are the best practices for testing "different layers" in Django?

您可以使用像 FactoryBoy 这样的库来创建任意数量的模型实例,并使用不同的特征来测试多个案例。 Here 是 FactoryBoy 的文档页面

聊天后编辑:

在这种情况下,定义自己的测试运行器似乎是要走的路。

https://docs.djangoproject.com/en/1.2/topics/testing/#defining-a-test-runner

【讨论】:

  • FactoryBoy 很棒。我喜欢factory_girl,真的。但这是一个很好的回答问题“我门 Django 固定装置。我该怎么办?”我想说“谢谢”,因为我现在就用它。另外,我应该说您“为您”提供指向页面的链接,我终于明白了“嘲笑”的含义。它解决了我的另一个测试问题 - 使用外部服务。但现在,我想处理 Django 测试只是为了让它运行。
  • 是的,如果您的模型经常发生大量更改,则固定装置将无法维护。如果测试用例很多,而且时间不多,可以尝试暂时覆盖边界用例,稍后再扩大测试覆盖范围。为测试创建数据总是好的,这样你就可以控制你的测试。
  • 谢谢。但问题是,我想使用“./manage.py test”。它试图重新创建我的数据库的副本,但数据库很大。也许您可以建议如何避免这种情况,但能够使用所有 Django 测试函数、类? FacrotyBoy 是否可以清除所有 DB 的“回滚”/重新创建测试 DB 的所有内容?
  • 对不起,我误解了你的问题,也许你需要用你需要的所有数据指定一个测试数据库,这样 Django 不会复制你的生产数据库,只是创建一个到指定的连接数据库。 stackoverflow.com/questions/4809393/…也许会有所帮助
  • 哦,也许应该能解决我的问题。但是如果我设置“test_name”,Django 不会在测试开始时重新创建数据库?因为这是我需要的,我想。
【解决方案2】:

尝试使用Mixer:

from mixer.backend.django import mixer

mixer.blend(MyModel)

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 2014-09-03
    • 1970-01-01
    • 2011-01-30
    • 2018-12-30
    • 2013-01-16
    • 2013-07-02
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多