Привет! Меня зовут Александр Чернышев, я занимаюсь тестированием мобильных приложений hh.ru, и за последние полгода моя рабочая рутина кардинально поменялась благодаря ИИ-инструментам, которые мы активно используем в HeadHunter. В моём случае это Claude Code с моделью Opus 5 — по моему опыту, она лучше всего справляется с рабочими задачами. Оговорюсь: у меня подписка Max, поэтому лимитов хватает с запасом. Сейчас я подключаю агента к большинству своих задач. Основа рабочего процесса — это скиллы: инструкции, которые задают агенту последовательность действий и не дают ему каждый раз импровизировать. Вместе с ними я использую MCP-серверы и плагины, через которые агент может взаимодействовать с внешними инструментами, например с Figma (figma-mcp).

В этой статье я разберу весь жизненный цикл задачи — от подготовки чеклиста и сверки с ТЗ до ретеста и автотестов — и покажу, как на каждом этапе использую ИИ-агента. Расскажу, какие локальные и корпоративные скиллы и MCP помогают мне в работе и что в итоге всё равно остаётся на стороне тестировщика. Сразу оговорюсь: названия скиллов у нас внутренние — за пределами hh.ru вы их не встретите. Поехали!

Шаг 1. Чеклист из кода (/generate-test-instructions)

Для начала стоит сказать, что в нашей компании давно нет разделения на ручных и авто-QA: каждый инженер работает с кодом приложения напрямую. Поэтому, когда приходит задача на тестирование, мы открываем Claude Code CLI или Desktop прямо из фиче-ветки и первым делом собираем чеклист проверок.

Для этого мы используем скилл /generate-test-instructions. По сути, это markdown-файл с инструкцией для агента: где взять базовую ветку, как получить merge-base, что прочитать целиком, в каком порядке рассуждать и что не стоит включать в результат. 

Отдельный промт не нужен: запускаем скилл, агент анализирует diff и собирает чек-лист. На выходе получаем пять фиксированных разделов: затронутые модули, что изменилось, регресс, что проверить, аналитика и конфиги. Пошаговые сценарии намеренно не используем, тестировщик знает приложение лучше модели, которая на этом этапе видит только diff. Поэтому задача агента — не расписать тестирование за человека, а показать, что изменилось и где искать потенциальные проблемы.

В результате мы получаем полноценную карту изменений, от которой можем отталкиваться и строить стратегию тестирования. Причем сейчас даже запускать скилл вручную не приходится: он автоматически вызывается на уровне CI при создании пулл-реквеста. Остаётся только открыть пулл-реквест и забрать  готовый чеклист.

Вырезка из отчета
Вырезка из отчета

Шаг 2. Сверка с ТЗ и макетами (/read-jira и figma-mcp)

На первом шаге агент собрал чек-лист только по коду. Но нам важно проверить не только саму реализацию, но и то, насколько она соответствует ТЗ и макетам. Поэтому следующим шагом просим агента актуализировать чек-лист, сопоставив его с ТЗ из задачи в Jira и макетом из Figma.

За ТЗ отвечает скилл /read-jira. Передаем ему ссылку на задачу, а дальше он через  MCP-сервер Jira получает нужные данные, в том числе ключ и описание задачи.

С макетами работает Figma MCP: он дает агенту доступ к структуре нод и скриншоту.В Figma копируем ссылку на конкретный слой через Copy link to selection — так в ней будет параметр node-id. Без него агент читает фрейм целиком и тратит лишние запросы, а нам это не надо. 

Отдаём ссылку агенту вместе с промптом. Он читает ноду, подмечает структуру: размеры, вложенные блоки, тексты и сравнивает это с кодом.

В итоге у агента есть три источника: код, ТЗ из Jira и макет из Figma. Их можно сверить между собой и ещё до ручного тестирования найти расхождения: например, баги вёрстки или отсутствующие части флоу. Это заметно сокращает время и повышает качество тестирования.

Шаг 3. Сверка iOS и Android по одной фиче (/hh-mobile-crossplatform)

Но и это ещё не всё. Наш следующий шаг — проверить, одинаково ли работает фича на Android и iOS. У нас есть доступ к коду обеих платформ, поэтому такую сверку тоже можно поручить агенту. 

