LiveServerTestCase服务器看到不同的数据库进行测试

时间:2014-08-19 03:57:18

标签: python mysql django testing

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

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

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

为什么会出现这种情况?

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

开出两个问题(但如果你认为我们做错了就对评论感兴趣):

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

1 个答案:

答案 0 :(得分:0)

即使测试服务器调出其他数据库,芹菜工作者仍然从dev数据库中取食,因为他们被告知在设置文件中。

一个修复方法是创建一个单独的settings_test.py文件,该文件指定测试数据库名称,并使用subprocess.checkoutput从setup命令调出芹菜工作者,该子进程使用特殊队列进行测试。然后这些芹菜工人将从测试数据库而不是开发数据库中提供。