【问题标题】:How to properly test scheduled test using djcelery如何使用 djcelery 正确测试预定测试
【发布时间】:2016-03-25 23:31:14
【问题描述】:

我有一个使用 djcelery 的周期性任务。此任务正在调查数据库,如有必要,它会进行相同的更改。 如您所知,“python manage.py test”创建了一个测试数据库,那么我如何在这个测试数据库中运行这个周期性任务呢?

我尝试先运行:python manage.py test

然后当我尝试运行以下内容时

python manage.py celery worker -l info &

python manage.py celery beat -l info &

测试结束

【问题讨论】:

    标签: python django unit-testing celery djcelery


    【解决方案1】:

    您不需要运行 celery workers 或 celery beat,这不是很好的单元测试。您正在尝试测试该任务,因此您应该隔离该任务并对其进行测试。您需要使用 CELERY_ALWAYS_EAGER 模式运行测试,或者只是在没有异步模式的情况下从测试内部运行您的任务。

    为了避免使用异步,只需像这样调用你的任务:

    @celery.task
    def task_to_test():
        print('stuff')
    
    
    def test:
       task_to_test()
    

    如果你不能这样做。覆盖您的设置以使用总是渴望。

    from tasks import task_to_test
    
    @override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=True,
                       CELERY_ALWAYS_EAGER=True,
                       BROKER_MEMORY='memory',
                       CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',}})
    class MyTests(TestCase):
    def test():
        task_to_test.delay()
    

    【讨论】:

    • 关于 Simones 观点的注释:“你不需要运行 celery workers 或 celery beat,那不是很好的单元测试”这是非常激进的建议,任何人都需要知道如果你真的需要测试你的 celery 配置是否正常工作(你的周期性任务是如何运行的),你可以测试它。这不是很困难。
    • 如果您知道单元测试的含义,那么您可能同意我的观点。该问题不涉及测试芹菜配置。我只是假设这个人想测试他的任务。他接受了答案,所以也许这就是他想要的。如果您想真正为该主题做出贡献,请将您的方法作为答案发布并解释您提出的测试方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2018-01-27
    相关资源
    最近更新 更多