Достаточно написать: «Сравни, как сделали на iOS» или «Сравни, как сделали на Android». Скилл находит реализацию одной фичи в iOS- и Android-репозиториях и ищет расхождения по 14 осям: бизнес-логика, состояния экрана, крайние случаи, аналитика, эксперименты, API, кэш, сетевые ошибки, авторизация, оффлайн, конфигурация, навигация, тексты, тесты. 

На выходе получаем саммари с найденными различиями между платформами. Такая сверка помогает заметить то, что могли упустить при декомпозиции фичи: например, на одной платформе обработали граничный случай, а на другой — нет. QA и разработчики сразу видят такие расхождения и могут понять, какие из них ожидаемы, а какие требуют проверки.

Шаг 4. Ручное тестирование и симулятор в Claude Code

Теперь можно заняться работой, ради которой всё это затевалось. Часть этой работы тоже можно отдать агенту: в июле 2026 года в Claude Code Desktop встроили iOS Simulator — пока в публичной бете, только на macOS. Агент может собрать iOS-приложение, установить его, запустить, прокликать созданный ранее чек-лист и проверить результат. Для этого достаточно команды вроде: «Собери и запусти приложение, проверь его по чек-листу».

Скриншот из Claude Code Desktop
Скриншот из Claude Code Desktop

Не могу сказать, что я сильно доволен симулятором. По скорости здесь пока выигрывает человек: тестовые сценарии я прохожу в 10–30 раз быстрее агента. Кроме того агент может тупить на ровном месте и уходить далеко в степь и заодно быстро съедать лимиты. 

Вдобавок есть важное «но». Только человек способен оценить UX: здесь важен не формальный результат проверки, а опыт использования приложения. Насколько понятен сценарий, удобно ли взаимодействовать с интерфейсом, где пользователь может запутаться — такие вещи лучше замечаешь, когда сам проходишь флоу.

И не стоит забывать, что агент работает только в симуляторе, а тестировать нужно на реальном устройстве. Симулятор запускает приложение на процессоре Mac с его памятью и скоростью, поэтому такое тестирование не воспроизводит реальные условия работы смартфона и может не показать проблемы с производительностью, долгую холодную загрузку и краши на бюджетных телефонах. Отличается и само взаимодействие с интерфейсом: вместо тач-события в симуляторе — мышь, поэтому жесты, скорость свайпа и попадание пальцем в маленькие элементы ощущаются иначе. Значительная часть багов, которые доходят до пользователей, живёт именно в этих зонах. 

Поэтому я использую симулятор как дополнительный инструмент: отдаю агенту часть функциональных проверок и прогон чек-листа, а сам параллельно занимаюсь тем, где важны реальное устройство и человеческая оценка. Финальную приёмку фичи в любом случае провожу на реальном девайсе.

Шаг 5. Тестирование аналитики (/test-analytics)

После функциональных проверок переходим к мобильной аналитике. Это одна из самых трудоёмких частей тестирования: проходишь сценарий, ищешь нужное событие среди сотен строк и сверяешь параметры. Что-то легко пропустить, а ошибка в трекинге может привести к тому, что после запуска фичи мы не сможем корректно оценить её эффект на пользователей.

(Кстати, недавно мой коллега рассказывал о нашей мобильной аналитике на митапе— запись можно посмотреть на Youtube или VK-Video). 

Чтобы не сверять всё вручную, я использую скилл /test-analytics. Прежде надо сказать, что в hh есть единый репозиторий hh-mobile-analytics: в нём в формате YAML описаны все события, отправляемые из мобильных приложений (iOS и Android). Этот репозиторий служит единственным источником правды для обеих платформ. Это значит, что скилл на входе принимает пулл-реквест в develop с новой аналитикой в соответствующий репозиторий. 

Перед запуском мы вручную проходим флоу приложения, и вместе с пулл-реквестом передаём  файл с затреканной аналитикой. Это может быть logcat файл или экспорт из Charles (.chls).

Дальше скилл сопоставляет три источника: пулл-реквест аналитики, код приложения и затреканые события. Первый показывает, что должно трекаться, второй — что реализовано в коде, третий — что произошло на самом деле. Так можно увидеть, где именно возникло расхождение. 

На выходе получаем диагноз в виде markdown-отчета с таблицей по всем событиям и разбором каждой проблемы: цитата схемы → что было затрекано/что не было затрекано → причина.

