我想用我的芹菜代码制作一个测试用例。
但通常芹菜需要从像$ celery -A CELERY_MODULE worker
这样的新进程开始,这意味着我无法直接运行我的测试用例代码?
我使用内存存储配置Celery以使测试用例中的额外I / O无效。那个配置无法在不同的进程中共享任务队列。
答案 0 :(得分:0)
这是我天真的工具。
来自celery.bin.celeryd.WorkCommand
的celery条目,它解析args并执行工作
使用solo
使案例中的MultiProcess使用无效。当然你需要先安装lib。
您可以在芹菜测试用例开始之前使用它。
#!/usr/bin/env python
#vim: encoding=utf-8
import time
import unittest
from threading import Thread
from celery import Celery, states
from celery.bin.celeryd import WorkerCommand
class CELERY_CONFIG(object):
BROKER_URL = "memory://"
CELERY_CACHE_BACKEND = "memory"
CELERY_RESULT_BACKEND = "cache"
CELERYD_POOL = "solo"
class CeleryTestCase(unittest.TestCase):
def test_inprocess(self):
app = Celery(__name__)
app.config_from_object(CELERY_CONFIG)
@app.task
def dumpy_task(dct):
return 321
worker = WorkerCommand(app)
#worker.execute_from_commandline(["-P solo"])
t = Thread(target=worker.execute_from_commandline, args=(["-c 1"],))
t.daemon = True
t.start()
ar = dumpy_task.apply_async(({"a": 123},))
while ar.status != states.SUCCESS:
time.sleep(.01)
self.assertEqual(states.SUCCESS, ar.status)
self.assertEqual(ar.result, 321)
t.join(0)