Всем привет! Меня зовут Катя и я QA Tech lead в MD Audit.
В прошлой статье я рассказала, какой подход помог мне сделать ИИ напарником по тестированию и поделилась формулой хорошего промпта для QA.
Но остаётся вполне логичный вопрос — А какая вообще разница? Ну попрошу я написать ИИ тесты без контекста. Что изменится в полученном результате?
Ведь где-то внутри всегда сидит ленивая версия нас и шепчет «И так сойдет».
В этой статье я покажу, почему, зная формулу «Роль → Задача → Контекст → Формат», нужно использовать именно её, как бы ни хотелось отправить ИИ что-то в духе: «Напиши тесты для логина, пожалуйста» и надеяться на лучшее.
Мы возьмём одну и ту же задачу и сравним:
«плохой» промпт в стиле «ну ты же умный, сам догадаешься»;
«нормальный» промпт по формуле;
и промпт с обучающим примером, где мы прямо объясняем ИИ, как у нас всё устроено.
На конкретных примерах сравним — а как же меняется качество тестов, чек-листов и API-сценариев? Ну а в конце соберём небольшой чек-лист, который поможет вам использовать этот подход на практике.
Напомню формулу, которой я пользуюсь сама и рекомендую вам:
Роль → Задача → Контекст → Формат вывода.
Роль: кто именно «говорит» — QA‑инженер, тимлид, backend-разработчик.
Задача: что нужно получить — тесты, чек-лист, баг-репорт, ревью.
Контекст: детали системы — поля, API, роли, ограничения.
Формат вывода: таблица, JSON, Markdown, структура для TMS.
А теперь давайте посмотрим, как это работает на практике.
Пример № 1: форма логина
Начнём с самого простого и знакомого — обычного окна авторизации.
Плохой промпт
Представим, что мы устали, нам лень, спешим, поэтому пишем ИИ такой запрос:
Напиши тест-кейсы для формы логина.
ИИ в таком случае напишет что-то такое:

На первый взгляд всё неплохо: есть таблица, позитивные кейсы, шаги. Но если смотреть глазами живого опытного тестера сразу видно, что ИИ допустил типичные ошибки джуна:
контекста нет,
предусловия абстрактные,
шаги общие,
результаты туманные,
негативных и граничных сценариев нет.
Это тесты «по форме», а не по сути. Разберем по пунктам почему это плохо и перейдем к примеру, где уже результат будет в категории «хорошо».
Отсутствие контекста
Опытный тестировщик всегда задаст себе самый главный вопрос — что я тестирую и зачем? Разберем это подробнее в рамках нашей задачи тестирования формы авторизации.
Что это за форма и где она: web, мобилка, десктоп? браузеры, устройства?
Какая авторизация вообще подразумевается: email/логин/телефон/ЕЦП?
Есть ли у нас ограничения по попыткам, блокировка, капча, двухфакторка?
2. Предусловия на уровне «пользователь зарегистрирован»
Напомню, данные в столбце «Предусловия» выглядят так:
«Пользователь зарегистрирован»
Можно ли назвать такое предусловием? Прежде чем сказать «да», опомнитесь, ведь этим ртом вы здороваетесь с коллегами.
Фактически же то что мы видим в предусловии ИИ не предусловие по своей сути, а скорее желание. Нам бы, конечно, хотелось чтобы он был зарегистрирован, но вообще-то до этого еще надо дожить.
В реальном жизненном цикле приложения и сансаре бытия до этого момент есть еще важные действия предшествующие регистрации от которых вообще зависит как человек попадет на тестируемую нами форму:
Кто создаёт этого пользователя и как?
Какое у него окружение, роль, статус (активен/заблокирован)?
Нужен ли ему подтверждённый email или достаточно телефона?
3. Шаги слишком общие
Примерно в таком духе:
Открыть форму логина
Ввести корректный логин/пароль
Нажать «Войти»
Что здесь не хватает:
где именно открыть: URL, путь в приложении, контекст (гость/сессия/кэш)?
«корректный логин» — это какой? email? номер? длина? формат?
нет ни одного шага про проверку состояния до/после (куки, сессии, редиректы).
Такой тест ничего важного не проверит и багов им не найти. А тогда вопрос — зачем он вообще нужен?
4. Ожидаемый результат в стиле «Не упало и слава Богу»
Напомню ОР от ИИ:
«Пользователь успешно авторизован и перенаправлен на главную страницу»
Неплохо для джуна, но какие вопросы должен задать себе опытный тестировщик? Помимо «что именно мы проверяем?».
появился токен/сессионная кука?
как исчезла форма логина?
чем отличается главная страница гостя и авторизованного пользователя?
5. Никакого привязки к системе и окружению
Если просто взять эту таблицу и отнести в проект, через месяц никто не вспомнит:
для какого продукта это писалось;
на каких стендах проверять;
какие данные использовать.
Это такой «универсальный шаблон для любой формы логина», а не реальные тесты под конкретную систему.
Ну и самое главное. Ничего важного эти тесты не проверяют. А как же пустые поля, ввод неверных данных, блокировка авторизации после N попыток и так далее?
Промт по формуле Роль → Задача → Контекст → Формат вывода.
Теперь возьмём ту же задачу, но напишем промпт так, как будто объясняем её живому джуну. А для этого нам нужен контекст системы.
Контекст системы: «Побрякушки Катюшки»

