Есть особая тишина в команде, у которой красный сьют. Никто его не защищает, никто не удаляет, а в пайплайне где-то стоит строчка, пропускающая сборку в любом случае. Это одно из самых частых состояний, и выход из него — не «стараться лучше».
Флаки — это про устройство, а не про дисциплину
Тест, который падает раз в двадцать прогонов без причины, убивает сьют быстрее, чем сотня честно сломанных. Честные падения чинят. Случайные учат команду, что красный цвет ничего не значит.
Причины почти всегда структурные:
- Ожидание по таймеру. «Подождать две секунды» проходит на быстрой машине и падает на загруженной. Ждать надо условия — появления элемента, завершения запроса, — а не времени.
- Общие данные. Два теста используют один аккаунт, один меняет его состояние, исход решает порядок запуска. Каждый тест должен создавать своё и выполняться в одиночку, параллельно, в любом порядке.
- Живые внешние сервисы. Медленное утро в песочнице платёжного провайдера — не ваша поломка. Внешнее заглушается на границе.
- Время и часовые пояса. Тесты, которые проходят всегда, кроме полуночи.
Ни одна из этих причин не лечится просьбой быть внимательнее.
Вторая причина: тесты, которые ничего не проверяют
Сьют, который убеждается, что страница открылась и кнопка на месте, всегда зелёный и совершенно бесполезен. Проверять надо результат: изменился ли баланс, ушло ли письмо, перешёл ли заказ в нужное состояние.
Хороший вопрос к своему сьюту: если завтра сломается оплата, какой именно тест покраснеет? Если ответа нет — у вас нет тестов на оплату, сколько бы их ни было в отчёте.
Неприятный, но правильный вывод
Сначала честно разделите: сколько падает по делу, а сколько случайно. Случайное чинится структурно и обычно быстро.
Но если сьют не приводится в порядок за разумное время, дешевле выбросить его и написать пятнадцать тестов, которым верят, чем содержать двести, на которые все закрывают глаза. Это решение выглядит расточительным ровно до того момента, когда вы посчитаете, сколько минут на каждом пуше стоит красный шум.
Спасать или переписать
Решение принимается не по объёму сьюта, а по трём признакам.
Понятно ли, что проверяет тест? Если из названия и кода не следует, какое
поведение продукта здесь важно, тест не спасают: восстановить намерение автора
дороже, чем написать проверку заново.
Создают ли тесты свои данные? Сьют, который зависит от базы, наполненной
однажды руками, будет падать после каждого восстановления, и никто не поймёт
почему. Это чинится, но это переписывание, а не починка.
Как быстро он идёт? Сьют на сорок минут не запускают на каждый пуш, а раз
в неделю он бесполезен. Иногда лечится параллельным запуском, иногда — тем,
что половину тестов надо удалить.
Если на все три вопроса ответ плохой, честная оценка спасения выходит выше, чем
цена нового набора на пятнадцать путей. Мы в такой ситуации так и говорим,
теряя часы: разбирать чужие руины неделями и выдать чуть менее красный сьют —
плохая сделка для обеих сторон.
Что делать прямо сейчас, до всякого подрядчика
Три действия, которые ничего не стоят и сразу дают картину.
Выключите то, что не чинят. Тест, который падает второй месяц и никого не
беспокоит, не защищает ничего — он только приучает команду к красному цвету.
Уберите его из обязательных проверок сегодня, а решение о судьбе примите потом.
Заведите правило «красное не сливаем». Оно работает только вместе с первым
пунктом: требовать зелёного от сьюта, который зелёным не бывает, — способ
приучить людей нажимать «слить всё равно».
Посчитайте, сколько тестов упало по разным причинам за неделю. Если один и
тот же тест падает через раз — это нестабильность, и её чинят устройством
теста. Если каждый раз падают разные — это, скорее всего, продукт, и тогда
сьют работает как надо.
Как понять, что получилось
Красный билд снова означает «стоп». Пайплайн больше не настроен «продолжать в любом случае». Разработчик, увидев падение, открывает видео и трассировку, а не пожимает плечами.
Мы такое расчищали и у себя, и у клиентов. Если хотите оценку без обязательств — расскажите, что происходит на релизе: за полчаса обычно видно, лечится ли ваш сьют или его дешевле переписать.
Раньше в этой теме: что автоматизировать в первую очередь, если тестов пока нет.