Джерело
QA Co-pilot | Дав AI-агенту написати E2E-тест з нуля. Чесний результатЕксперимент пр...
27 Охват/переглядів
2026-10-06 06:35
Повідомлення №383
🤖 Дав AI-агенту написати E2E-тест з нуля. Чесний результат
Експеримент простий: Cursor в агентному режимі + Playwright MCP, щоб агент міг сам відкрити браузер і подивитися на сторінку.
Об'єкт — форма реєстрації з робочого проєкту.
Завдання — одне речення, без підказок:
«Напиши Playwright-тест на успішну реєстрацію нового користувача».
🟡 Спроба 1: без контексту
Через 4 хвилини тест був готовий. Перший запуск впав, агент сам перезапустив, щось поправив — і з другої ітерації зелений.
Виглядало вражаюче, поки я не відкрив код:
▪️ 5 з 7 локаторів — щось на кшталт `form > div:nth-child(3) input`. Перша ж правка верстки — і тест ляже.
▪️ Двічі `waitForTimeout(2000)` замість нормального очікування. Класичний генератор flaky-тестів.
▪️ Єдина перевірка — що після сабміту URL змінився на `/welcome`.
▪️ Причина першого падіння: агент вигадав `data-testid="submit-btn"`, якого на сторінці не було. Потім «полагодив», просто підібравши інший селектор.
🧪 Щоб перевірити, чого вартий цей тест, я тимчасово зламав валідацію email на бекенді — тепер вона пропускала будь-яке сміття.
Тест лишився зеленим. Найнебезпечніше не те, що тест падає. Найнебезпечніше — що він проходить і нічого не перевіряє.
🟢 Спроба 2: з контекстом
Той самий сценарій, але агент отримав:
▪️ файл з нашими конвенціями
▪️ один наявний тест як приклад
▪️ вимогу: тільки `getByRole` / `getByLabel` і перевіряти результат, а не лише перехід
Результат зовсім інший:
✅ 7 з 7 локаторів стабільні, жодного таймауту
✅ асерти на повідомлення про успіх і на появу користувача в профілі
✅ з ~45 рядків я переписав лише 6
✅ зламана валідація email — тест одразу почервонів
💡 Мій висновок
Агент — це швидкий джун, який ніколи не каже «я не впевнений».
Він чудово знімає рутину: структуру файлу, кроки, базові дії. Але без контексту він оптимізує під «тест зелений», а не під «тест щось ловить».
Моє правило тепер таке: агент пише чернетку, а я перевіряю три речі:
1️⃣ локатори
2️⃣ очікування
3️⃣ що саме стверджує асерт
⏱️ Друга спроба разом із рев'ю — 12 хвилин. Руками я б писав цей тест хвилин 35.
📅 У понеділок — повний розбір: як налаштувати агента з браузером і що класти йому в контекст.
А ви вже пробували віддавати агенту написання тестів?
👇
Експеримент простий: Cursor в агентному режимі + Playwright MCP, щоб агент міг сам відкрити браузер і подивитися на сторінку.
Об'єкт — форма реєстрації з робочого проєкту.
Завдання — одне речення, без підказок:
«Напиши Playwright-тест на успішну реєстрацію нового користувача».
🟡 Спроба 1: без контексту
Через 4 хвилини тест був готовий. Перший запуск впав, агент сам перезапустив, щось поправив — і з другої ітерації зелений.
Виглядало вражаюче, поки я не відкрив код:
▪️ 5 з 7 локаторів — щось на кшталт `form > div:nth-child(3) input`. Перша ж правка верстки — і тест ляже.
▪️ Двічі `waitForTimeout(2000)` замість нормального очікування. Класичний генератор flaky-тестів.
▪️ Єдина перевірка — що після сабміту URL змінився на `/welcome`.
▪️ Причина першого падіння: агент вигадав `data-testid="submit-btn"`, якого на сторінці не було. Потім «полагодив», просто підібравши інший селектор.
🧪 Щоб перевірити, чого вартий цей тест, я тимчасово зламав валідацію email на бекенді — тепер вона пропускала будь-яке сміття.
Тест лишився зеленим. Найнебезпечніше не те, що тест падає. Найнебезпечніше — що він проходить і нічого не перевіряє.
🟢 Спроба 2: з контекстом
Той самий сценарій, але агент отримав:
▪️ файл з нашими конвенціями
▪️ один наявний тест як приклад
▪️ вимогу: тільки `getByRole` / `getByLabel` і перевіряти результат, а не лише перехід
Результат зовсім інший:
✅ 7 з 7 локаторів стабільні, жодного таймауту
✅ асерти на повідомлення про успіх і на появу користувача в профілі
✅ з ~45 рядків я переписав лише 6
✅ зламана валідація email — тест одразу почервонів
💡 Мій висновок
Агент — це швидкий джун, який ніколи не каже «я не впевнений».
Він чудово знімає рутину: структуру файлу, кроки, базові дії. Але без контексту він оптимізує під «тест зелений», а не під «тест щось ловить».
Моє правило тепер таке: агент пише чернетку, а я перевіряю три речі:
1️⃣ локатори
2️⃣ очікування
3️⃣ що саме стверджує асерт
⏱️ Друга спроба разом із рев'ю — 12 хвилин. Руками я б писав цей тест хвилин 35.
📅 У понеділок — повний розбір: як налаштувати агента з браузером і що класти йому в контекст.
А ви вже пробували віддавати агенту написання тестів?
👇