Что такое flaky-тесты и как с ними бороться?
E2E и инструменты
Flaky-тест — тест, который то проходит, то падает без изменений в коде. Такие тесты разрушают доверие к набору.
Частые причины
- Жёсткие паузы
sleepвместо ожидания условия. - Гонки между интерфейсом и сетью, неготовый DOM.
- Зависимость от порядка тестов и общего состояния (база, localStorage).
- Реальное время, случайные числа и внешние сервисы.
- Нестабильные селекторы и анимации.
Как лечить
- Ждать условие, а не время: автоожидание Playwright,
findBy,waitFor. - Изолировать тесты: свежие данные и чистое состояние для каждого.
- Подменять время и сеть, не обращаться к внешним сервисам.
- Использовать стабильные селекторы по роли и тексту.
- На CI включить повторный запуск с отчётом, чтобы ловить нестабильные тесты, и вести список на исправление.
// плохо
await page.waitForTimeout(3000);
// хорошо
await expect(page.getByText('Готово')).toBeVisible();Коротко для собеседования
Flaky-тест — следствие гонок и общего состояния. Лечим ожиданием условий, изоляцией и подменой нестабильных зависимостей, а не повторными запусками.