Для примера давайте представим не абстрактный «логин», а живую систему — интернет-магазин украшений ручной работы «Побрякушки Катюшки».
Пользователь здесь может зарегистрироваться и авторизоваться на сайте, чтобы оформлять заказы и отслеживать их статус.
Как устроена регистрация
-
Регистрация через форму «Создать аккаунт». Открывается нажатием на кнопку Создать аккаунт на главном экране авторизации.
Регистрация
Форма «Создать аккаунт».
-
Поля:
Email— обязательное, уникальное, формат email.Пароль— обязательное, от 8 до 32 символов.Имя— необязательное, до 50 символов.чекбокс «Согласен с условиями и политикой обработки данных» — обязателен.
-
После отправки формы:
Если всё ок — создаётся аккаунт в статусе «Не подтверждён».
На email уходит письмо с ссылкой подтверждения.
После перехода по ссылке статус меняется на «Активен».
Удаление аккаунта
Аккаунт может быть удалён двумя способами:
-
Сам пользователь:
в личном кабинете есть кнопка «Удалить аккаунт»;
перед удалением показываем подтверждение;
после удаления авторизация невозможна, при попытке входа показываем сообщение:
«Аккаунт не найден. Проверьте данные или зарегистрируйтесь снова».
-
Администратор:
в админке есть действие «Удалить аккаунт»;
после удаления поведение при логине такое же, как выше.
Вход (логин)
-
Форма «Войти»:
Email,Пароль, чекбокс «Запомнить меня»;ссылки «Забыли пароль?» и «Создать аккаунт».
-
Логика:
для статуса «Активен» — вход разрешён;
для «Не подтверждён» — вход запрещён, сообщение:
«Пожалуйста, подтвердите email. Мы отправили вам письмо со ссылкой»;если аккаунта с таким email не существует (никогда не было или был удалён) — сообщение:
«Аккаунт не найден. Проверьте данные или зарегистрируйтесь»;при неверной паре email/пароль — «Неверный логин или пароль».
-
После успешного входа:
редирект в личный кабинет
/profile;в шапке отображается имя или email пользователя;
при попытке открыть
/loginавторизованному пользователю — редирект в/profile.
Вот это и есть тот дополнительный контекст, которого обычно не хватает ИИ.
Также в форме есть восстановление пароля. Специально опустила это в статье, чтобы было меньше текста, но в идеале мы описываем ИИ все что есть в системе и как это работает.
Преобразуем описание системы в идеальный промт
Ты инженер по качеству (QA), специализирующийся на web.
Задача:
На основе описания системы ниже сгенерируй тест-кейсы для проверки формы логина
интернет-магазина украшений «Побрякушки Катюшки».
Контекст системы:
- Это интернет-магазин украшений ручной работы.
- Регистрация через форму "Создать аккаунт":
- поля: Email (обязательное, уникальное), Пароль (8–32 символа), Имя (необязательное),
чекбокс согласия с условиями.
- после успешной регистрации аккаунт создаётся в статусе "Не подтверждён",
на email уходит письмо со ссылкой подтверждения;
- после перехода по ссылке из письма статус меняется на "Активен".
- Аккаунт может быть удалён:
- самим пользователем из личного кабинета (кнопка "Удалить аккаунт");
- администратором через админку.
После удаления логин невозможен, при попытке входа показывается:
"Аккаунт не найден. Проверьте данные или зарегистрируйтесь".
- Вход (логин) выполняется через форму "Войти":
- поля: Email, Пароль, чекбокс "Запомнить меня";
- ссылки "Забыли пароль?" и "Создать аккаунт".
- Логика авторизации:
- статус "Активен" — вход разрешён;
- статус "Не подтверждён" — вход запрещён, сообщение:
"Пожалуйста, подтвердите email. Мы отправили вам письмо со ссылкой";
- если аккаунта с таким email нет (никогда не существовал или был удалён) —
сообщение: "Аккаунт не найден. Проверьте данные или зарегистрируйтесь";
- при неверной паре email/пароль — сообщение:
"Неверный логин или пароль".
- После успешного входа пользователь попадает в личный кабинет /profile,
в шапке отображается его имя или email.
При повторном открытии /login авторизованный пользователь перенаправляется в /profile.
Формат вывода:
Верни результат в виде таблицы с колонками:
{Наименование}, {Предусловие}, {Тестовые данные}, {Шаги},
{Ожидаемый результат}, {Статус аккаунта}, {Платформа}, {Тип теста (Positive/Negative/Edge/Localization)}.
Требования к детализации:
- В "Предусловие" явно указывай статус аккаунта (Активен / Не подтверждён / Аккаунт удалён)
и кто его удалил, если это важно (пользователь / администратор).
- В "Тестовые данные" приводи конкретные значения email и пароля
(валидные, невалидные, несуществующий email, пустые поля, слишком длинные значения).
- В "Шаги" описывай действия так, чтобы другой тестировщик мог выполнить их без догадок.
- В "Ожидаемый результат" указывай:
- какое сообщение отображается;
- куда происходит редирект;
- что видно в шапке и на странице.
Не используй общие формулировки вроде "авторизация успешна" без конкретики.
Обязательно включи:
- позитивные сценарии (успешный вход для активного аккаунта, с/без "Запомнить меня");
- попытки входа для "Не подтверждённого" аккаунта;
- попытки входа для удалённого аккаунта (удалил сам пользователь / удалил админ);
- сценарии "неверный пароль", "несуществующий email", пустые поля;
- граничные значения для длины пароля и формата email;
- сценарии локализации (RU/EN тексты для основных сообщений).
На выходе мы получаем уже такой результат:

