【问题标题】:Django 1.3 testing without recreating database / loading fixtures for every run of the testDjango 1.3 测试无需为每次测试运行重新创建数据库/加载夹具
【发布时间】:2013-07-15 05:13:16
【问题描述】:

我正在使用 django 1.3 并编写一些 selenium 测试和 django 单元测试。我想知道是否可以在不创建数据库和每次加载设备的情况下运行测试?

我偶然发现了这个SO thread,它提供了一种无需创建数据库即可进行测试的好方法,但它仍然会刷新数据库固定装置并每次都重新加载它们。我什至不希望发生这种情况。我只想让测试读取/写入我设置过的数据库。我不希望它在每次运行任何测试时都创建数据库/加载装置。

如果需要解决此问题,我很乐意提供任何进一步的信息。

提前致谢! :)

【问题讨论】:

  • 这是您要找的吗? stackoverflow.com/questions/4606756/…
  • @Ngenator 试过了,但我遇到了一些错误,DatabaseError: relation "django_content_type" does not exist LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co...
  • 我不确定是什么问题。不过,我实际上并不认为这是一个好主意,每次设置和拆除数据库的目的是为了保持一致性。您计划使用现有数据库这一事实可能会使您的某些测试无效,因为模型可能会更改,并且数据可能在将来的某个时候无效。
  • 是的,我明白了。但是,如果每次运行都需要很长时间,我将如何在编写测试用例时进行测试。
  • 您可以运行单独的测试docs.djangoproject.com/en/dev/topics/testing/overview/… 只要确保您只使用测试所需的固定装置,不需要用不相关的无用信息填充数据库。设置和拆除数据库不应该花费那么长时间,如果是,您应该查看它,可能有一些设置不正确。此外,您不应该以“尝试、修复、尝试、修复”的方式编写测试,提前正确设计的测试应该很容易实现。

标签: django selenium selenium-webdriver django-testing django-1.3


【解决方案1】:

我可以通过侵入一些 django 代码来做到这一点。需要编辑的部分是,

文件django/db/backends/sqlite3/creation.py

修改代码如下:

  1. 在第 55 行设置 confirm = 'yes'
  2. 注释掉所有出现的os.remove(test_database_name)

文件django/db/backends/creation.py

修改代码如下

  1. 评论 359 到 376(create_test_db 函数中的同步数据库和刷新部分。
  2. _create_test_db 中的几乎所有内容。 (几乎所有内容 == 代码部分都会执行我们试图消除的不良内容)
  3. _destroy_test_db 中的几乎所有内容。
  4. destroy_test_db 中的几乎所有内容。

希望有帮助!

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2011-03-10
    • 2013-11-08
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多