3 Годувальник доками 4 Гід-напрямний ~9 хв

E2E-тести простими словами: робот тестує сайт замість тебе

Робот-тестувальник, який клікає за тебе 100 разів на секунду

E2E-тести простими словами: навіщо вайбкодеру робот, що сам тицяє кнопки на сайті, як написати E2E на Playwright через Claude і нічого не зламати перед запуском.

Скіли ECC у цьому уроці: e2e-testing

Що таке E2E-тест простими словами

Уяви, що ти зібрав шафу з IKEA. Стоїть, дверцята на місці, краса. Але перш ніж завантажити туди улюблений сервіз - ти ж посмикаєш кожну полицю й перевіриш, чи не випадає шухляда? Звісно. Інакше на третій день полиця з посудом гримне просто на кота.

Із сайтом усе так само. Ти (точніше, твій агент) зібрав лендинг чи застосунок. Воно ніби працює. Але «ніби» - це не перевірка, а надія. Хтось має відкрити сайт як живий відвідувач, понатискати кнопки, заповнити форми й переконатися, що нічого не відвалилося.

Цим «кимось» може бути терпляча людина, яка клікає те саме сто разів і тихенько ненавидить свою роботу. А може бути E2E-тест - маленький робот, якому ти один раз пояснив, що робити, і він повторює це бездоганно, безкоштовно й без вигорання хоч тисячу разів поспіль.

Робот-тестувальник із десятком рук одночасно клікає по кнопках на екрані сайту
E2E-тест - це невтомний робот, який клікає за тебе, не втомлюючись і не ниючи.

Навіщо E2E-тести потрібні вайбкодеру

Ти вайбкодер. Тести руками ти не пишеш. Але якщо ти розумієш, навіщо вони потрібні і як попросити агента їх зробити, то отримуєш одразу чотири речі:

  • ловиш поломки до того, як їх побачить клієнт - а не з гнівного повідомлення о другій ночі;
  • спокійно правиш сайт далі: робот тут-таки скаже, що саме ти щойно зламав;
  • заощаджуєш години на ручній переперевірці в дусі «а чи все ще працює»;
  • маєш вигляд профі. Фраза «у мене є тести» звучить солідно навіть для замовника.

Без тестів кожна нова фіча - лотерея. Полагодив одне, потайки зламав інше, дізнався про це випадково. З E2E-тестами в тебе є сторож, який обходить весь сайт за секунди.

Як Claude пише E2E-тести: робот у справжньому браузері

Головний інструмент тут - Playwright . Це руки й очі робота. Він відкриває справжній браузер, заходить на твій сайт і поводиться як живий користувач. Не симуляція, не емуляція - реальний Chrome, яким керує код.

Тест - це сценарій користувача, а не код

Хороший E2E-тест читається майже як інструкція бабусі: «зайди на сторінку, введи слово в пошук, перевір, що зʼявилися результати». Ти описуєш шлях людини, а не нутрощі коду. Оце і є весь секрет.

Ось як виглядає такий тест. Писати руками не треба - це зробить агент, але корисно вміти його впізнати:

test('пошук знаходить товари', async ({ page }) => {
  await page.goto('/items')          // відкрили сторінку
  await searchInput.fill('тест')      // надрукували в пошук
  expect(count).toBeGreaterThan(0)    // перевірили: щось знайшлося
})

Прочитав уголос - і зрозуміло, що відбувається. Так і має бути.

Чіпляйся за data-testid, а не за текст і колір

Робот має якось знаходити кнопку на сторінці. Можна чіплятися за текст («кнопка з написом Купити») - але це крихко. Поміняв текст на «Замовити», і тест упав на рівному місці, хоч сайт працює ідеально.

Тому профі вішають на елементи невидиму мітку - data-testid . Це як бирка на валізі. Саму валізу можна перефарбувати хоч у рожевий, а бирка з номером залишається - і робот завжди знайде потрібне.

Чекай подію, а не «просто зачекай»

Сайт вантажиться не миттєво. Робот часто прибігає до кнопки раніше, ніж вона зʼявилася, - і спотикається носом об порожнє місце. Новачковий рефлекс тут один: «хай зачекає 5 секунд». Це найгірше з можливих рішень. На швидкому інтернеті ти подарував тесту 5 секунд простою на рівному місці. А на повільному цих 5 секунд не вистачило, і тест усе одно впав.

Як правильно? Чекати конкретну подію: «дочекайся, поки завантажаться дані», «дочекайся, поки кнопка стане видимою». Робот чекає рівно стільки, скільки треба, і ні секундою більше.

Робот спотикається об кнопку, яка ще не зʼявилася на сторінці
Не дочекався завантаження - спіткнувся. Тому чекаємо подію, а не секунди.

Хороший E2E-тест проти поганого: у чому різниця

Хороший тест
  • Перевіряє сценарій користувача: зайшов, натиснув, побачив результат.
  • Чіпляється за data-testid, а не за текст і колір.
  • Чекає конкретну подію (дані завантажилися), а не фіксовану паузу.
  • У разі поломки робить скриншот і відео - одразу видно, що пішло не так.
