Использование повторных попыток в тестах может маскировать баги |
31.08.2022 00:00 |
Автор: Корина Пип (Corina Pip) Все мы хорошо знакомы с концепцией случайным образом падающих автотестов. Это тесты, которые, несмотря на отсутствие изменений в тестируемой функции, или падают случайным образом на одном и том же шаге, или делают это каждый раз по-разному. Разбор результатов таких тестов может быть непростым делом, и некоторые команды предпочитают просто прогнать тест еще раз, если он упал. Но действительно ли это лучшее решение? Вот что думаю я. Начнем с вопроса, почему эти тесты падают случайным образом. Вот несколько возможных причин:
Чтобы после прогона тестов получить зеленые результаты, зачастую добавляют механизм повторных попыток. Он может прогнать упавшие тесты заново или разово, или заданное количество раз. Однако это может скрыть, что тесты упали не просто так, и что причина падения – это баг в системе. Так как тесты упали в первый раз, но прошли во второй, там могут быть и баги:
Помимо того, что баги не изучаются, у механизма повторных попыток есть еще одна досадная черта: один тест займет вдвое (или более) больше времени на прогон. Сначала мы его прогоняем, он падает, и мы прогоняем его еще как минимум один раз. Итак, что же предпринять вместо повторных попыток?
Если мы игнорируем такие случайные падения, в какой-то момент эти тесты будут считаться неважными, и их больше не будут запускать. Или падения будут полностью проигнорированы, потому что мы знаем, что тест имеет свойство иногда падать – и когда он упадет по серьезному поводу, мы решим, что это такое же случайное падение. Мы не будем даже разбираться с причинами. И вот так и пропускаются баги. |