Вырезка из отчета
Вырезка из отчета

Скилл сильно ускоряет тестирование аналитики и сводит к минимуму человеческий фактор. То есть избавляет нас от долгой, тяжелой и скрупулёзной работы, чему я лично несказанно рад.

Шаг 6. Быстрый баг-репорт (/bug-report)

Баг нашли — теперь его нужно передать разработчику. Со скиллом создание баг-репорта по шаблону через jira-mcp занимает меньше трёх минут и избавляет от рутины с оформлением тикета по структуре  «идеального баг-репорта». 

Достаточно описать баг в свободной форме одним сообщением и при необходимости приложить скриншот. Агент вытаскивает из текста и изображения всю доступную информацию и спрашивает только о том, чего не хватает: шаги воспроизведения, фактический и ожидаемый результат.

Часть контекста он добирает сам. Платформу определяет по репозиторию, а если баг найден в текущей ветке, подтягивает её имя, номер задачи и затронутые файлы. Там, где есть ограниченный набор вариантов — например, исполнитель или тип связи, — агент предлагает выбрать нужный вариант кликом вместо набора строки.

В итоге вместо того, чтобы открывать вкладку в Jira, вручную писать подробный баг-репорт, добавлять связи и префиксы в название тикета, достаточно перейти в ветку в папке проекта, накидать описание бага и приложить скрин. Скилл через наш внутренний Jira MCP сам проставит связи, по шаблону опишет шаги и предусловия, спросит исполнителя через AskUserQuestion и покажет черновик на одобрение. Останется только всё проверить и подтвердить — и тот самый «идеальный баг-репорт» появится в Jira на радость разработчику.

Шаг 7. Ретест (/retest)

После того как разработчик починил баги, нужно провести ретест. Но  ещё лучше перед этим сделать статический анализ кода. Для этого есть скилл /retest. 

Он читает тикет с баг-репортом, разбирает дифф и по каждому дефекту даёт вердикт в виде таблицы. Так можно заранее понять, какие изменения внес  разработчик и действительно ли они должны исправить найденную проблему.

Вырезка из отчета
Вырезка из отчета

Шаг 8. Автотесты (/ui-test)

Когда фича протестирована и вмержена в develop, самое время приступить к автотестам. В hh мы используем нативные фреймворки Kaspresso (о нём рассказывали здесь) и Rafinad (о нём можно прочитать здесь). Дальше речь пойдёт конкретно про UI-тесты на iOS, поскольку к созданию скилла я имею непосредственное отношение.

В iOS-приложениях hh своя развитая инфраструктура UI-тестов: DSL-разметка Accessibility, типизированные Page Object и сервисы фикстур, привязанные к Swagger. Всё это подробно описано в стайл-гайде — md-файле в самом репозитории.

Скилл /ui-test состоит из папки с SKILL.md и девяти файлов в references/. Точка входа не содержит правил, она маршрутизирует, а сами правила лежат отдельно.

Чтобы запустить скилл, достаточно кратко описать желаемый тест, например: «Напиши автотест на отклик через экран вакансии пользователем, зарегистрированным в Беларуси». Чем больше деталей, тем лучше, но обычно хватает минимума по правилу: что делаем, где проверяем и как.

Результат складывается из трёх частей: Accessibility-файл, Page Object и тест.

  • Accessibility-файл лежит рядом с модулем, а не в тестах. Без него DSL не знает, к какому классу привязывать якоря, по которым ищется элемент на экране.

  • Page Object строится по жёсткой структуре: Waits, Actions, Asserts, Private. Здесь есть ещё два правила: не писать методы «на будущее»  — метод без вызова в тесте не верифицирован — и не дублировать уже созданные универсальные PO из shared модуля.

  • Тест. Имя состоит из трёх обязательных частей: test_<СтартовыеУсловия>_<ЧтоДелаем>_<ЧтоПроверяем>. И главное правило скилла: тест заканчивается assert*(), а не действием или ожиданием.

Как это выглядит на практике

Допустим, есть простая задача: «Напиши тест на то, что при пустом списке откликов со статусом „Отказ“ показывается заглушка». Вот что происходит дальше.

1. Разведка — где вообще этот экран

Агент не начинает сразу писать код. Сначала он ищет экран в коде и убеждается, что нашёл именно тот, — по текстам и по описанию интерфейса. 

