Как оценить поддерживаемость тестов
Что проверяют
Понимаете ли вы, что поддерживаемость измеряется стоимостью изменений, а не красотой кода. Интервьюер ждёт наблюдаемые признаки и метрики, а не общее «пишем чисто». Следом обычно спрашивают, что вы делали с нестабильными тестами на своём проекте.
Как отвечать
Оценку удобно строить по двум слоям: что можно посчитать и что видно на ревью.
Метрики:
- стоимость изменения: сколько тестов и файлов пришлось править после изменения одной формы. Переименовали кнопку, упало сорок тестов: локаторы размазаны по сценариям;
- доля ложных падений: сколько красных прогонов оказались проблемой теста, а не продукта. Когда таких много, отчётам перестают доверять;
- flaky rate: тесты, которые на одном и том же коде то проходят, то падают. Их видно по истории в Allure или по перезапускам
pytest-rerunfailures; - время до починки: сколько живёт красный тест, прежде чем его исправят или честно отключат с задачей;
- время прогона: набор, который идёт час, запускают реже, и он деградирует быстрее.
Признаки на ревью:
- структура: Page Object или Screenplay, локаторы и шаги в одном месте, в самом тесте только сценарий и проверки;
- устойчивые локаторы:
data-testidилиgetByRoleв Playwright вместо XPath по вёрстке; - независимость: каждый тест готовит свои данные через API или фикстуры и не зависит от порядка запуска;
- явные ожидания: вместо
sleepожидание условия, в Playwright оно встроено вexpect; - понятное падение: по имени теста и сообщению ассерта ясно, что сломалось, без открытия кода.
Приведите пример из опыта: какую метрику вы отслеживали и что изменилось после рефакторинга. Цифры нужны свои.
Где спотыкаются
Отвечают про покрытие кода. Процент покрытия говорит, какой код исполнялся, но ничего о том, легко ли тесты менять.
Лечат нестабильность перезапусками. Ретрай прячет проблему, а гонка в ожиданиях или общих данных остаётся.
Складывают в Page Object проверки и бизнес-логику. Объект страницы разрастается до тысячи строк, и поддерживать его труднее, чем исходные тесты.