在 Python/Flask 中测试计划任务

cyn*_*ile 2 testing pytest flask apscheduler

我正在构建一个小型 Flask 应用程序,它每隔一段时间运行一次工作,比如每月一次。我正在使用apschduler这个。有没有办法为此设置测试?我正在使用 py.test。

就像是:

def test_cron(self, app):
    wait(months=1)
    assert cron_has_run
Run Code Online (Sandbox Code Playgroud)

有什么建议?

dav*_*ism 7

您不需要测试作业是否实际运行,因为这是由已经测试过的 apscheduler 处理的。相反,测试任务本身并测试您是否按预期安排了它。

您可以使用 来检查计划的作业get_jobs。如果您想测试您是否正确安排了作业,请安排它,然后在列表中找到它的作业。例如,您可以测试是否next_run_time已过期一个月。

for job in get_jobs():
    if name != 'name of job you care about':
        continue

    assert job.next_run_time >= datetime.utcnow() + timedelta(days=30)
    assert job.next_run_time <= datetime.utcnow() + timedelta(days=32)
Run Code Online (Sandbox Code Playgroud)

如果您对 apscheduler 如何测试其调度程序感兴趣,可以查看代码:https : //github.com/agronholm/apscheduler/blob/master/tests/test_schedulers.py。它在过去使用模拟和日期。