简体   繁体   English

如何在 Django 中测试 celery period_task?

[英]How to test celery periodic_task in Django?

I have a simple 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()

And I want to cover it with tests.我想用测试来覆盖它。

I found information about how to test simple tasks, like @shared_task, but nowhere can I find an example of testing @periodic_task我找到了关于如何测试简单任务的信息,比如@shared_task,但我找不到测试@periodic_task的例子

When having a periodic task defined with a decorator you can access the crontab configuration the following way:当使用装饰器定义周期性任务时,您可以通过以下方式访问 crontab 配置:

tasks.py任务.py

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

some file where you need to access it一些您需要访问它的文件

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

This way you can access when task will be executed and you check in your test if the expected time is there.通过这种方式,您可以访问何时执行任务并检查您的测试是否存在预期时间。

Use the function apply() .使用函数apply() Documentation for apply() . apply()文档。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM