【问题标题】:How can I specify a database for Django Tests to use instead of having it build it every time?如何为 Django 测试指定要使用的数据库,而不是每次都构建它?
【发布时间】:2011-06-04 03:41:03
【问题描述】:

我希望能够使用现有的测试数据库来运行我的测试,而不是让 Django 每次我想运行测试时都创建和删除数据库。这可能吗?

【问题讨论】:

  • 你为什么想要那个?您还想测试数据库创建...
  • 不是在需要数小时才能构建时。
  • 您可以选择不同的数据库引擎进行测试(sqlite 的数据库创建速度更快)
  • 另一种做法是/不/使用./manage.py test,而是写一个管理命令:stackoverflow.com/questions/1646468

标签: python django unit-testing


【解决方案1】:

有可能,这里有一个办法:

1) 定义你自己的测试运行器看看here 看看如何。

2) 对于您的自定义测试运行程序,请查看 default test runner,您可以复制并粘贴代码并评论这一行:connection.creation.destroy_test_db(old_name, verbosity) 负责销毁测试数据库,我认为您应该将connection.creation.create_test_db(..) 行中的尝试,除了可能是这样的:

try:
    # Create the database the first time.
    connection.creation.create_test_db(verbosity, autoclobber=not interactive) 
except ..: # Look at the error that this will raise when create a database that already exist
    # Test database already created.
    pass 

3) 将 setting.py 中的 TEST_RUNNER 绑定到您的测试运行器。

4) 现在像这样运行你的测试:./manage.py test

【讨论】:

  • 看起来不错,但我仍然需要设置与本地测试数据库的连接吗?
  • @Ryan Detzel:我刚刚编辑了我的答案以获得更多详细信息,关于您的问题,我认为使用上面的代码将在第一次运行测试时创建测试数据库是的,这个测试数据库是由 Django 原子创建,看这里:docs.djangoproject.com/en/dev/topics/testing/…
  • @mouad,我可以配置它以使其甚至不加载固定装置/刷新它吗?
【解决方案2】:

谁在使用 Django >= 1.8

python manage.py test --keepdb

--keepdb 在测试运行之间保留测试数据库。这具有跳过创建和销毁操作的优点,这可以大大减少运行测试的时间,尤其是在大型测试套件中。如果测试数据库不存在,它将在第一次运行时创建,然后为每次后续运行保留。在运行测试套件之前,任何未应用的迁移也将应用于测试数据库。

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多