【问题标题】:How do I tell Django to save my test database?如何告诉 Django 保存我的测试数据库?
【发布时间】:2011-03-08 23:19:38
【问题描述】:

运行 Django 单元测试太慢了。尤其是当我只想运行一项测试,但测试运行人员想要创建整个数据库并仅为该一项测试销毁整个数据库时。

在我没有更改任何模型的情况下,如果 Django 不费心尝试创建和销毁整个数据库,而是将其保存以备下次使用,我可以节省大量时间。更好的是,如果测试运行者能够看到哪些模型发生了变化,并且只在运行测试之前替换那些模型,那就太好了。

我宁愿不必自己对测试运行程序进行子类化,但如果我不能很快找到解决方案,我将不得不这样做。有没有这样的东西已经存在了?

【问题讨论】:

    标签: django unit-testing django-testing


    【解决方案1】:

    您是否尝试过使用内存中的 SQLite 数据库进行测试?它比使用基于磁盘的数据库快得多。

    【讨论】:

    • 我上次尝试时,spatialite 在我使用的任何版本的 ubuntu 上都不能很好地播放,所以我很快就放弃了。不过我现在应该再试一次。
    • 我认为有必要在同一个数据库上运行测试,就像你在现场使用的一样,如果不是总是,至少在每次提交之前。
    • 警告:SQLite3 目前不能在多线程中工作,所以如果你有任何依赖/测试对数据库的并发访问的(集成)测试,他们会很痛苦。
    【解决方案2】:

    我正在使用 Djang-nose。如果您设置 env var REUSE_DB=1,它不会在运行测试后破坏数据库,并在下次运行时重新使用同一个数据库。每当您的架构更改时,只需设置 REUSE_DB=0 并执行一次“完整”运行。之后将其重置为 1,您就可以开始了。

    https://github.com/django-nose/django-nose

    【讨论】:

      【解决方案3】:

      在django1.8中为manage.py test命令--keepdb添加了新参数

      ./manage.py test --keepdb
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 2011-09-23
        • 2018-05-22
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        相关资源
        最近更新 更多