Джерело
QA Co-pilot | Відмовляємося від класичних Assert'ів: Як тестувати ШІ-додатки (AI Ass...
37 Охват/переглядів
2026-07-29 07:11
Повідомлення №361
🤖 Відмовляємося від класичних Assert'ів: Як тестувати ШІ-додатки (AI Assertions)
Ми всі звикли писати класичні перевірки в Playwright:
expect(element).toHaveText('Успішна реєстрація').
Це працює ідеально для статичних систем. Але як ви протестуєте чат-бота, генератор текстів або ШІ-помічника?
ШІ щоразу віддає різний текст. Сьогодні це "Привіт, чим можу допомогти?", а завтра "Вітаю, яке у вас питання?". Класичний E2E тест тут же впаде, хоча система працює коректно.
Рішення: AI Assertions (ШІ замість expect)
Замість того, щоб порівнювати рядки посимвольно, ми просимо іншу нейромережу (наприклад, OpenAI API) оцінити результат нашого тесту!
Як це виглядає на практиці (Playwright + OpenAI):
1️⃣ Виконуємо дію в UI (наприклад, просимо бота згенерувати summary статті).
2️⃣ Витягуємо отриманий текст через Playwright.
3️⃣ Відправляємо цей текст через API до GPT-4 з промптом-валідатором.
// Приклад кастомного AI Assert
async function expectToMatchContext(actualText: string, expectedMeaning: string) {
const response = await openai.chat.completions.create({
model: "gpt-4-turbo",
messages: [
{
role: "system",
content: "Ти суворий QA-валідтор. Дай відповідь тільки 'true' або 'false'. Чи несе отриманий текст такий самий зміст, що і очікуваний?"
},
{
role: "user",
content: `Очікуваний зміст: "${expectedMeaning}". Отриманий текст: "${actualText}"`
}
]
});
const isMatch = response.choices[0].message.content === 'true';
expect(isMatch).toBeTruthy();
}
// Використання в тесті:
const botReply = await page.locator('.chat-message').innerText();
await expectToMatchContext(botReply, "Бот має привітатися та запропонувати допомогу");
Чому це майбутнє:
Ваші тести стають "розумними". Вони більше не ламаються через змінену кому чи перефразування. Ви тестуєте зміст та бізнес-логіку, а не жорсткі пікселі та символи. Це і є справжній підхід QA Co-pilot.
А як ви зараз валідуєте динамічні або згенеровані дані у своїх проєктах?
👇
🔥 — Вже підкрутив OpenAI API до своїх E2E тестів!
👀 — Пишу регулярні вирази (RegEx) на пів сторінки...
🤯 — Навіть не думав, що ШІ можна використовувати як Assert!
Ми всі звикли писати класичні перевірки в Playwright:
expect(element).toHaveText('Успішна реєстрація').
Це працює ідеально для статичних систем. Але як ви протестуєте чат-бота, генератор текстів або ШІ-помічника?
ШІ щоразу віддає різний текст. Сьогодні це "Привіт, чим можу допомогти?", а завтра "Вітаю, яке у вас питання?". Класичний E2E тест тут же впаде, хоча система працює коректно.
Рішення: AI Assertions (ШІ замість expect)
Замість того, щоб порівнювати рядки посимвольно, ми просимо іншу нейромережу (наприклад, OpenAI API) оцінити результат нашого тесту!
Як це виглядає на практиці (Playwright + OpenAI):
1️⃣ Виконуємо дію в UI (наприклад, просимо бота згенерувати summary статті).
2️⃣ Витягуємо отриманий текст через Playwright.
3️⃣ Відправляємо цей текст через API до GPT-4 з промптом-валідатором.
// Приклад кастомного AI Assert
async function expectToMatchContext(actualText: string, expectedMeaning: string) {
const response = await openai.chat.completions.create({
model: "gpt-4-turbo",
messages: [
{
role: "system",
content: "Ти суворий QA-валідтор. Дай відповідь тільки 'true' або 'false'. Чи несе отриманий текст такий самий зміст, що і очікуваний?"
},
{
role: "user",
content: `Очікуваний зміст: "${expectedMeaning}". Отриманий текст: "${actualText}"`
}
]
});
const isMatch = response.choices[0].message.content === 'true';
expect(isMatch).toBeTruthy();
}
// Використання в тесті:
const botReply = await page.locator('.chat-message').innerText();
await expectToMatchContext(botReply, "Бот має привітатися та запропонувати допомогу");
Чому це майбутнє:
Ваші тести стають "розумними". Вони більше не ламаються через змінену кому чи перефразування. Ви тестуєте зміст та бізнес-логіку, а не жорсткі пікселі та символи. Це і є справжній підхід QA Co-pilot.
А як ви зараз валідуєте динамічні або згенеровані дані у своїх проєктах?
👇
🔥 — Вже підкрутив OpenAI API до своїх E2E тестів!
👀 — Пишу регулярні вирази (RegEx) на пів сторінки...
🤯 — Навіть не думав, що ШІ можна використовувати як Assert!