Зачем нужны промпты для автотестов?
Современные AI-ассистенты вроде GitHub Copilot, Cursor или ChatGPT могут стать мощными союзниками в написании автотестов. Но результат напрямую зависит от качества вашего промпта. Правильно сформулированное задание экономит часы рутинной работы и помогает создавать более качественные тесты.
Уровень 1: Новичок (базовые запросы)
На этом уровне разработчик просит AI написать простые тесты для конкретной функции. Промпты прямолинейны и не содержат контекста о проекте.
Основная проблема: AI не знает о стиле кодирования проекта, соглашениях об именовании или используемых библиотеках.
1Пример промпта новичка
# Промпт для новичка:
"""Напиши тест для функции calculate_discount(price, discount_percent)"""
# Или более конкретно:
"""Создай unit-тест на pytest для функции:
def calculate_total(items, tax_rate):
subtotal = sum(item['price'] * item['quantity'] for item in items)
return subtotal * (1 + tax_rate)"""Что получаем в ответе: базовый тест, который проверяет очевидные случаи, но часто без edge cases, моков или правильной структуры.
Уровень 2: Продвинутый (контекст + требования)
Разработчик добавляет контекст проекта, требования к качеству и конкретные техники тестирования. Это похоже на работу с продвинутым промптом для AI-ассистентов, но специализированно для тестов.
2Пример промпта продвинутого уровня
"""
Напиши комплексные pytest-тесты для функции process_order(order_data, inventory).
КОНТЕКСТ ПРОЕКТА:
- Проект использует Python 3.9+, pytest, pytest-mock
- Стиль: Google docstrings, snake_case для функций
- В проекте уже есть фикстуры для БД и внешних API
ТРЕБОВАНИЯ К ТЕСТАМ:
1. Покрыть happy path (успешный заказ)
2. Проверить edge cases:
- Недостаточно товара на складе
- Невалидный order_id
- Просроченный платеж
3. Использовать моки для:
- inventory.check_stock()
- payment_gateway.charge()
4. Добавить параметризованные тесты для разных типов скидок
5. Проверить корректность логгирования ошибок
6. Использовать фикстуру для временной БД
СИГНАТУРА ФУНКЦИИ:
def process_order(order_data: dict, inventory: InventoryService) -> OrderResult:
"""Обрабатывает заказ, проверяет наличие, списывает средства."""
...
"""Уровень 3: Сеньор (системный подход + эксперименты)
Сеньор-разработчик использует промпты не только для генерации кода, но и для проектирования тестовой стратегии, анализа покрытия и проведения экспериментов с качеством кода.
3Пример промпта сеньор-уровня
"""
Спроектируй и реализуй тестовую стратегию для микросервиса UserService.
ЦЕЛИ ЭКСПЕРИМЕНТА:
1. Достичь 85% покрытия кода (branch coverage)
2. Обнаружить race conditions в concurrent операциях
3. Снизить время выполнения тестов на 30%
4. Улучшить читаемость тестов для новых разработчиков
АРХИТЕКТУРА СЕРВИСА:
- FastAPI приложение с 15 эндпоинтами
- PostgreSQL для хранения данных
- Redis для кэширования и сессий
- RabbitMQ для асинхронных задач
- Интеграция с 3 внешними API
ТЕКУЩИЕ ПРОБЛЕМЫ:
- Медленные интеграционные тесты (10+ минут)
- Хрупкие тесты из-за моков
- Неполное покрытие edge cases
- Отсутствие property-based тестов
ЗАДАНИЕ:
1. Проанализируй текущие тесты и предложи рефакторинг
2. Создай матрицу тестирования (unit/integration/e2e)
3. Напиши шаблоны для каждого типа тестов
4. Предложи стратегию мокинга внешних зависимостей
5. Добавь нагрузочные тесты для критичных эндпоинтов
6. Создай документацию по запуску тестов
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
- Готовая структура тестовой директории
- Конфигурационные файлы для pytest
- Примеры тестов каждого типа
- Рекомендации по CI/CD pipeline
"""| Уровень | Фокус | Результат | Время экономии |
|---|---|---|---|
| Новичок | Отдельные тесты | Базовые проверки | 30-60 минут |
| Продвинутый | Качество + покрытие | Производственные тесты | 2-4 часа |
| Сеньор | Система + стратегия | Архитектура тестирования | Дни/недели |
Готовый промпт для быстрого старта
Вот универсальный промпт, который можно адаптировать под любой проект:
"""
Напиши автотесты для следующей функции с учетом лучших практик.
ФУНКЦИЯ ДЛЯ ТЕСТИРОВАНИЯ:
[вставь сигнатуру функции и её описание]
ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ:
- Фреймворк: [pytest/unittest/JUnit/etc]
- Язык: [Python/Java/JavaScript/etc]
- Версия: [укажи версию]
ТРЕБОВАНИЯ К КАЧЕСТВУ ТЕСТОВ:
1. Покрытие основных сценариев использования
2. Проверка edge cases и граничных значений
3. Использование моков для внешних зависимостей
4. Читаемые имена тестов (test_<что>_<при_каких_условиях>_<ожидаемый_результат>)
5. Параметризация где это уместно
6. Проверка обработки ошибок и исключений
7. Соответствие стилю кодирования проекта
КОНТЕКСТ ПРОЕКТА (если известен):
- [опиши архитектурные особенности]
- [укажи используемые библиотеки]
- [отметь ограничения или требования]
ДОПОЛНИТЕЛЬНЫЕ ЗАДАЧИ (опционально):
- [анализ покрытия кода]
- [интеграция с CI/CD]
- [нагрузочное тестирование]
ПРЕДПОЧТИТЕЛЬНЫЙ ФОРМАТ ВЫВОДА:
- Полный код тестов
- Пояснения к ключевым решениям
- Рекомендации по улучшению
"""Советы по использованию промптов для автотестов
- Начинайте с малого: Не пытайтесь сразу покрыть тестами весь проект. Начните с одной критичной функции, как в промптах для тестирования логики.
- Итеративно улучшайте: Первый результат редко бывает идеальным. Уточняйте промпт на основе полученного кода.
- Добавляйте контекст постепенно: Сначала получите базовые тесты, затем добавляйте требования к качеству, моки, интеграции.
- Экспериментируйте с формулировками: Разные AI по-разному реагируют на одни и те же запросы. Находите оптимальный стиль.
- Проверяйте сгенерированный код: AI может допускать ошибки или использовать устаревшие практики. Всегда ревьюируйте результат.
Важно: Промпты для автотестов — это инструмент, а не замена экспертизы. Они помогают автоматизировать рутину, но архитектурные решения и стратегия тестирования остаются за разработчиком.
Эксперименты и метрики качества
Как оценить эффективность ваших промптов? Проводите эксперименты:
- Измеряйте время: Сколько времени экономит хороший промпт vs написание вручную?
- Анализируйте покрытие: Насколько полно AI покрывает edge cases?
- Оценивайте читаемость: Будут ли тесты понятны другим разработчикам?
- Тестируйте устойчивость: Как часто тесты требуют доработки при изменении кода?
Как и в научных промптах МФТИ, важна методология: формулируйте гипотезу, проводите эксперимент, анализируйте результаты.
Заключение
Переход от простых запросов к сложным системным промптам — это путь от экономии времени к улучшению качества всего тестового процесса. Начните с уровня, соответствующего вашим текущим задачам, и постепенно усложняйте промпты по мере роста экспертизы.