Поганий тест
  • Колупається у нутрощах коду, до яких користувачу байдуже.
  • Падає від будь-якої дрібної правки дизайну: тексту, відступу, кольору.
  • Напханий паузами «зачекай 5 секунд» - і стає flaky.
  • Мовчки падає без скриншота - сиди гадай, що зламалося.

Приклад із життя: як анімація зламала замовлення

Ти зробив інтернет-магазинчик. Усе працює. За тиждень агент на твоє прохання додав гарну анімацію на кнопку «Купити». Ти порадів, задеплоїв, пішов спати зі спокійною душею.

Зранку - повідомлення: «у мене не оформлюється замовлення». Виявилося, анімація наїхала поверх кнопки, і натиснути її стало фізично неможливо. Ти про це не дізнався. Чому? Бо сам не переперевіряв оформлення замовлення - навіщо, ти ж чіпав тільки анімацію.

А тепер уяви те саме з E2E-тестами. Після правки робот сам пройшов би шлях «обрав товар, натиснув Купити, заповнив форму, побачив Дякуємо за замовлення», спіткнувся б на невидимій кнопці, зробив скриншот і заволав «ЗЛАМАНО» ще до деплою. Без зіпсованого ранку й без втраченого клієнта.

Щоб отримати такого робота, самому писати нічого не треба. Достатньо правильно попросити агента:

Промпт - скопіюй і спробуй

Напиши E2E-тести на Playwright для мого сайту. Покрий головні сценарії живого користувача:

  1. Захід на головну й перевірка, що сторінка відкрилася.
  2. Оформлення замовлення цілком: обрати товар, натиснути Купити, заповнити форму, побачити підтвердження.
  3. Пошук по сайту: ввести слово й перевірити, що зʼявилися результати.

Важливі правила:

  • Чіпляйся за data-testid, а не за текст чи колір. Де їх немає - додай.
  • Не використовуй фіксовані паузи. Чекай конкретні події: завантаження даних, появу елемента.
  • У разі падіння роби скриншот, щоб було видно, що зламалося.
  • Поясни простими словами, як мені запускати ці тести однією командою.

Де без E2E-тестів не можна, а де можна розслабитися

Є місця, де поломка коштує не нервів, а реальних грошей. Там тести - не розкіш, а обовʼязок. А є зони, де можна видихнути й не запарюватися. Ось межа:

Тут тести критичні
  • Оплата й оформлення замовлення - будь-яка поломка дорівнює втраченим грошам.
  • Реєстрація та вхід - якщо не пускає, ти втрачаєш усіх нових клієнтів за раз.
  • Гаманці й крипта - підключення гаманця, баланс, транзакції.
  • Усе, що чіпає реальні гроші користувача.
А тут можна легше
  • Статична сторінка «Про нас», де нема що натискати.
  • Дрібні візуальні деталі, що не впливають на дію.
  • Одноразовий прототип, який завтра викинеш.
  • Те, що ти й так перевіряєш руками щодня.
Мем: розробник каже «у мене працює», а в клієнта все горить
Класика жанру. E2E-тест - це те, що перетворює першу картинку на реальну.

Запускай тести автоматично перед кожним деплоєм

Один раз написати тести - замало. Про них зрадницьки легко забути. Тому профі роблять так, щоб тести запускалися самі з кожним оновленням сайту. Зветься це CI/CD - конвеєр автозапуску. Робот перевіряє все перед публікацією, і якщо хоч щось горить червоним - сайт просто не викочується, поки не полагодиш.

Налаштовувати це руками не треба. Попроси агента: «налаштуй автозапуск E2E-тестів перед кожним деплоєм». І все. Так тести перетворюються з «колись перевірю» на постійну страховку, яка не спить.

Часті помилки новачка в E2E-тестах

  • Не писати тести взагалі. «Я ж перевірив» працює рівно до першої правки, яка потайки все зламала.
  • Тестувати код, а не користувача. Тест має проходити шлях живої людини, а не колупатися в нутрощах.
  • Чіплятися за текст і колір. Поміняв напис - упав тест. Використовуй data-testid.
  • Пхати паузи «зачекай 5 секунд». Це прямий шлях до flaky-тестів, яким ніхто не вірить.
  • Ігнорувати тест, що впав. Червоний тест - це сигнал, а не завада. Лагодити, а не вимикати «щоб не заважав».
  • Ганяти грошові тести на бойовому сайті. Тести з оплатою - тільки на тестовій копії.

TL;DR - если коротко

  • E2E-тест - робот заходить на сайт як жива людина: клікає, друкує, перевіряє, що все працює.
  • Інструмент номер один - Playwright: ганяє справжній браузер і ловить поломку скриншотом.
  • Тестуй сценарій користувача, а не код: зайшов, залогінився, натиснув, побачив результат.
  • Чіпляйся за data-testid - тоді тест не падає від кожної правки тексту й кольору.
  • Жодних пауз «зачекай 5 секунд». Чекай подію - інакше тест стане миготливим (flaky).
  • Проганяй тести перед кожним запуском - страховка ловить баг раніше за клієнта.

Пошук по вікі

Натисніть Esc для закриття

Введіть запит для миттєвого пошуку по всіх сторінках курсів та уроків.