Что делать с нестабильными (flaky) тестами?
- Почему тест то проходит, то падает?
Нестабильный тест подрывает доверие ко всем тестам: команда привыкает перезапускать и пропускает настоящие ошибки. Частые причины: ожидание по времени (sleep) вместо условия, общие данные между тестами, порядок выполнения, зависимость от внешних сервисов и текущего времени, анимации, гонки в самом приложении. Лечение: найти причину по трассам и логам, ждать состояния, изолировать данные, подменить внешнее, заморозить время. Нестабильный тест помечают и чинят с владельцем и сроком, а не бесконечно перезапускают.
- Автоматические повторы маскируют проблему — только как временная мера с учётом
- Иногда тест нашёл настоящую гонку в продукте
- Метрика: доля перезапусков в CI
Подробно
Пример: тест кликает «Сохранить» и сразу проверяет список, а запрос ещё не вернулся. Исправление — ждать появления элемента в списке, а не sleep(500).
Что хотят услышать
- Почему вредны нестабильные тесты.
- Типичные причины.
- Поиск причины и карантин с владельцем.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Добавить sleep побольше, чтобы все асинхронные операции точно успели завершиться
- ✓Найти причину (тайминги, общие данные, гонки) и ждать состояния; временно — карантин
- ✗Удалить все тесты, которые хоть раз упали, и больше не тратить на них время на ревью и в CI
- ✗Настроить бесконечные автоматические перезапуски
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.