Ви пишете тест-сценарії вручну? Регресія зростає, вимоги змінюються, а 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 секунд |
Процес впровадження
- Аналітика — вивчаємо ваші шаблони вимог, інструменти (Jira, TestRail, Xray) та процеси QA.
- Проектування — налаштовуємо промпти під предметну область, підключаємо парсери user stories та API-специфікацій.
- Реалізація — розгортаємо генератор (Docker/VM), інтегруємо з вашими системами через API або webhook.
- Тестування — генеруємо сценарії на 10-20 реальних вимогах, звіряємо з очікуваннями.
- Деплой — запускаємо в 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% перед стартом розробки. Наш досвід показує, що такий результат досяжний для проектів будь-якого масштабу.
Зв'яжіться з нами для демонстрації генератора на ваших даних. Отримайте консультацію безкоштовно — оцінимо терміни та вартість під ваш проект.







