В чем ценность автоматизации сборки и тестирования в CI/CD по сравнению с локальной сборкой
Что проверяют
Понимаете ли вы, какую проблему решает конвейер, кроме «так принято». Для QA это вопрос о том, где живут автотесты и как их результат влияет на релиз. Следом обычно просят рассказать, как бы вы встроили тесты в пайплайн и что делать с нестабильными тестами.
Как отвечать
- воспроизводимость: сборка идёт на чистом раннере или в контейнере с зафиксированными версиями языка, браузеров и зависимостей из lock-файла. Локальная сборка зависит от того, что стоит у конкретного человека, отсюда «у меня работает»;
- обязательность: пайплайн запускается сам на каждый пуш и merge request, его нельзя забыть. Если проверка отмечена обязательной, красный статус блокирует слияние;
- быстрая обратная связь: ошибку находят через минуты после коммита, пока автор помнит контекст, а не на регрессе перед релизом;
- слои проверок: на каждый MR линтеры, юнит и API-тесты и короткий UI-смоук, полный регресс ночью или перед релизом. Долгие наборы делят на параллельные потоки: у Playwright есть шардирование, у Selenium свой Grid;
- артефакты и история: отчёт Allure, скриншоты, видео и трассировки падений лежат при сборке, и по истории видно, какой тест начал падать и с какого коммита;
- окружения: из того же пайплайна можно поднять стенд под ветку и гонять тесты на нём.
Скажите и про границы: локальный прогон не отменяется, он даёт самую быструю обратную связь до пуша. CI отвечает на другой вопрос: собирается ли код и проходят ли тесты в общем эталонном окружении. Инструменты называйте те, с которыми работали сами: GitLab CI, GitHub Actions, Jenkins, TeamCity.
Где спотыкаются
Перечисляют общие слова про скорость и качество без механики. Сильнее один пример: какой баг поймал пайплайн и что было бы без него.
Засовывают весь UI-регресс в каждый коммит. Пайплайн идёт час, разработчики перестают ждать результата и сливают ветки вслепую.
Лечат нестабильные тесты перезапуском до зелёного. Ретраи прячут и настоящие гонки в продукте, флаки нужно выносить в карантин и чинить.