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

标签 python mysql django testing

我有一些代码( 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/

相关文章:

python - 如何在 Python/Django 中使用 AWS SNS (boto3/moto) 测试 SMS?

python - 为什么此 RegEx 找不到任何数据?

mysql - 有没有办法在mysql中编辑Information_schema

html - 即使帐户已获得授权,也会出现 HTTP 错误 500

python - 如何在 Django 模板中使用原始 Python 代码?

python - 如何将经过身份验证的用户设置为序列化器?

django - 为 Django 站点使用子域时,如何在 localhost 上的子域之间共享 django 登录信息?

python - uwsgi 在作为 systemd 服务运行时损坏管道

python - 如何让一些东西不受 time.sleep() python 的影响

php - 为特定用户显示图像