Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

26.08.2024

Випадково невдалі тести

Що ви робите з випадково невдалими тестами? Роки йдуть, а ця неприємність залишається поруч. Хоча причина, принаймні в мене, змінилася. Колись головною проблемою були побічні ефекти та взаємовплив тестів. Через те досі в Ruby запускаємо тести у випадковому порядку. Але, сучасні тести дають хибу через асинхронні події в самому тесті. Головним чином це тільки інтеграційні тести. З одного боку, їх мало, що гарно; з іншого — вони довгі. Що погано.

Раніше я був тієї думки що випадково невдалі тести потрібно збирати, відстежувати частоту та виправляти за критичністю. Зараз бачу, що такі списки застарівають. Натомість можна просто відкрити перелік останніх невдалих запусків CI, та виправляти просто по черзі. (В GitHub Actions, наприклад, можна відфільтрувати запуски за статусом та гілкою.)

Далі беру тест та запускаю його по колу локально, скриптом на кшталт такого:

for i in (seq 0 100000); echo $i; runtest; or break; end

(Це мова оболонки fish, якщо що.) Так набагато зручніше ніж запускати повторно вручну. Можна поставити та займатись чимось іншим. А якщо тест не падає 100, 1000 разів, можна зробити висновок, що він не такий вже й невдалий. (Тому немає великого сенсу заздалегідь вести статистику.)

Коли зрозуміло, де саме тест падає, можна розсипати там максимум логів. Бо якщо причиною є випадковий збіг обставин, побачити його пізніше буде важко. Навіть коли пізніше — це через десять секунд.

Залишається знайти причину та виправити… Хоча це й нелегко, але все ж чомусь найскладніше це досягти відтворення тесту з помилкою.