如何为 cron 作业编写集成测试?

jl6*_*jl6 6 testing cron

我有一系列 cron 作业,我想以比以下更及时和自动化的方式测试它们:

  1. 通过手动运行单独测试单个作业。
  2. 安装作业并更新 crontab。
  3. 等待 cron 执行作业。
  4. 观察结果。

我认为以 root 身份运行测试脚本(当然是在开发环境中)并摆弄系统时钟可能是有益的。什么是最佳实践?

vor*_*aq7 10

最佳实践是在开发环境(您似乎已经知道)中进行所有测试。

对于测试 cron 作业,我通常不喜欢使用系统时钟(您不能只是将时间调到您想要的任何位置 - 您需要让时钟运行所有点以查看作业如何运行并与之交互彼此。
你也不能只是加快时钟 (x100) 使其更快:执行大量数字运算的 cron 作业不会更快,而且你可能让它们踩到自己(或彼此)取决于日程安排的样子。

我测试 cron 作业的标准如下:

  1. 通过手动运行来测试作业。
    在这里调试一下,这样你以后就不会受到 cron 电子邮件的轰炸。
  2. 安装作业,安排它从现在开始运行 2-3 分钟。
    • 观察从 cron 运行的结果(没有 tty)。
  3. 打破作业所依赖的东西,并安排它在几分钟内再次运行。
    • 观察对破损的反应(确保它符合您的要求)。
  4. 如果作业在 (2) 和 (3) 中运行正常,则安排它在正常时间运行。
    • 观察作业在正常时间运行的结果。
    • 如果作业运行正常,则将更改升级到生产。

在实践中,您有时可以跳过第 4 步(如果您知道某个作业不会影响任何其他作业,并且您不担心 CPU/RAM/磁盘负载问题)。


真正对 cron 作业进行集成测试,您必须让一整年过去(夏令时更改),甚至可以争论需要超过 4 年(闰年、闰秒等),但没有人我知道这样做。请注意,有时 2:30 会发生不止一次(或根本不发生),而且并不总是 2 月 29 日,您通常会没事。