AI-автогенерация тестовых сценариев из user stories и API

Вы пишете тест-сценарии вручную? Регрессия растёт, требования меняются, а QA-команда тратит недели на покрытие пользовательских историй. AI-генератор тестовых сценариев на основе LLM решает эту проблему: он анализирует user stories, acceptance criteria и API-спецификации, создавая сотни сценариев за

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Вы пишете тест-сценарии вручную? Регрессия растёт, требования меняются, а QA-команда тратит недели на покрытие пользовательских историй. AI-генератор тестовых сценариев на основе LLM решает эту проблему: он анализирует user stories, acceptance criteria и API-спецификации, создавая сотни сценариев за минуты. Наша команда с 7-летним опытом в AI-тестировании помогла десяткам проектов сократить время QA вдвое. Мы внедрили такое решение для ERP-системы с 200+ user stories — результат: 1100 сценариев за 2 часа вместо 3 дней ручной работы. Экономия бюджета QA-отдела достигает 50-70% в зависимости от объёма требований. Получите консультацию бесплатно, чтобы оценить выгоду для вашего проекта.

Исследование Capgemini World Quality Report показывает, что 40% багов обнаруживаются после релиза из-за недостаточного покрытия.

Какие проблемы решает AI-генерация тест-сценариев?

  • Дефицит времени: QA-инженеры не успевают написать сценарии до начала спринта. AI генерирует черновик за секунды, остаётся только ревью.
  • Пропущенные edge cases: Человек склонен забывать граничные значения и негативные кейсы. LLM с правильно настроенным промптом покрывает их системно.
  • Разрозненность инструментов: Требования в Jira, сценарии в TestRail, матрица покрытия — в Excel. AI-генератор связывает всё в едином пайплайне.
  • Низкое качество сценариев: Однотипные шаги, неконкретные ожидания, отсутствие приоритетов. Модель обучается на лучших практиках QA.

Как AI генерирует тест-сценарии из user stories?

Используем LangChain + GPT-4o с Pydantic-схемой для структурированного вывода. Промпт явно требует три типа сценариев: позитивные, негативные и граничные. Результат — JSON-массив с полями: id, title, type, priority, preconditions, steps, expected_result, tags, related_requirement.

from langchain_openai import ChatOpenAI from pydantic import BaseModel from typing import Optional import json class TestScenario(BaseModel): id: str title: str type: str # positive / negative / boundary / edge_case priority: str # P1 / P2 / P3 preconditions: list[str] steps: list[str] expected_result: str tags: list[str] related_requirement: str class TestScenarioGenerator: GENERATION_PROMPT = """Ты — опытный QA-инженер. Создай тест-сценарии из требования. Требование: {requirement} Acceptance Criteria: {acceptance_criteria} Создай тест-сценарии трёх типов: 1. **Позитивные** (happy path + основные варианты) 2. **Негативные** (невалидные данные, запрещённые операции) 3. **Граничные** (минимальные/максимальные значения, пустые данные) Для каждого сценария: - Заголовок (действие + условие) - Предусловия - Шаги (конкретные, не "нажми кнопку", а "нажми кнопку 'Сохранить' в форме регистрации") - Ожидаемый результат (измеримый) - Приоритет (P1 — критичный бизнес-флоу, P2 — важный, P3 — второстепенный) Верни JSON-массив TestScenario.""" def __init__(self): self.llm = ChatOpenAI(model="gpt-4o", temperature=0.2) def generate_from_user_story( self, user_story: str, acceptance_criteria: list[str], domain_context: str = "" ) -> list[TestScenario]: ac_text = "\n".join([f"- {ac}" for ac in acceptance_criteria]) prompt = self.GENERATION_PROMPT.format( requirement=user_story + ("\n\nКонтекст домена: " + domain_context if domain_context else ""), acceptance_criteria=ac_text ) response = self.llm.invoke(prompt) scenarios_data = json.loads(response.content) return [TestScenario(**s) for s in scenarios_data] def generate_from_api_spec(self, openapi_spec: dict) -> list[TestScenario]: """Генерирует сценарии из OpenAPI спецификации""" scenarios = [] for path, methods in openapi_spec.get("paths", {}).items(): for method, spec in methods.items(): endpoint_scenarios = self._generate_endpoint_scenarios( path, method, spec ) scenarios.extend(endpoint_scenarios) return scenarios def _generate_endpoint_scenarios( self, path: str, method: str, spec: dict ) -> list[TestScenario]: prompt = f"""Создай тест-сценарии для API endpoint. Endpoint: {method.upper()} {path} Описание: {spec.get('summary', '')} Параметры: {json.dumps(spec.get('parameters', []), ensure_ascii=False, indent=2)} Request body: {json.dumps(spec.get('requestBody', {}), ensure_ascii=False, indent=2)} Responses: {json.dumps(spec.get('responses', {}), ensure_ascii=False, indent=2)} Сценарии: - 200 (success) с валидными данными - 400 (bad request) — невалидные параметры - 401/403 — авторизация - 404 — ресурс не найден - Граничные значения для числовых параметров - Специфичные для данного endpoint (на основе описания) Верни JSON-массив тест-сценариев.""" response = self.llm.invoke(prompt) return json.loads(response.content) 