Дальше идёт обратный ход: откуда пользователь на этот экран попадает, кто его открывает, какая кнопка ведёт, что должно быть выполнено, чтобы точка входа вообще была доступна — например, авторизация, наличие резюме или откликов. Так собирается цепочка от главного экрана до целевого. 

К концу этого шага агент должен назвать цепочку целиком и для каждого её звена определить, есть ли уже описание нужного экрана в тестах или его придётся писать. Отдельно он ищет похожие тесты. Если такие уже есть, подготовку данных можно взять оттуда, а не изобретать заново.

2. Сверка — что уже написано

Теперь агент смотрит, что из необходимого уже существует: описание целевого и родительского экрана, и способ перехода между ними. 

Универсальные компоненты — диалоги, списки выбора, подсказки — у нас описаны один раз на всех, поэтому скилл прямо велит сначала заглянуть туда и не плодить дубли. 

На этом же этапе могут всплыть пробелы. Например, на родительском экране нет метода для перехода, а нужная кнопка не размечена. Лучше узнать это сейчас, чем после написания теста.

3. Разметка экрана

Если целевой экран не размечен, агент начинает с него. Он описывает структуру экрана: какие есть блоки, какие элементы внутри и что из них повторяется списком. Потом расставляет пометки на самих элементах в интерфейсе. 

Скилл держит агента за руку в двух местах. Во-первых, имена элементов берутся из кода, а не придумываются «по смыслу для пользователя». Во-вторых, размечается только то, что нужно для текущего теста. Никакого «заодно помечу всё, вдруг пригодится».

4. Описание экрана для тестов

Дальше агент пишет объект, через который тест будет работать с экраном. Напрямую к элементам тест не обращается — только через такое описание. 

Внутри всё раскладывается по трём группам в фиксированном порядке: ожидания, действия, проверки. Действия называются потому, что физически делает пользователь: нажал, выбрал, ввёл.

5. Сам тест

Теперь можно собирать сам тест. Это цепочка вызовов, которая читается как обычный сценарий: дождались главный экран, открыли отклики, выбрали вкладку «Отказ», дождались заглушку, проверили её заголовок. 

6. Тестовые данные

Этот шаг может не понадобиться вовсе, и скилл этому только рад.. Если данные всё-таки нужны, агент сначала читает кодовую базу целевого экрана — не ради интерфейса, а ради предусловий. Например, экран может требовать подтверждённый телефон, активное резюме. Из интерфейса это не видно, поэтому без нужных данных тест падает в неожиданном месте и с невнятной причиной. 

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

7. Самопроверка

В конце агент прогоняет свою работу по чек-листу из двадцати пунктов — тому самому, по которому результат потом будут проверять на ревью.

Заключение

Работа QA меняется. Тестировщик всё меньше просто выполняет готовые процедуры и всё чаще создаёт их сам. Каждый скилл в этой статье — это опыт команды, переведённый в инструкцию: что читать, в каком порядке думать и чего не делать. Раньше такой опыт передавался устно и терялся с уходом людей, а теперь он лежит в репозитории, версионируется и выполняется одинаково хоть в первый, хоть в сотый раз. Хороший скилл, по сути, — хорошо написанное ТЗ для самого себя, и умение его написать становится ключевым навыком QA-инженера.

Есть и практический вывод: агенту нужно доверять, но проверять его. Результат /test-analytics — это диагноз, а не приговор, где вердикт /retest — это повод открыть дифф, а не закрыть тикет.

Полгода назад мой день состоял из десятка мелких переключений и типовых рутинных задач. В совокупности они съедали до половины моего рабочего времени и часто сбивали мой фокус. Сегодня большую часть из этого делает цепочка скиллов, а я занимаюсь тем, ради чего вообще пришёл в тестирование: думаю, как «сломать» фичу, и смотреть на продукт глазами пользователя. 

Искусственный интеллект здесь в первую очередь лишь инструмент, который помогает делать работу быстрее. Но финальное решение и ответственность всё равно остаются за QA.

А как вы в компании используете агентов? Пишите в комментариях, будет интересно почитать!

Комментарии (1)


  1. p9202583853
    24.09.2026 09:12

    Спасибо за статью, очень технологично. Расскажите о чем спрашиваете джунов QA имея весь этот современный фарш техник и технологий?