我正在研究Django应用程序。我们使用celery将写入队列排队到Mongo数据库。我正在尝试用函数测试(使用Selenium)来编写一个在芹菜中排队的函数。
问题是芹菜写入主Mongo数据库而不是测试数据库。如何设置我的功能测试以使用写入测试数据库的芹菜实例?
我们使用'django_nose.NoseTestSuiteRunner'
作为TEST_RUNNER
。
的更新 :
我无法弄清楚如何在测试中使用另一个芹菜实例,但我找到了绕过芹菜进行功能测试的方法。
在我的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。)
此解决方案可能不适用于功能测试,因为它会切断其中一个应用层。
答案 0 :(得分:1)
使用CELERY_ALWAYS_EAGER = True确实绕过了Celery的异步处理。为了写入测试数据库,您需要使用连接设置启动您的celeryd worker到测试数据库。
答案 1 :(得分:0)
如果您使用自动测试客户端运行功能测试,我建议您查看LiveServerTestCase
。
然后确保您有一个单独的设置模块来运行您的测试,并正确配置Celery以使用您的project's database for transport。