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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
AI-система Self-Healing Tests (автоисправление сломанных тестов)
Средний
~2-4 недели
Часто задаваемые вопросы

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

Этапы разработки AI-решения

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

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

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

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

Архитектура self-healing слоя

Система работает в два режима: проактивный (превентивное обновление локаторов при деплое новой версии фронтенда) и реактивный (исправление после падения в 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% корректных фиксов.

Интеграция с 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, а не отлаживает тест с нуля. За первые 3 месяца эксплуатации в проектах с 500+ e2e тестами auto-healing закрывает 60–70% падений без участия QA.

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

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

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

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

Объём тестовой базы Срок внедрения
До 200 тестов 2–3 недели
200–1000 тестов 3–5 недель
Более 1000 тестов 5–8 недель