Что такое flaky tests
Что проверяют
Различаете ли вы нестабильный тест и найденный дефект, и есть ли у вас процесс вместо привычки перезапускать сборку. На этом вопросе хорошо видно зрелость автоматизации, в которой вы работали.
Как отвечать
Flaky test это тест, который на одном и том же коде и окружении даёт разный результат от запуска к запуску. Опасен он не самим падением, а тем, что обесценивает прогон: команда привыкает к красному и перестаёт читать отчёты, а вместе с шумом теряются настоящие поломки.
Причины называйте группами:
- время: фиксированные паузы вместо ожидания условия, анимации, таймауты, зависимость от часового пояса или смены суток;
- общее состояние: тесты зависят от порядка запуска, делят учётную запись или строки в базе, не убирают за собой;
- параллельность: гонки в тесте и в самом продукте, конкуренция за порт, файл или очередь;
- внешние зависимости: сторонний сервис, сеть, случайные данные без фиксированного зерна.
Процесс опишите так: собирать историю по каждому тесту и считать долю нестабильных прогонов, воспроизводить запуском в цикле, подтверждённый тест уводить в карантин с заведённой задачей и сроком, чинить причину, возвращать в основной набор. Профилактика: ожидание состояния вместо пауз, свои данные на каждый прогон, фиксированные часы и зерно, подмена внешних вызовов на уровне сети.
Где спотыкаются
Лечат перезапусками. Автоповтор вписывают в конвейер и закрывают тему, а он маскирует настоящую гонку в продукте, которая потом воспроизводится у пользователя.
Удаляют неудобный тест. Нестабильность нередко указывает на реальный дефект синхронизации, и вместе с тестом выбрасывается единственный сигнал о нём.
Борются увеличением пауз. Ожидание растёт, прогон замедляется, а падения возвращаются на более медленной машине, потому что причина в отсутствии проверки условия, а не в длине паузы.