celery.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab
app = Celery("clock-backend", broker=os.environ.get("RABBITMQ_URL"))
app.config_from_object("django.conf:settings", namespace="CELERY")
app.conf.beat_schedule = {
'create_reports_monthly': {
'task': 'project_celery.tasks.create_reports_monthly',
'schedule': 10.0,
},
}
app.autodiscover_tasks()
启动我的项目,它实际上每10秒创建一个对象。
但是我真正想做的是将其设置为每月的第一天运行。
为此,我将更改"schedule": crontab(0, 0, day_of_month="1")
。
这是我的实际问题:我如何测试它是否确实有效?
通过测试,我指的是实际的(单元)测试。
我尝试过的是使用名为freezegun的软件包。 与此类似的测试:
def test_start_of_month_report_creation(self, user_object, contract_object, report_object):
# set time to the last day of January
with freeze_time("2019-01-31 23:59:59") as frozen_time:
# let one second pass
frozen_time.tick()
# give the celery task some time
time.sleep(20)
# Test Logic to check whether the object was created
# Example: assert MyModel.objects.count() > 0
但是这没有用。我怀疑芹菜节拍不是使用通过freezgun / python设置的时间,而是使用真正的“硬件”时钟。
我也尝试像here那样设置Hardwareclock,但这在我的设置中不起作用。
感谢您对此主题的任何评论,言论或帮助,因为我真的很想为此进行测试。