ChatGPT и Claude для написания автотестов: 10 промптов для QA инженера
Как использовать ChatGPT и Claude для автоматизации тестирования: генерация тестов по контексту проекта, анализ существующего кода, написание pytest и JUnit тестов. 10 готовых промптов с примерами.
Почему большинство промптов для QA не работают
Главная ошибка при использовании ChatGPT и Claude для написания тестов — слишком общие промпты. Напиши тест для формы логина — и ты получишь шаблонный код который не имеет ничего общего с твоим реальным проектом.
Хороший промпт для QA строится на трёх принципах: контекст проекта (стек, архитектура, соглашения), пример существующего кода (по аналогии с чем писать), конкретная задача (что именно нужно протестировать).
Промпт 1: API тест на Python с requests по аналогии
Самый мощный приём — показать AI существующий тест и попросить написать аналогичный для нового endpoint. AI подхватывает стиль, паттерны и соглашения твоего проекта.
У меня есть тест для получения списка машин:
import pytest
import requests
BASE_URL = "https://api.carrent.com"
def test_get_cars_list():
# Given
headers = {"API-Key": "test_api_key_123"}
# When
response = requests.get(f"{BASE_URL}/api/cars", headers=headers)
# Then
assert response.status_code == 200
assert len(response.json()) > 0
assert "brand" in response.json()[0]
assert "model" in response.json()[0]
assert "price_per_day" in response.json()[0]
Напиши аналогичный тест для получения информации о конкретной машине.
Требования:
- GET /api/cars/{car_id}
- Возвращает 200 и данные машины при существующем id
- Возвращает 404 при несуществующем id
- В ответе должны быть поля: id, brand, model, year, price_per_day, is_available
Напиши два теста: позитивный (машина найдена) и негативный (машина не найдена).
Сохрани тот же стиль, структуру Given-When-Then и паттерны assertions.Промпт 2: UI тест на Playwright с простыми локаторами
Для UI тестов покажи AI существующую структуру страницы и локаторы — он напишет тест который работает с реальными элементами.
Вот HTML форма поиска машин на главной странице:
<div class="search-form">
<input type="text" id="brand-input" placeholder="Марка авто">
<input type="text" id="city-input" placeholder="Город">
<button id="search-btn">Найти машину</button>
</div>
<div class="results">
<div class="car-card" data-testid="car-card">
<h3 class="car-title">Toyota Camry</h3>
<p class="car-price">2500 ₽/день</p>
</div>
</div>
Напиши Playwright тест который:
1. Открывает главную страницу https://carrent.com
2. Вводит в поле "Марка авто" значение "Toyota"
3. Вводит в поле "Город" значение "Москва"
4. Нажимает кнопку "Найти машину"
5. Проверяет что появились результаты поиска
6. Проверяет что первая карточка содержит текст "Toyota"
Используй простые локаторы: #brand-input, #city-input, #search-btn.
Добавь ожидания загрузки результатов.
Код должен быть простым и понятным для начинающих.Промпт 3: API тест на Java с RestAssured
Дай AI спецификацию endpoint и попроси написать набор тестов с проверкой разных сценариев.
Вот спецификация API endpoint для бронирования машины:
POST /api/bookings
Content-Type: application/json
Request body:
{
"car_id": "string",
"start_date": "2026-05-01",
"end_date": "2026-05-05",
"driver_name": "string",
"phone": "string"
}
Response 201:
{
"booking_id": "uuid",
"car_id": "...",
"total_price": 10000,
"status": "confirmed"
}
Response 400: {"error": "Invalid dates"}
Response 404: {"error": "Car not found"}
Response 409: {"error": "Car already booked for these dates"}
Напиши тесты на Java с JUnit 5 + RestAssured для всех сценариев:
1. Успешное бронирование (201)
2. Бронирование несуществующей машины (404)
3. Бронирование с некорректными датами: end_date раньше start_date (400)
4. Бронирование уже занятой машины (409)
Используй RestAssured методы: given(), when(), then().
Проверяй статус код и структуру ответа.
Код должен быть простым без лишних абстракций.Промпт 4: UI тест на Java с Selenide
Для Selenide тестов опиши простой пользовательский сценарий — AI напишет понятный код.
Напиши тест на Java с Selenide для просмотра каталога машин. Сценарий: 1. Открыть страницу https://carrent.com/catalog 2. Найти фильтр по классу машины (селектор: select#car-class) 3. Выбрать "Премиум" 4. Подождать загрузки результатов 5. Проверить что все карточки машин (.car-card) содержат бадж "Премиум" 6. Проверить что карточек больше 0 7. Кликнуть на первую карточку 8. Проверить что открылась страница с деталями машины (URL содержит /cars/) Требования: - Используй Selenide API: open(), $(selector), $$(selector), selectOption() - Добавь явные ожидания где нужно - Проверяй URL после переходов - Код должен быть читаемым и простым Не используй Page Object, просто прямые селекторы.
Промпт 5: Параметризованные тесты на Python
Для проверки валидации с разными данными используй параметризованные тесты — один тест проверяет много сценариев.
Напиши параметризованный тест для валидации телефона при бронировании. Endpoint: POST /api/bookings Поле phone должно быть: - В формате +7XXXXXXXXXX (11 цифр после +7) - Или в формате 8XXXXXXXXXX (11 цифр, начинается с 8) Тестовые данные для негативных сценариев: 1. Пустой телефон → 400 "Phone is required" 2. Короткий телефон "+79123" → 400 "Invalid phone format" 3. Телефон с буквами "+7912abc4567" → 400 "Invalid phone format" 4. Телефон без + или 8: "9123456789" → 400 "Invalid phone format" Позитивные: 5. "+79123456789" → 201 успешно 6. "89123456789" → 201 успешно Используй @pytest.mark.parametrize со всеми сценариями. Каждый тест проверяет статус код и текст ошибки. Для позитивных тестов проверь что бронирование создалось.
Промпт 6: Простой E2E тест на Java
Опиши полный флоу действий пользователя — AI напишет последовательный тест со всеми шагами.
Напиши E2E тест на Java который проверяет полный процесс бронирования машины через API.
Шаги:
1. Получить список доступных машин: GET /api/cars?is_available=true
2. Выбрать первую машину из списка (сохранить car_id)
3. Создать бронирование: POST /api/bookings
Body: {
"car_id": car_id из шага 1,
"start_date": "2026-06-01",
"end_date": "2026-06-05",
"driver_name": "Тестовый Водитель",
"phone": "+79991234567"
}
4. Сохранить booking_id из ответа
5. Получить информацию о бронировании: GET /api/bookings/{booking_id}
6. Проверить что статус = "confirmed"
7. Проверить что car_id совпадает с car_id из шага 1
8. Отменить бронирование: DELETE /api/bookings/{booking_id}
9. Проверить что машина снова доступна: GET /api/cars/{car_id}
Поле is_available должно быть true
Используй JUnit 5 + RestAssured.
После каждого запроса проверяй статус код.
Сохраняй переменные между шагами.
В конце обязательно очисти данные (отмени бронирование).Промпт 7: UI тест с API подготовкой данных
Самый надежный подход — создать данные через API, проверить через UI. Так тесты работают стабильно.
Напиши тест который создает бронирование через API и проверяет его отображение на UI.
Подготовка через API (requests):
1. GET /api/cars?is_available=true — получить доступную машину
2. POST /api/bookings — создать бронирование для этой машины
Сохранить booking_id
UI проверка через Playwright:
1. Открыть страницу "Мои бронирования" https://carrent.com/my-bookings
2. Найти карточку бронирования по booking_id
3. Проверить что отображается марка машины
4. Проверить что отображаются даты бронирования
5. Проверить что статус = "Подтверждено"
6. Кликнуть кнопку "Отменить бронирование"
7. Подтвердить отмену в модальном окне
8. Проверить что карточка исчезла со страницы
Требования:
- Используй pytest фикстуры для создания бронирования через API
- UI проверки через Playwright
- После теста удали бронирование через API DELETE /api/bookings/{id}
- Локаторы простые: [data-booking-id="{booking_id}"], .cancel-btn
Покажи код с фикстурой и тестом.Промпт 8: Проверка JSON схемы ответа
Важно проверять не только статус код, но и структуру ответа — AI поможет написать валидацию схемы.
Напиши тест который проверяет структуру JSON ответа при получении машины.
Endpoint: GET /api/cars/{id}
Ожидаемая структура ответа:
{
"id": "string (uuid)",
"brand": "string",
"model": "string",
"year": "integer (2000-2026)",
"price_per_day": "integer (> 0)",
"is_available": "boolean",
"features": ["string", "string"],
"location": {
"city": "string",
"address": "string"
}
}
Напиши JUnit 5 + RestAssured тест который:
1. Отправляет GET запрос
2. Проверяет статус 200
3. Проверяет что все поля присутствуют
4. Проверяет типы полей (string, integer, boolean, array, object)
5. Проверяет что year в диапазоне 2000-2026
6. Проверяет что price_per_day > 0
7. Проверяет что features это массив строк
Используй RestAssured JsonPath для проверки структуры.
Проверки должны быть понятными и читаемыми.Промпт 9: Анализ упавших тестов
AI отлично справляется с анализом логов и поиском причин падений — экономит время на дебаг.
Проанализируй почему упали тесты и предложи решение.
Упавшие тесты (5 из 30):
1. test_get_car_by_id - AssertionError: Expected 200, got 500
Traceback: Internal Server Error
URL: GET /api/cars/123e4567-e89b-12d3-a456-426614174000
2. test_get_car_by_id_not_found - AssertionError: Expected 404, got 500
URL: GET /api/cars/nonexistent-id
3. test_create_booking - AssertionError: Expected field 'total_price' in response
Status: 201
Response: {"booking_id": "...", "status": "confirmed"}
4. test_filter_cars_by_city - AssertionError: Expected > 0 results, got empty array
URL: GET /api/cars?city=Москва
5. test_cancel_booking - Timeout after 30s
URL: DELETE /api/bookings/abc123
Контекст:
- Тесты падают после деплоя новой версии API вчера вечером
- В changelog: "Оптимизация БД запросов, добавление кеширования"
- Окружение: staging
Задачи:
1. Определи возможные причины для каждого падения
2. Это баги в приложении или нужно обновить тесты?
3. Какие падения критичные и требуют немедленного фикса?
4. Составь краткий отчет для разработчиков (5 предложений)
5. Что нужно проверить в первую очередь?Промпт 10: Генерация чек-листа для тестирования
AI быстро составит полный чек-лист для ручного или автоматизированного тестирования новой фичи.
Составь чек-лист для тестирования новой фичи: фильтр машин по цене. Описание фичи: На странице каталога добавили слайдер для фильтрации по цене. - Минимальная цена: 500 ₽/день - Максимальная цена: 10000 ₽/день - По умолчанию: от 500 до 10000 (показываются все машины) - При изменении слайдера результаты обновляются автоматически API endpoint: GET /api/cars?min_price=1000&max_price=5000 Задачи: 1. Составь список функциональных проверок (10-15 пунктов) 2. Добавь UI проверки (расположение, анимации, валидация) 3. Добавь API проверки (корректность фильтрации) 4. Добавь граничные случаи (min=max, некорректные значения) 5. Добавь проверки производительности (время обновления результатов) Формат чек-листа: - [ ] Название проверки - Ожидаемый результат - Приоритет (High/Medium/Low) Раздели на секции: Позитивные сценарии, Негативные, UI, API, Граничные случаи.
Главное правило: контекст решает всё
- ▸Всегда вставляй существующий код — AI пишет по аналогии намного лучше чем с нуля
- ▸Указывай стек явно — pytest/Playwright или JUnit/Selenide, RestAssured/requests
- ▸Показывай реальные примеры API ответов или HTML структуры
- ▸Описывай бизнес-логику простыми словами — AI лучше понимает контекст
- ▸Итерируй — уточняй промпты если результат не подходит
Claude vs ChatGPT для QA Automation
Claude лучше справляется с длинными кодовыми базами и рефакторингом — можно вставить весь файл и он не потеряет контекст. Отлично анализирует логи и группирует ошибки.
ChatGPT сильнее в генерации разнообразных тест-кейсов и написании документации. Лучше понимает бизнес-логику и предлагает граничные случаи.
GitHub Copilot удобнее всего для написания кода прямо в IDE — видит весь проект и предлагает автодополнение на лету.
Изучи автоматизацию тестирования с нуля
На курсах ThreadQA по Java QA Automation и Python QA Automation ты научишься писать профессиональные автотесты на Selenide, Playwright, RestAssured и requests. Первые уроки бесплатно.