【问题标题】:LiveServerTestCase server sees different database to testsLiveServerTestCase 服务器看到不同的数据库进行测试
【发布时间】:2014-10-12 02:01:40
【问题描述】:

我有一些代码(芹菜任务)通过urllib 调用 Django 视图。任务代码和视图都是同一个 Django 项目的一部分。

我正在测试任务,并且需要它能够在测试期间联系视图并从中获取数据,因此我使用了LiveServerTestCase。理论上我在我的测试用例的setUp函数中建立了数据库(我添加了product实例的列表)然后调用任务,它做了一些事情,然后通过urllib调用Django视图(访问由LiveServerTestCase 设置的开发服务器,返回product 实例的JSON 列表。

不过,实际上,我在setUp 中添加的products 在调用时似乎对视图不可见。看起来测试用例代码正在使用一个数据库(test_<my_database_name>),而在开发服务器上运行的视图正在访问另一个(urllib 调用成功地联系了视图,但找不到我要求的产品) .

任何想法为什么会出现这种情况?

可能是相关的 - 我们正在 MySQL 数据库而不是 sqlite 上进行测试。

引出两个问题(如果您认为我们做错了,请对 cme​​ts 感兴趣):

  • 我知道任务使用urllib 访问视图似乎很奇怪。我们这样做是因为该任务通常调用一系列第三方 API 中的一个来获取有关产品的信息,如果它无法访问这些,它会访问我们自己的 Django 产品数据库。进行 urllib 调用的代码是通用代码,与我们正在处理的情况无关。
  • 这些是集成测试,因此我们更愿意实际调用 urllib 而不是模拟它

【问题讨论】:

    标签: python mysql django testing


    【解决方案1】:

    即使测试服务器启动了其他数据库,celery 工作人员仍在使用 dev 数据库,因为它们在设置文件中被告知。

    一种解决方法是制作一个单独的 settings_test.py 文件,该文件指定测试数据库名称,并使用从特殊队列消耗的用于测试的 subprocess.checkoutput 从 setup 命令中调出 celery worker。然后这些 celery 工作人员将从测试数据库而不是开发数据库提供数据。

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2012-12-01
      • 1970-01-01
      • 2019-01-05
      • 2018-09-12
      相关资源
      最近更新 更多