如何让django芹菜写入测试数据库进行功能测试?

时间:2012-10-19 06:38:11

标签: python django mongodb selenium django-celery

我正在研究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。)

此解决方案可能不适用于功能测试,因为它会切断其中一个应用层。

2 个答案:

答案 0 :(得分:1)

使用CELERY_ALWAYS_EAGER = True确实绕过了Celery的异步处理。为了写入测试数据库,您需要使用连接设置启动您的celeryd worker到测试数据库。

答案 1 :(得分:0)

如果您使用自动测试客户端运行功能测试,我建议您查看LiveServerTestCase

然后确保您有一个单独的设置模块来运行您的测试,并正确配置Celery以使用您的project's database for transport