在 Python/Flask 中测试计划任务
Testing Scheduled Tasks in Python/Flask
我正在构建一个小型 Flask 应用程序,它会每隔一段时间运行一次作业,比如每月一次。我为此使用 apschduler
。有没有办法为此设置测试?我正在使用 py.test.
类似于:
def test_cron(self, app):
wait(months=1)
assert cron_has_run
有什么建议吗?
您不需要测试作业是否实际运行,因为它由已经过测试的 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)
如果您对 apscheduler 如何测试其调度程序感兴趣,可以查看代码:https://github.com/agronholm/apscheduler/blob/master/tests/test_schedulers.py。它使用过去的模拟和日期。
我正在构建一个小型 Flask 应用程序,它会每隔一段时间运行一次作业,比如每月一次。我为此使用 apschduler
。有没有办法为此设置测试?我正在使用 py.test.
类似于:
def test_cron(self, app):
wait(months=1)
assert cron_has_run
有什么建议吗?
您不需要测试作业是否实际运行,因为它由已经过测试的 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)
如果您对 apscheduler 如何测试其调度程序感兴趣,可以查看代码:https://github.com/agronholm/apscheduler/blob/master/tests/test_schedulers.py。它使用过去的模拟和日期。