Назад | Перейти на главную страницу

Как написать интеграционные тесты для заданий cron?

У меня есть ряд заданий cron, и я хотел бы протестировать их более своевременным и автоматизированным способом, чем следующие:

  1. Тестируйте отдельные задания изолированно, выполняя их вручную.
  2. Установите задание и обновите crontab.
  3. Подождите, пока cron выполнит задания.
  4. Наблюдайте за результатами.

Я думаю, что запуск тестового сценария от имени пользователя root (конечно, в среде разработки) и изменение системных часов может быть полезным. Какая лучшая практика?

Лучше всего проводить все тестирование в среде разработки (о которой вы, кажется, уже знаете).

Для тестирования заданий cron я обычно не люблю возиться с системными часами (вы не можете просто переключать время туда, где хотите - вам нужно позволить часам проходить через все точки, чтобы увидеть, как задания выполняются и взаимодействуют с друг друга.
Вы также не можете просто ускорить часы (x100), чтобы сделать это быстрее: задания cron, которые много обрабатывают числа, не будут быстрее, и вы можете заставить их наступать на себя (или друг друга) в зависимости от того, что расписание похоже.

Мой стандарт для тестирования заданий cron следующий:

  1. Проверьте задание, запустив его вручную.
    Отлаживайте его, черт возьми, здесь, чтобы позже вас не забросали электронной почтой cron.
  2. Установите задание, запланируйте его запуск через 2-3 минуты.
    • Наблюдайте за результатами, запущенными cron (без tty).
  3. Разбейте то, на что рассчитано задание, и запланируйте повторный запуск через несколько минут.
    • Понаблюдайте за реакцией на поломку (убедитесь, что она делает то, что вы хотите).
  4. Если задание выполняется нормально в пунктах (2) и (3), запланируйте его выполнение в обычное время.
    • Наблюдайте за результатами выполнения задания в обычное время.
    • Если задание выполняется нормально, продвигайте изменение в производство.

На практике вы можете иногда пропустить шаг 4 (если вы Знать что задание не влияет на другие задания, и вас не беспокоят проблемы с загрузкой ЦП / ОЗУ / диска).


Чтобы действительно выполните интеграционный тест для заданий cron, вы должны позволить пройти полный год (переход на летнее время), и можно даже привести аргумент в пользу необходимости более 4 лет (високосные годы, високосные секунды и т. д.), но я никого не знаю Является ли это. Просто имейте в виду, что иногда 2:30 бывает более одного раза (или не бывает вообще), и что не всегда бывает 29 февраля, и обычно у вас все в порядке.

  1. Запустите его из командной строки от имени пользователя, с правами которого вы хотите работать.
  2. Всегда помните, что вы должны использовать полный путь в crontab: -
    * * * * * /path/to/your/job >> /tmp/job.log 2>&1
  3. Проверить job.log.