8

我正在开发一个 Django 应用程序。我们正在使用 celery 对 Mongo 数据库的写入进行排队。我正在尝试为一个在芹菜中排队的函数编写一个功能测试(使用 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。)

此解决方案可能不适合功能测试,因为它会削减其中一个应用程序层。

4

2 回答 2

1

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

于 2012-10-31T22:18:18.277 回答
0

我建议您看看LiveServerTestCase您是否使用自动化测试客户端来运行功能测试。

然后确保你有一个单独的设置模块来运行你的测试,正确配置 Celery 使用你项目的数据库进行传输

于 2012-10-20T13:06:04.210 回答