Перейти к основному содержимому

retry-limiter

Обзор

Используйте плагин retry-limiter, чтобы ограничивать количество ретраев упавших тестов, а также время, в течение которого ретраи разрешены.

подсказка

Используйте данный плагин при прогоне тестов в CI. — Так как в CI, как правило, прогоняются либо все тесты проекта, либо их значительная часть.

Использовать плагин retry-limiter при локальных запусках отдельных тестов чаще всего нецелесообразно, ввиду их малого количества и, соответственно, отсутствия значимого эффекта от экономии «железа» или времени на прогон тестов.

Ретраи упавших тестов — один из способов борьбы с нестабильными тестами. Однако, бывают случаи, когда тесты падают массово из-за проблем с инфраструктурой или из-за того, что код проекта был сломан (например, в пулл-реквесте). В таких случаях ретраи только зря тратят ресурсы серверов, на которых прогоняются тесты, и время разработчика, заставляя разработчика ждать окончания прогона тестов, которые заведомо упадут.

Чтобы избежать подобных сценариев, плагин retry-limiter позволяет:

  • задать максимальную долю ретраев от общего количества тестов;
  • ограничить время, в течение которого ретраи могут использоваться;
  • снизить максимальное количество ретраев для всех тестов, если хотя бы один из тестов упадет, несмотря на все ретраи.

Например, если в проекте запускаются 1000 тестов и для параметра limit в конфиге плагина установлено значение 0.3, то при падении тестов будет максимально разрешено 300 ретраев.

Если в конфиге плагина ещё установлено значение 600 секунд (10 минут) для параметра timeLimit, то независимо от того, сколько раз ещё можно ретраить упавшие тесты, плагин отключит механизм ретраев через 10 минут после начала прогона тестов. Последнее защищает от нерациональной траты ресурсов «железа» на слишком долгие прогоны тестов.

Если testplane запущена с опцией --retry, например, со значением 7, и при этом в конфиге плагина retry-limiter параметр setRetriesOnTestFail установлен в значение 4, то это означает следующее: в случае падения хотя бы одного теста в любом из браузеров после 7 ретраев, плагин посчитает, что возникла какая-то системная проблема и нужно снизить максимально разрешенное число ретраев до значения, заданного в параметре setRetriesOnTestFail, то есть до 4. Это также позволяет защититься от нерационального расхода ресурсов на прогон тестов в случае системных проблем.

подсказка

Если вы столкнулись в своем проекте с ситуацией, когда механизм ретраев начинает отключаться из-за превышения timeLimit, то не рекомендуется бездумно увеличивать это время. Стоит разобраться, почему прогон тестов начал выполняться слишком долго, а не «заливать железом» реальную проблему со стабильностью прогонов тестов.

Установка

npm install -D retry-limiter

Настройка

Необходимо подключить плагин в разделе plugins конфига testplane:

module.exports = {
plugins: {
"retry-limiter": {
limit: 0.3, // разрешаем не больше 30% ретраев от общего числа тестов
setRetriesOnTestFail: 4, // снижаем число ретраев до 4 после падения первого теста
timeLimit: 600, // через 10 минут ретраи должны быть отключены
},

// другие плагины testplane...
},

// другие настройки testplane...
};

Расшифровка параметров конфигурации

ПараметрТипПо умолчаниюОписание
enabledBooleantrueВключить / отключить плагин.
limitNumber1Максимально разрешенная доля ретраев от общего количества тестов. Задается как число в диапазоне от 0 до 1. После превышения заданной доли ретраев ретраи будут отключены.
setRetriesOnTestFailNumberInfinityЧисло ретраев, до которого надо снизить разрешенное число ретраев, если упадет хотя бы один тест, несмотря на все ретраи.
timeLimitNumberInfinityВремя в секундах, после истечения которого ретраи будут отключены.

Передача параметров через CLI

Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс --retry-limiter- для опций командной строки и retry_limiter_ — для переменных окружения. Например:

npx testplane --retry-limiter-time-limit=900 ...
retry_limiter_time_limit=900 npx testplane ...

Использование

При использовании плагина в логах testplane вы можете увидеть сообщения следующего вида:

retry-limiter: will stop retrying tests after 600 seconds
retry-limiter: with limit 0.3 will stop retrying tests after 1189 retries

В первом сообщении плагин информирует об ограничении времени работы механизма ретраев. Во втором сообщении — об ограничении общего количества ретраев.