Генерация тест-кейсов нейросетями — на удивление неочевидная задача. Уже давно было понятно, что нельзя просто закинуть юз-кейс в чат-бот без обвязки. Баги всегда прячутся в деталях, и чтобы их отловить, нужен контекст. А чтобы дать модели контекст, нужны интеграции.

За последние годы возможности моделей по интеграции с повседневными инструментами выросли неимоверно. Сейчас крупные компании всерьёз автоматизируют ручные процессы в тестировании:

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

Я буду работать с популярным инструментом n8n и соберу агента, который свяжет чат в Пачке, страницы с требованиями в Яндекс Вики и нейросеть, чтобы писать тест-кейсы.

1. Коротко о n8n

N8n — это конструктор для агентов, который позволяет связывать нейросетевые модели с кодом, таск-трекерами, CI-системами и прочей инфраструктурой. За каждое действие отвечает отдельная нода, а из нод можно собирать агентов, как из Лего:

Пример агента в n8n

Пример агента в n8n

Исходный код n8n открыт, и все могут писать собственные ноду. Агенты в n8n называются «воркфлоу», и их можно экспортировать в формате JSON. Запускаются воркфлоу одним из двух способов:

  • в облаке n8n — тогда нужно платить за хостинг и за каждый запуск;

  • на своей инфраструктуре — это бесплатно.

В n8n сейчас уже больше 2600 интеграций с самыми разными инструментами — и это позволяет собирать агентов под практически любой стек. Вот отличные примеры:

  • Можно написать инструмент, который будет генерировать тест-кейсы по тикетам из Jira и документации в GitHub, для которой настроен автоматизированный поиск через Pinecone.

  • Можно сделать воркфлоу для мессенджера, который будет обходить тред и собирать всё нужное для требований.

  • Можно собрать систему, которая будет собирать в одном пространстве данные из пяти разных источников данных и помогать принимать решения по ним.

Я разберу более простой кейс, но покажу процесс подробно. Сценарий такой: нужно сгенерировать тест-кейс, для которого есть требование в Яндекс Вики и юз-кейс в чате Пачки. Задача: дать модели доступ к этим источникам. С чего начать?

2. Новый воркфлоу

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

Создание воркфлоу

Создание воркфлоу

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

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

Триггер Пачки

Триггер Пачки

Но чтобы этот триггер заработал, мне нужно настроить интеграцию с Пачкой.

3. Интеграция n8n с Пачкой

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

На панели слева я кликаю Интеграции > Боты > Создать бота:

Создание бота

Создание бота

Ввожу имя и ник, дальше включаю Исходящий вебхук бота, чтобы его можно было слушать на стороне n8n:

Исходящий вебхук

Исходящий вебхук

Настраиваю вебхук:

Настройка вебухка

Настройка вебухка

  • Игнорировать свои сообщения — это нужно, чтобы бот не дёргал сам себя.

  • Любые сообщения — чтобы бот слушал всё, что пишут в чате.

  • Нажатие кнопок — нужно конкретно для моего воркфлоу.

Дальше нужно настроить токен, по которому n8n будет распознавать бота. В меню редактирования бота иду в API и щёлкаю Создать токен:

Новый токен

Новый токен

Копирую токен себе — система его больше не покажет. Затем настраиваю права:

  • messages:read

  • messages:create

  • threads:read (чтобы бот мог читать и создавать комментарии)

  • threads:create

  • views:write (через форму пользователь будет передавать URL требования)

Чтобы связать бота с n8n, понадобятся:

  • URL, который n8n будет слушать

  • ключ подписи

Их можно найти на вкладке Исходящий вебхук:

URL вебхука

URL вебхука

Дальше я создаю чат, в котором буду общаться с ботом:

Создание чата

Создание чата

Добавляю бота в чат:

Добавление бота в чат

Добавление бота в чат

Настройка триггера в n8n

Теперь можно вернуться в n8n. Открываю уже созданную ноду триггера и первым делом указываю там только что скопированный URL:

Настройка триггера в n8n

Настройка триггера в n8n

Дальше жму Connect to Pachca и ввожу только что созданный токен и ключ подписи:

Учетные данные Пачки

Учетные данные Пачки

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

Публикация воркфлоу

Публикация воркфлоу

Триггеры в опубликованном воркфлоу всегда ловят события, дополнительно их запускать не надо. Теперь я могу отправить сообщение в настроенном чате, вернуться в n8n и на вкладке Executions в проекте увидеть, что появилось новое выполнение:

Новое выполнение в n8n

Новое выполнение в n8n

Итак, связь с Пачкой заработала. Второй элемент моей инфраструктуры — Яндекс Вики.

4. Интеграция n8n с Яндекс Вики

Официальной ноды для Яндекс Вики в n8n нет, но связь с Yandex MCP всё равно настроить можно. Для этого потребуются две вещи: токен и идентификатор организации.

Токен

