【发布时间】:2020-01-28 20:32:51
【问题描述】:
我正在尝试测试我的 Django 应用程序功能。
我的一些任务正在使用 Celery。
如何使用 PyCharm 在我的测试环境中运行 celery?
【问题讨论】:
标签: python django unit-testing pycharm celery
我正在尝试测试我的 Django 应用程序功能。
我的一些任务正在使用 Celery。
如何使用 PyCharm 在我的测试环境中运行 celery?
【问题讨论】:
标签: python django unit-testing pycharm celery
使用mock 库将解决您的问题。
【讨论】:
要在不测试 celery 的情况下进行单元测试,您可能需要模拟您的 @shared_task 装饰器
from unittest import mock
@mock.patch('celery.shared_task', lambda *args, **kwargs: lambda func: func)
def test_celery_unit()
from tasks import mytask
result = mytask() # could be call just as a function
【讨论】:
我假设您正在使用 shared_task 装饰器并将任务作为 function_name.delay() 运行
这可以通过添加一个条件来测试,如果在本地运行(或通过测试)运行任务并在生产中使用 celery。这也允许人们在不使用 celery 的情况下在本地运行服务器,并且可以更容易地调试和维护。
PRODUCTION = False
if PRODUCTION:
some_task.delay()
else:
some_task()
也可以创建一个做同样事情的装饰器,它更漂亮,但维护起来可能更复杂?
【讨论】: