【问题标题】:How do I get django celery to write to the test database for my functional tests?如何让 django celery 写入测试数据库以进行功能测试?
【发布时间】:2012-10-09 17:45:01
【问题描述】:

我正在开发一个 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。)

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

【问题讨论】:

    标签: python django mongodb selenium django-celery


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-08-02
        • 2014-04-02
        • 1970-01-01
        • 2023-04-09
        • 2022-08-02
        • 2017-09-17
        • 2017-11-26
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多