Чтобы внешние системы получили доступ к ресурсам Яндекса, нужно настроить приложение в Яндекс OAuth.

  • Щёлкаю +Создать.

  • Выбираю тип Для доступа к API или отладки.

  • Ввожу любое название.

  • Указываю почту для авторизации.

  • В поле Доступ к данным добавляю нужные доступы: мне потребуется только wiki:read.

  • Жму Создать приложение внизу страницы.

Приложение создано, теперь мне понадобится его ClientID:

ClientID приложения

ClientID приложения

С его помощью нужно сгенерировать токен. Для этого я копирую в адресную строку браузера следующую ссылку:

https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID

В ней ВАШ_CLIENT_ID заменяю на значение, скопированное из приложения, и перехожу по ссылке. Прохожу авторизацию, генерирую токен и сохраняю его.

Идентификатор организации

Его можно найти в Яндекс Трекере на странице Администрирование → Организации, в поле Идентификатор.

  • Для «Яндекс 360 для бизнеса» идентификатор называется X-Org-ID

  • Для «Yandex Cloud Organization» — X-Cloud-Org-ID

Если страница недоступна, нужно попросить ID у администратора организации.

Настройка доступа в n8n

В n8n все учётные данные хранятся отдельно от воркфлоу в разделе Credentials проекта или личного пространства. Перехожу туда и щёлкаю Create credential:

Создание учётных данных

Создание учётных данных

Выбираю тип Multiple Headers Auth и создаю два заголовка:

  • Authorization: в значение вставляю токен.

  • X-Org-ID или X-Cloud-Org-ID: в значение вставляю идентификатор.

Учётные данные Яндекс

Учётные данные Яндекс

Нода Яндекс Вики в воркфлоу

Обращаться к вики из воркфлоу можно разными способами:

  • можно обратиться напрямую, строго указывая, что нужно от ресурса;

  • можно передать ИИ-модели доступ к вики как MCP-инструмент.

Это делают соответственно ноды MCP Client и MCP Client AI Tool. У первой квадратная плашка, и она самостоятельная, у второй — круглая, и её можно использовать, только подключая к ноде модели:

MCP Client и MCP Client Tool

MCP Client и MCP Client Tool

Я попробую запросить страницу из вики напрямую, т. е. через квадратную ноду, по ID. Настройки будут такие:

  • Server Transport: HTTP Streamable

  • MCP Endpoint URL: https://mcp.wiki.yandex.net

  • Authentication: Multiple Headers Auth

  • Credential: учётные данные, которые я до этого создал для ресурсов Яндекса

  • Tool: From list > GetPageById

  • Page Id: ID нужной страницы

Настройка MCP Client

Настройка MCP Client

Получить ID страницы можно только через API вики. Делаю это командой:

curl -s "https://api.wiki.yandex.net/v1/pages?slug=СЛАГ_СТРАНИЦЫ" -H "Authorization: OAuth ТОКЕН" -H "X-Cloud-Org-ID: ИДЕНТИФИКАТОР"

Здесь нужно заменить:

  • ТОКЕН на токен, созданный приложением Яндекса

  • ИДЕНТИФИКАТОР на идентификатор организации

  • при необходимости — X-Cloud-Org-ID на X-Org-ID

  • СЛАГ_СТРАНИЦЫ на слаг — например, для страницы https://wiki.yandex.ru/users/username/demo слаг будет users/username/demo

5. Сборка воркфлоу

Основные ноды заработали, теперь из них можно собрать рабочий процесс. Правила здесь такие:

  • Каждая нода, отработав, передаёт свой вывод следующим нодам через JSON.

  • Получить доступ к выводу предшествующей ноды можно через $json.имя_переменной.

  • Узнать имена переменных, которые возвращает нода, можно, выполнив воркфлоу (неважно, успешно или нет) и открыв выполнение во вкладке Executions проекта. Там в каждой ноде прописаны её переменные:

Вывод ноды после выполнения воркфлоу

Вывод ноды после выполнения воркфлоу

Выполнение можно как угодно ветвить и делать с данными всё, что придёт на ум.

Я решил написать воркфлоу с такой логикой:

  • Агент ждёт юз-кейс от пользователя в чате Пачки

  • Агент через форму запрашивает URL страницы с требованием комментарием к сообщению с юз-кейсом

  • Агент передаёт юз-кейс и требование модели

  • Агент возвращает ответ модели в тред юз-кейса

Выглядит этот воркфлоу так:

Готовый воркфлоу

Готовый воркфлоу

В JSON его можно скачать с моего Гитхаба. Публикую, отправляю юз-кейс в чате Пачки и в итоге получаю тест-кейс:

Диалог с ботом в Пачке

Диалог с ботом в Пачке

6. Что дальше: подводные камни

Казалось бы, какой бы ни был стек у организации, с n8n можно собрать воркфлоу под любые нужды за несколько вечеров — или за несколько часов с нейросетью.

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