如何在Django中测试celery periodic_task?

时间:2018-03-31 10:58:59

标签: python django cron celery periodic-task

我有一个简单的定期任务:

from celery.decorators import periodic_task
from celery.task.schedules import crontab
from .models import Subscription

@periodic_task(run_every=crontab(minute=0, hour=0))
def deactivate_subscriptions():
    for subscription in Subscription.objects.filter(is_expired=True):
        print(subscription)
        subscription.is_active = False
        subscription.can_activate = False
        subscription.save()

我想用测试来掩盖它。

我找到了有关如何测试简单任务的信息,例如@shared_task,但我找不到测试@periodic_task

的示例

2 个答案:

答案 0 :(得分:1)

使用函数apply()Documentation for apply().

答案 1 :(得分:0)

当使用装饰器定义周期性任务时,您可以通过以下方式访问 crontab 配置:

tasks.py

@periodic_task(
    run_every=(crontab(minute="*/1")),
)
def my_task():
    pass

需要访问的文件

from .tasks import my_task

crontab = my_task.run_every

hours_when_it_will_run = crontab.hour
minutes_when_it_will_run = crontab.minute
day_of_the_week_when_it_will_run = crontab.day_of_week
day_of_the_month_when_it_will_run = crontab.day_of_month
month_of_year_when_it_will_run = crontab.month_of_year

通过这种方式,您可以访问何时执行任务并检查您的测试是否有预期的时间。