我正在开发一个 Django 应用程序。我们正在使用 celery 对 Mongo 数据库的写入进行排队。我正在尝试为一个在 celery 中排队的函数编写一个功能测试(使用 Selenium)。
问题是 celery 写入主 Mongo 数据库而不是测试数据库。如何设置我的功能测试以使用写入测试数据库的 celery 实例?
我们使用 'django_nose.NoseTestSuiteRunner'
作为我们的 TEST_RUNNER
。
更新:
我无法弄清楚如何使用另一个 celery 实例进行测试,但我找到了一种绕过 celery 进行功能测试的方法。
在我的 settings.py
中:
FUNC_TEST_COMMAND=['functional']
func_test_command = filter(lambda element: element in FUNC_TEST_COMMAND, sys.argv)
if len(func_test_command) > 0:
CELERY_ALWAYS_EAGER = True
这模仿了 AsyncResult
的行为,在运行功能测试套件时无需通过消息队列发送任何内容。 (参见 http://celery.readthedocs.org/en/2.4/configuration.html#celery-always-eager 了解更多信息。)
此解决方案可能不适合功能测试,因为它会切断其中一个应用程序层。
最佳答案
使用 CELERY_ALWAYS_EAGER = True 确实绕过了 Celery 的异步处理。为了写入测试数据库,你需要使用测试数据库的连接设置来启动你的 celeryd worker。
https://stackoverflow.com/questions/12968685/
相关文章:
mongodb - 对大量数据使用 Mongo 地理空间查询
javascript - 不确定如何在 Express/MongoDB 应用程序中处理数据访问对象/
mongodb - .NET 驱动程序与 LINQ : NotSupportedException:
mongodb - 使用 pymongo 将 MongoDB 导出为 CSV
spring - 蒙戈 : repositories no longer works
java - 在等待与 WritableServerSelector 匹配的服务器时超时 30000
mongodb - Mongoid 没有服务器可用匹配首选项