Celery的pytest固定装置(celery_worker和celery_app)不起作用

时间:2019-11-27 17:56:29

标签: django celery django-celery

我正在尝试为Django(2.2.3版)应用程序编写Celery(4.2.1版)集成测试。

关于这方面有很多过时的文章,但是似乎没有一篇使用最新的芹菜测试文档-https://docs.celeryproject.org/en/v4.2.1/userguide/testing.html#fixtures

好像Celery附带了两个测试夹具:celery_appcelery_worker,它们应该允许在测试的后台线程中实际运行worker。

正如医生所说,我已添加

@pytest.fixture(scope='session')
def celery_config():
    return {
        'broker_url': 'memory://',
        'result_backend': 'rpc'
    }

进入我的conftest.py

我将测试功能包装为

@pytest.mark.celery_app
@pytest.mark.celery_worker

通常我用芹菜包裹

from celery import shared_task
@shared_task
def blabla(...):
    pass

但我什至尝试用

替换它
from myapp.celery import celery
@celery.task
def blabla():
    pass

还有什么...我通过提供apply_async参数的eta运行我的芹菜任务。

尝试了很多方式,但是芹菜夹具不影响事物的工作方式,并且任务调用转到实际的redis实例,并由工人在单独的进程(如果我运行)中进行选择,因此我的assert_called我无法访问测试数据库中的对象。

这样,它不会加载灯具。 enter image description here

这样,它不使用指定的固定装置,因为它们应该出现在方法参数中,并通过超过参数数量来破坏它。

enter image description here

认为Celery pytest插件可能根本不存在,但事实并非如此-尝试显式注册它: enter image description here

尽管这些固定装置可用于pytest: enter image description here

但是我已经进入了theis源代码,在其中添加了一些通配符prints,但我看不到它们已记录。

1 个答案:

答案 0 :(得分:0)

在这里,我已经弄清楚了,写了一篇文章-https://medium.com/@scythargon/how-to-use-celery-pytest-fixtures-for-celery-intergration-testing-6d61c91775d9

主键:

object