| Как мы научили AI разбирать упавшие автотесты и заводить баги в Трекере |
| 05.08.2026 00:00 |
|
Автор: Олег Малышев, телеграмм-канал автора про QA,QA Auto, AI, Вайбкодинг лидер стека тестирования в компании «ТехВилл» Всем привет, меня зовут Олег. В прошлой статье я рассказывал, как генерить автотесты из Swagger и тест-кейсов при помощи OpenAPI Generator + Cursor AI / Claude Code и как с этого всего автоматически снимать покрытие через Swagger Coverage. В этой статье я хочу рассказать, как мы разбираем упавшие автотесты при помощи интеграции ТестОпс с Яндекс Трекером, MCP TestOps, MCP Яндекс Трекера и Cursor AI / Claude Code. Но начнем не с AI. Сначала расскажу про сам процесс: зачем нам дефекты в TestOps, как мы руками разбираем запуск автотестов, почему без matcher-правил это быстро превращается в рутину и что именно мы потом автоматизировали. Проблема: автотесты упали, а что дальше? Когда автотесты падают, сам факт красного запуска еще почти ничего не говорит. Нужно понять, что именно произошло:
Если каждый раз смотреть только список failed/broken тестов, команда быстро начинает тратить время на повторный разбор одних и тех же падений. Сегодня QA уже понял, что три теста падают из-за одной ошибки на бэке, завтра другой QA снова открывает те же тесты и снова проходит тот же путь. Поэтому после запуска автотестов у нас есть простое правило: все упавшие результаты должны быть разобраны и привязаны к дефектам. В идеале после разбора в запуске не остается неразобранных failed/broken результатов. Зачем нужны дефекты в TestOpsДефект в TestOps для нас — это не просто еще одна сущность рядом с тест-кейсом и запуском. Это способ превратить хаотичный список падений в понятную базу причин. Один дефект должен описывать одну причину падения. Не просто «404», «500» или «AssertionError», а конкретную проблему: например, endpoint получения изображений начал отдавать 404 для группы сценариев, где по контракту ожидается 200. Это дает несколько практичных плюсов.
Главная мысль: дефекты помогают не разбирать одно и то же падение заново после каждого запуска. Как выглядит ручной процессРегламент разбора устроен достаточно прямолинейно. 1. Открываем запуск и смотрим неразобранные результатыПосле запуска автотестов переходим в результаты прогона в TestOps и открываем обзор. Если в запуске есть неразобранные результаты, это значит, что на упавшие тесты еще не заведены дефекты или дефекты есть, но конкретные test results к ним не привязаны.
Важный момент: создавать дефект и привязывать его к упавшему тесту можно только в незакрытом запуске. Поэтому разбирать падения лучше до закрытия launch. 2. Анализируем ошибку в упавшем тестеДальше открываем упавший тест и смотрим причину падения. Например, тест мог упасть с ошибкой:
Одного текста ошибки обычно недостаточно. Нужно раскрыть stack trace и найти строку, которая относится именно к нашему автотесту: класс и метод, где произошло падение.
Например:
Теперь у нас есть две важные части:
После этого нужно понять причину. Не каждое падение автотеста равно продуктовому багу. Иногда проблема в host, токене, тестовых данных, setup, cleanup, Swagger-контракте или локальной десериализации ответа в generated model. 3. Создаем новый дефект или переиспользуем существующийЕсли подходящий открытый дефект уже есть, связываем упавший тест с ним. Но важно не остановиться на простой ручной привязке. Если просто привязать текущий test result к дефекту, это сработает только для текущего запуска.
Чтобы TestOps сам привязывал похожие падения в следующих прогонах, у дефекта должно быть правило автоматизации. Если такой причины раньше не было, создаем новый дефект. Заголовок на первом шаге не нужно делать слишком сложным, но он должен отражать суть ошибки. Описание можно доработать так, чтобы разработчику было понятно:
4. Создаем или связываем задачу в Яндекс ТрекереЕсли дефект связан с продуктовым багом, к нему должна быть привязана задача в Яндекс Трекере. Это можно сделать прямо из TestOps: либо связать дефект с уже существующей задачей, либо создать новую задачу через интеграцию с баг-трекером.
Это важная часть процесса: задача должна появиться именно через интеграцию TestOps, чтобы связь между запуском, дефектом и Tracker-задачей оставалась прозрачной. 5. Настраиваем правило автоматизацииПравило автоматизации — это то, из-за чего дефекты начинают реально экономить время.
В простом случае в matcher добавляется текст ошибки:
Но такой шаблон может быть слишком широким. Ошибка 404 может появиться в разных местах и по разным причинам. Поэтому правило лучше ограничить еще и stack trace:
Такое правило говорит TestOps: если в новом запуске снова встретится ошибка «ожидали 200, получили 404» и она произошла в группе тестов про получение изображений, нужно автоматически привязать это падение к этому дефекту.
Это не просто ловит любой 404. Это ловит конкретную повторяющуюся причину падения.
Matcher не всегда нужно настраивать до конкретного тестового метода. Если проблема относится ко всему классу тестов, можно ограничиться классом в stack trace.
Если ошибка уникальная и сама по себе достаточно специфичная, иногда хватает matcher только по сообщению об ошибке.
6. Проверяем результатПосле создания дефекта нужно проверить, что:
При следующем прогоне, если упадут эти же тесты или новые тесты с такой же причиной, TestOps автоматически привяжет их к дефекту. А когда задача в Яндекс Трекере будет закрыта, дефект в TestOps тоже сможет закрыться автоматически через интеграцию.
Какие правила мы для себя зафиксировалиЧтобы база дефектов не превратилась в свалку, мы придерживаемся нескольких правил.
Отдельно важно классифицировать падения. Если причина в автотесте, тестовых данных, авторизации, окружении или Swagger mismatch без backend-багa, не нужно заводить продуктовый дефект в Tracker. Иначе команда разработки получает шум, а доверие к автотестам падает. Где здесь появляется AIРучной процесс работает, но он все равно занимает время. Нужно открыть запуск, получить все failed/broken результаты, посмотреть детали, сгруппировать похожие ошибки, проверить существующие дефекты, создать matcher, связать test results, создать или проверить задачу в Яндекс Трекере и убедиться, что все поля заполнены правильно. Поэтому для ускорения разбора мы подключили AI + MCP. Про наш MCP TestOps я уже рассказывал в статье «Cursor AI для ревью ручных тест-кейсов в TestOps». Если коротко, MCP позволяет Cursor/Claude Code ходить в TestOps, получать нужные сущности и записывать результат обратно. Для этой задачи мы используем MCP TestOps вместе с MCP Яндекс Трекера. Поверх этого я написал skill /
Например:
Дальше AI-агент делает примерно то же, что делал бы QA по регламенту, только быстрее и более системно:
Важно, что AI не должен просто создавать дефекты на все красное подряд. В skill зашиты правила защиты от ложных дефектов: если причина похожа на проблему тестовых данных, неверный host, неправильную авторизацию, сломанный setup или ошибку автотеста, такой результат не должен превращаться в backend-баг. Как это выглядит на практикеНиже пример запуска skill. Передали ссылку на launch, команду
На выходе получаем короткий отчет: сколько результатов обработано, какие дефекты созданы, какие задачи в Яндекс Трекере связаны и остались ли неразобранные падения.
В этом примере результат получился такой:
Что дальшеСейчас я активно дорабатываю skill, чтобы он подходил под разные команды и разные компоненты, а не только под один заранее описанный маппинг. Следующий логичный шаг — сделать AI-агента, который будет проходиться по упавшим автотестам всех команд, разбирать результаты, заводить дефекты и задачи, настраивать matcher-правила и оставлять человеку только проверку спорных случаев. Идеальная картина для меня выглядит так: автотесты упали, агент сам разобрал запуск, сгруппировал причины, отделил продуктовые баги от проблем тестов и данных, создал нужные дефекты и Tracker-задачи, а QA утром видит уже не хаос из красных тестов, а понятный список причин и действий. Полностью убирать человека из этого процесса нельзя. Но снять большую часть рутины — уже вполне реально. Короткий итогДефекты в TestOps нужны не для галочки. Они помогают сделать базу падений управляемой, не плодить дубли и не разбирать одни и те же ошибки после каждого запуска. Matcher-правила превращают дефект из ручной отметки в механизм автоматической привязки повторяющихся падений. Интеграция с Яндекс Трекером связывает автотесты с разработкой. А MCP + Cursor AI / Claude Code позволяют автоматизировать большую часть рутины вокруг failed/broken результатов. На практике это значит, что QA меньше времени тратит на перекладывание информации между системами и больше времени — на главное: понять, где действительно сломался продукт, а где нужно поправить тесты, данные или инфраструктуру. А ещё буду рад видеть вас в моём уютном Telegram-канальчике. Когда-то он был просто QA-каналом, а теперь постепенно превратился в канал про ИИ, тестирование, автоматизацию и то, как все эти новые инструменты применять не в теории, а в реальной работе. |