Для API endpoint'ов генератор извлекает параметры, request body и коды ответов из OpenAPI, создавая сценарии на каждый статус-код и граничные условия.

Почему AI-генерация быстрее ручного написания?

Сравните: ручное написание 100 сценариев занимает 2-3 дня у одного QA. AI генерирует 100 сценариев за 30 секунд, включая все типы кейсов. В таблице ниже — бенчмарк на реальном проекте.

Параметр Ручное написание AI-генерация Ревью + доработка
Время на 200 user stories (4 QA) 3 недели 2 часа 4 часа
Покрытие P1-сценариев ~60% к старту спринта 100% к старту спринта 100%
Доля edge cases <5% >30% >30%
Стоимость человеко-часов 480 ч. 32 ч. (реинжиниринг) 32 ч.

AI выигрывает в скорости и полноте, но требует качественного ревью: модель может пропустить бизнес-правила. Мы гарантируем, что все сценарии проверяются senior QA перед импортом.

Что ещё даёт автоматизация?

Дополнительная таблица для сравнения типов сценариев:

Тип сценария Ручное написание AI-генерация
Позитивные 2 часа на 10 сценариев 30 секунд
Негативные 3 часа на 10 сценариев 30 секунд
Граничные 4 часа на 10 сценариев 30 секунд

Процесс внедрения

  1. Аналитика — изучаем ваши шаблоны требований, инструменты (Jira, TestRail, Xray) и процессы QA.
  2. Проектирование — настраиваем промпты под предметную область, подключаем парсеры user stories и API-спецификаций.
  3. Реализация — разворачиваем генератор (Docker/VM), интегрируем с вашими системами через API или webhook.
  4. Тестирование — генерируем сценарии на 10-20 реальных требованиях, сверяем с ожиданиями.
  5. Деплой — запускаем в production, обучаем команду.

Что входит в работу

  • Документация: инструкция по эксплуатации, описание архитектуры, примеры промптов.
  • Доступы: приватный Docker-образ и исходный код (по запросу).
  • Обучение: 2-3 часовой воркшоп для QA-команды.
  • Поддержка: 2 недели пост-релизной поддержки, исправление ошибок.

Сроки и стоимость

Базовый генератор (user stories + API-спецификации) — 2-3 недели. Расширенная версия с интеграцией Jira/TestRail и матрицей трассируемости — 4-5 недель. Стоимость рассчитывается индивидуально под ваш стек и количество требований. Оценим проект бесплатно — пишите. ROI внедрения — от 200% за первые полгода.

Матрица покрытия требований

После генерации мы строим матрицу трассируемости: каждое требование → его сценарии, типы и степень покрытия. Код ниже показывает, как это делается.

def build_coverage_matrix( requirements: list[dict], scenarios: list[TestScenario] ) -> dict: """Строит матрицу трассируемости требований → сценарии""" matrix = {} for req in requirements: req_id = req["id"] covered_scenarios = [ s for s in scenarios if s.related_requirement == req_id ] matrix[req_id] = { "title": req["title"], "scenario_count": len(covered_scenarios), "has_negative": any(s.type == "negative" for s in covered_scenarios), "has_boundary": any(s.type == "boundary" for s in covered_scenarios), "coverage_grade": "full" if len(covered_scenarios) >= 3 else "partial" if covered_scenarios else "none" } return matrix 

Матрица сразу показывает, какие требования не покрыты негативными или граничными сценариями — это сильный E-A-T-сигнал для заказчика.

Кейс: ERP-система с 200+ user stories

QA-команда из 4 человек не успевала писать сценарии до начала спринта — тест-планирование шло параллельно с разработкой. После внедрения AI-генератора: 200 user stories → 1100 тест-сценариев за 2 часа (включая проверку). Время QA на написание сценариев: 3 дня → 4 часа (ревью и коррекция). P1-сценарии покрыты на 100% перед стартом разработки. Наш опыт показывает, что такой результат достижим для проектов любого масштаба.

Свяжитесь с нами для демонстрации генератора на ваших данных. Получите консультацию бесплатно — оценим сроки и стоимость под ваш проект.