Какими характеристиками должен обладать хороший автотест?
Что проверяют
Писали ли вы автотесты, которые живут дольше пары спринтов, и понимаете ли, почему набор тестов вообще перестают поддерживать. Следом обычно спрашивают про flaky-тесты: как вы их находите и что с ними делаете.
Как отвечать
Сформулируйте свойства и к каждому добавьте, как оно достигается на практике:
- детерминированность: один и тот же код даёт один и тот же результат. Никаких
Thread.sleepи фиксированных пауз, только ожидание условия (WebDriverWait, автоожидания Playwright); - независимость: тест сам готовит данные и сам за собой убирает, не рассчитывает на порядок запуска и на то, что соседний тест создал пользователя. Тогда тесты можно гонять параллельно;
- одна проверяемая идея: тест проверяет одно поведение, а его название говорит, какое именно. Упавший
checkoutFailsWhenCardExpiredпонятен без чтения кода; - понятная причина падения: осмысленные сообщения в ассертах, скриншот, лог и трейс в отчёте Allure или аналоге;
- быстрота и правильный уровень: то, что можно проверить через API или юнит-тестом, не гоняют через UI. Отсюда пирамида тестов;
- поддерживаемость: Page Object или похожая абстракция, локаторы по стабильным атрибутам вроде
data-testid, а не по длинным XPath, тестовые данные через фабрики и параметризацию; - ценность: тест ловит реальную регрессию. Тест, который ни разу не упал по делу, стоит пересмотреть.
Хороший ход: рассказать о своём наборе, какая доля тестов была нестабильной и что вы сделали, например вынесли подготовку данных в API и убрали паузы. Цифры называйте свои.
Где спотыкаются
Лечат нестабильность ретраями. Автоматический перезапуск маскирует проблему: гонку, общие данные, медленное окружение. Ретрай допустим как временная мера, если упавшие с первой попытки тесты отслеживаются отдельно.
Считают, что чем больше UI-тестов, тем лучше. Сотни сквозных сценариев дают многочасовой прогон и постоянные ложные падения.
Прячут в одном тесте десяток проверок подряд. Первый упавший ассерт скрывает остальные, а по названию непонятно, что сломалось.