我有一些代码( celery 任务)可以通过 urllib
进行调用到 Django View 。任务和 View 的代码都是同一个 Django 项目的一部分。
我正在测试任务,需要它能够在测试期间联系 View 并从中获取数据,所以我使用了 LiveServerTestCase
.理论上我在 setUp
中设置了数据库我的测试用例的功能(我添加了一个 product
实例列表)然后调用任务,它做了一些事情,然后通过 urllib
调用 Django View (点击 LiveServerTestCase
设置的开发服务器),获取 product
的 JSON 列表实例返回。
但实际上,它看起来像 products
我添加 setUp
在调用时对 View 不可见。看起来测试用例代码正在使用一个数据库(test_<my_database_name>
),而在开发服务器上运行的 View 正在访问另一个数据库(urllib
调用成功联系了 View 但找不到我要求的产品) .
知道为什么会这样吗?
可能相关 - 我们正在 MySQL 数据库而不是 sqlite 上进行测试。
提出两个问题(但如果您认为我们做错了,请发表评论):
- 我知道任务使用
urllib
访问 View 似乎很奇怪.我们这样做是因为该任务通常会调用一系列第三方 API 中的一个来获取有关产品的信息,如果它无法访问这些信息,它会访问我们自己的 Django 产品数据库。进行 urllib 调用的代码是通用代码,它与我们正在处理的情况无关。 - 这些是集成测试,所以我们更愿意实际制作
urllib
打电话而不是 mock 它
最佳答案
即使测试服务器调出其他数据库,celery worker 仍在使用开发数据库,因为他们在设置文件中被告知。
一个修复方法是制作一个单独的 settings_test.py 文件,该文件指定测试数据库名称,并使用 subprocess.checkoutput 从设置命令中调出 celery worker,这些 subprocess.checkoutput 从用于测试的特殊队列中消耗。然后这些 celery worker 将从测试数据库而不是开发数据库中获取数据。
关于python - LiveServerTestCase 服务器看到不同的数据库进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25375469/