我正在尝试为Django(2.2.3版)应用程序编写Celery(4.2.1版)集成测试。
关于这方面有很多过时的文章,但是似乎没有一篇使用最新的芹菜测试文档-https://docs.celeryproject.org/en/v4.2.1/userguide/testing.html#fixtures
好像Celery附带了两个测试夹具:celery_app
和celery_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
我无法访问测试数据库中的对象。
这样,它不使用指定的固定装置,因为它们应该出现在方法参数中,并通过超过参数数量来破坏它。
认为Celery pytest插件可能根本不存在,但事实并非如此-尝试显式注册它:
但是我已经进入了theis源代码,在其中添加了一些通配符prints
,但我看不到它们已记录。
答案 0 :(得分:0)
在这里,我已经弄清楚了,写了一篇文章-https://medium.com/@scythargon/how-to-use-celery-pytest-fixtures-for-celery-intergration-testing-6d61c91775d9
主键:
object