【问题标题】:Django: How to keep db structure without data after running tests?Django:运行测试后如何保持没有数据的数据库结构?
【发布时间】:2017-11-28 15:48:34
【问题描述】:

我想使用--keepdb 选项允许在运行测试后保留数据库,因为在我的情况下,创建数据库需要一段时间(但运行测试实际上很快)

但是,我只想保留数据库结构,而不是数据。 每次运行测试时,我都需要一个空数据库。

我知道我可以使用tearDown 方法来删​​除创建的每个对象,但这是一种乏味且容易出错的方法。 我只需要找到一种方法来告诉 Django 在单元测试结束时刷新整个数据库(而不是销毁它)。

我正在考虑制作一个非常简单的脚本:

  1. 运行测试保留数据库:manage.py test --keepdb
  2. 运行manage.py flushdb --database test_fugodb

但是,通过第二步,我得到了django.db.utils.ConnectionDoesNotExist: The connection test_fugodb doesn't exist。这个测试数据库的名称是什么?我拿了运行测试时显示的那个:

怎么了? 谢谢!

【问题讨论】:

  • 无论您在测试中创建什么,django 都不会自动删除。假设您正在使用 python manage.py test 运行测试?
  • 对不起,我最初的帖子不够清楚,我更新了它。 TL/DR:我想使用 --keepdb 来避免每次都创建数据库。
  • 部署数据库应该是一个独立于运行测试的步骤。这是“开箱即用”的情况之一。框架开始妨碍您而不是提供帮助,因为它们没有预见到您的用例。最有可能的是,您需要在某处集成一个任务来截断您的数据。
  • @jpmc26 我正在考虑使用flushdb --database <my-test-db>,但找不到测试数据库的正确名称(参见我编辑的帖子)。谢谢!

标签: python django unit-testing


【解决方案1】:

测试后删除测试数据库的所有集合。 这样就不需要重新创建db,测试后db是空的。

关于test数据库名称的问题,django doc中有描述: https://docs.djangoproject.com/en/1.8/topics/testing/overview/#the-test-database

您可以创建自己的测试运行程序来替换您的脚本: django unit tests without a db

【讨论】:

  • 它不是已经在单独的数据库中了吗?运行测试时:Creating test database for alias 'default' ('test_fugodb')...
  • 是的,它是一个单独的数据库,但不是每次都是一个新的数据库。如果创建 db 的成本很高,您可以保留它并在测试后删除它的所有集合。
  • 我已经重新阅读了您的帖子,不知道我错过了哪一点。希望其他人能得到你的分数。
  • 感谢您的编辑。我也编辑了我的问题,cf。 “我正在考虑制作一个……”部分的“脚本”
猜你喜欢
  • 2011-06-04
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2015-08-10
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多