AI-система Self-Healing Tests: автоисправление сломанных тестов

Команда тратит 20–40% времени на поддержку тестовой базы — не на написание новых тестов, а на исправление упавших. Причины: изменился UI (локатор не находит элемент), изменилось API (структура ответа), изменилась бизнес-логика (условие устарело). Self-Healing Tests (автоисправление тестов) — это сло

Направления 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

Команда тратит 20–40% времени на поддержку тестовой базы — не на написание новых тестов, а на исправление упавших. Причины: изменился UI (локатор не находит элемент), изменилось API (структура ответа), изменилась бизнес-логика (условие устарело). Self-Healing Tests (автоисправление тестов) — это слой ML, который детектирует причину падения и автоматически применяет фикс без участия человека. Это практическое применение AI для тестирования и ML для QA. Экономия бюджета команды может достигать 50% на поддержке автотестов, а количество flaky-тестов снижается до 70%. Свяжитесь с нами, чтобы получить оценку вашего проекта.

Сравните: ручное исправление одного flaky-теста занимает в среднем 2–4 часа. Self-Healing сокращает это время до 5 минут на проверку предложенного фикса — ускорение в 24–48 раз.

Как работает Self-Healing Tests?

Система работает в двух режимах: проактивный — превентивное обновление локаторов при деплое нового фронтенда, и реактивный — исправление после падения в CI/CD.

Ядро системы — три модуля:

  • Failure Classifier — NLP-модель (дообученный DistilBERT), классифицирует тип падения по stack trace: ElementNotFound, AssertionError, TimeoutError, NetworkError.
  • Selector Healer — для ElementNotFound ищет альтернативный локатор через DOM-анализ; обучен на парах (старый локатор → новый локатор) из истории коммитов.
  • Assertion Fixer — для AssertionError сравнивает фактическое и ожидаемое значение, определяет паттерн изменения (числовой drift, изменение формата строки, структурное изменение JSON) и предлагает обновлённый assert.
class SelfHealingRunner: def __init__(self, model_path: str): self.classifier = FailureClassifier.load(model_path) self.healer = SelectorHealer() self.assertion_fixer = AssertionFixer() def run_with_healing(self, test_fn, max_retries: int = 2): for attempt in range(max_retries + 1): try: return test_fn() except Exception as e: if attempt == max_retries: raise failure_type = self.classifier.predict(str(e)) if failure_type == "ElementNotFound": self.healer.apply_fix(e) elif failure_type == "AssertionError": self.assertion_fixer.suggest(e) 

Что даёт Selector Healing?

Для Selenium или Playwright тестов основной источник нестабильности — хрупкие CSS-селекторы вида #app > div:nth-child(3) > button. После изменения вёрстки такой локатор перестаёт работать.

Алгоритм восстановления:

  1. Парсим DOM текущей страницы в момент падения.
  2. Извлекаем признаки потерянного элемента из исходного кода теста: тип тега, text content, aria-label, соседние элементы.
  3. Строим эмбеддинг элемента (признаки → вектор через обученный энкодер).
  4. Ищем ближайший элемент в текущем DOM по cosine similarity.
  5. Генерируем новый локатор: предпочтение data-testid, затем aria-label, затем XPath с text().

Точность восстановления на тестовом датасете (5000 пар): 87% корректных фиксов. Self-Healing ускоряет исправление локаторов в 24–48 раз по сравнению с ручным поиском. Гарантируем, что после двухнедельного режима report-only система готова к автофиксам.

Пример срабатывания Selector HealerБыл локатор `#menu > div:nth-child(3) > button`. После редизайна меню кнопка переместилась. Система нашла элемент по aria-label "Add to cart" и сгенерировала `button[aria-label="Add to cart"]`. Тест прошёл.

Как мы интегрируемся в CI/CD?

# .github/workflows/tests.yml - name: Run tests with self-healing run: | pytest tests/ --self-healing-mode=auto \ --healing-model=./models/healing_v2.pkl \ --max-healing-retries=2 \ --healing-report=artifacts/healing_report.json 

После каждого healing-события система создаёт Pull Request с предложенным фиксом — инженер делает code review, а не отлаживает тест с нуля. По данным наших проектов с 500+ e2e тестами auto-healing закрывает 60–70% падений без участия QA, что даёт экономию более 100 человеко-часов в месяц. Для Playwright self-healing реализован на полную мощность, Selenium автоисправление работает через Selector Healer. Опыт внедрения в 10+ проектах подтверждает стабильные результаты.

Поддерживаемые фреймворки и технологии

Фреймворк Тип тестов Статус поддержки
Playwright E2E, компонентные Полная
Selenium WebDriver E2E Полная
Cypress E2E Частичная (через proxy)
pytest API, unit Только Assertion Fixing
JUnit/TestNG Unit, integration Только Assertion Fixing

Этапы внедрения

  1. Аудит тестовой базы: анализ частоты падений по типам, выявление наиболее нестабильных тестов.
  2. Сбор датасета из истории CI — пары (упавший тест, коммит-исправление).
  3. Обучение Failure Classifier и Selector Healer на конкретном проекте.
  4. Интеграция в CI/CD pipeline с режимом report-only на первые 2 недели.
  5. Переключение в режим auto-fix с порогом confidence > 0.85.
Объём тестовой базы Срок внедрения
До 200 тестов 2–3 недели
200–1000 тестов 3–5 недель
Более 1000 тестов 5–8 недель

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

  • Полный аудит тестовой инфраструктуры и истории падений.
  • Обучение кастомных моделей на данных вашего проекта.
  • Интеграция в CI/CD (GitHub Actions, GitLab CI, Jenkins).
  • Документация по настройке и эксплуатации.
  • Обучение команды (2 часа вебинара).
  • Поддержка в течение 3 месяцев после внедрения.

После внедрения Self-Healing количество упавших тестов снизилось на 70% — подтверждает практика наших клиентов. Self-Healing автоматизирует регрессионное тестирование и даёт уменьшение flaky тестов.

Когда стоит заказать внедрение?

Если ваша команда тратит больше 20% времени на поддержку тестов, а количество flaky-тестов растёт с каждым спринтом — свяжитесь с нами. Оценим ваш проект за 1–2 дня и предложим решение. Закажите внедрение — получите консультацию по вашей тестовой базе бесплатно.