Если интересно, можно посмотреть полный набор тестов в эксель.
Почему же такой результат лучше?
1. Появилась реальная модель системы, а не абстрактный «логин зарегистрированного пользователя»
Напомню, в старом ответе ИИ тесты были такими:
«Успешный вход с валидными данными»
«Неверный пароль»
«Пустые поля»
максимум — «Проверка чувствительности к регистру»
И нигде не чувствовалось, что за система за этим стоит.
В твоих новых тестах прямо читается контекст «Побрикушек Катюшки»:
статусы аккаунта:
Активен,Не подтверждён,Аккаунт удалён (удалил пользователь)— и они участвуют в предусловиях;есть сценарий, когда авторизованный пользователь открывает
/loginи получает редирект;есть различие между «неподтверждённым» и «удалённым».
То есть это уже не набор “тестов для любой формы”, а набор тестов конкретного магазина с конкретной бизнес-логикой.
2. Предусловия перестали быть абстрактными
Раньше:
«Пользователь зарегистрирован»
Сейчас, по скрину, уже так:
«Аккаунт active_user@example.com существует, статус Активен, пароль ValidPass1»
«Аккаунт unconfirmed_user@example.com существует, статус Не подтверждён, пароль Unconf123»
«Аккаунт deleted_by_user@example.com был ранее создан и удалён пользователем»
То есть в предусловиях теперь есть:
конкретный email;
конкретный статус аккаунта;
иногда — информация, кто его удалил.
Это важно, потому что:
тест можно поднять на любой стенд, просто подложив эти данные;
любой другой тестировщик понимает, в какой ситуации находится пользователь.
3. Появился отдельный столбец «Тестовые данные» с конкретикой
Это огромная разница.
Вместо размытых формулировок «валидный логин и пароль» теперь есть конкретика:
Email:active_user@example.com, Пароль: ValidPass1!
Отдельный столбец вынуждает как ИИ, так и человека подумать о данных, в отличии от расплывчатых формулировок “корректные / некорректные”.
4. Шаги стали реально воспроизводимыми
В старом ответе ИИ было что-то вроде:
«Открыть форму логина. Ввести корректные данные. Нажать Войти.»
Сейчас в таблице уже:
Открыть
/login.Ввести
active_user@example.com.Ввести
ValidPass1!.Убедиться, что чекбокс «Запомнить меня» не отмечен / отмечен.
Нажать «Войти».
После входа снова открыть
/loginв той же сессии/браузере (для кейса с редиректом).
То есть:
шаги разные для разных сценариев (с remember me, с редиректом, с неверным паролем);
нет «магии», каждый шаг — конкретное действие.
Это то, чего не было в первом «ленивом» ответе ИИ, но что важно для тестов в реальном жизненном цикле любого сервиса и приложения.
5. Ожидаемые результаты стали проверками, а не желаниями
Вот тут самый большой скачок качества.
Вместо абстрактного:
«Авторизация успешна»
«Отображается сообщение об ошибке»
ты теперь видишь:
куда конкретно происходит редирект (
/profileили остаёмся на/login);-
что именно отображается:
текст ошибки: «Пожалуйста, подтвердите email…»;
текст: «Аккаунт не найден. Проверьте данные или зарегистрируйтесь»;
отсутствие/наличие формы логина;
отображение имени/почты в шапке;
что не должно отображаться (форма логина не показывается для авторизованного).
То есть ожидаемый результат теперь = набор наблюдаемых фактов, а не «итоговое настроение тестировщика».
6. Отражены все важные состояния аккаунта
Покрыты все описанные статусы акаунта, что является прямой заслугой хорошо написанного контекста — ИИ это подхватил и перенёс в тесты.
У «сырого» первого варианта тестов такого вообще не было — он не знает про статусы, если ему их не рассказать.И поэтому даже не задумывается, что в системе аккаунт без какого-то статуса существовать не может.
Общий вывод
В первом случае ИИ выдал «универсальные тесты для любой формы логина». Смысла в таких тестах в реальном проекте мало: они не проверяют ничего конкретного, их не автоматизировать и ещё сложнее использовать как инструмент для поиска багов.
После того как мы добавили контекст системы и нормальный промт, тесты стали:
привязаны к конкретным статусам аккаунта;
с явными тестовыми данными;
с воспроизводимыми шагами;
с понятными ожидаемыми результатами (куда редиректит, какой текст отображается, что видно в интерфейсе).
То есть мы превратили ИИ из генератора общих идей в ассистента, который пишет тесты так, как их пишет живой тестировщик: с пониманием логики системы.
Такие тесты уже можно реально использовать на проекте:
занести их в TMS;
прогнать по тестовому стенду;
написать по ним автотесты;
отдать на прогон джуну или смежной команде — и быть уверенным, что они действительно проверят важные пользовательские сценарии.
Спасибо, что дочитали до конца!
Если статья была вам полезна, буду рада видеть в моем Телеграм-канале.
Там я планирую делиться новыми статьями на тему ИИ и тестирования, а также новостями по моему курсу "ИИ в тестировании". В нем я планирую на практике помочь научиться описанному подходу.
В следующих статьях на Хабре разберем:
Какие рутинные задачи можно решить с помощью обученного АИ помощника в тестировании.
Какая модель АИ лучше справится с рутинными задачами именно в тестировании? Сравнение ChatGPT и Claude.
Комментарии (3)

AndyStatic
11.11.2025 11:52Еще когда лень весь UI страницы описывать, в бесплатный ChatGPT можно скриншот этой страницы скинуть. В итоге комбинация что Вы описали + пример UI, тоже хорошо работает.
AlenaStavrova
Подскажите, а "побрикушки" - это в честь Лилички так названо?
radistka_kati Автор
Честно говоря, просто хотела придумать название, которое бы рифмовалось с моим именем. Сильно глубокий смысл не закладывала)