Skill v1.0.2
Automated scan100/100~3 modified
version: "1.0.2" name: vanessa-authoring description: "Vanessa: написание и уточнение feature-сценариев" uses_capabilities:
- run_vanessa
- build_project
Авторинг сценариев Vanessa Automation
Алгоритм написания
- Определи источник требования — спецификация или бизнес-кейс (
vanessa-scenario-policy). - Определи под каким пользователем выполняется сценарий (см. «Пользовательский контекст»).
- Найди подходящие шаги: сначала в библиотеке Vanessa, затем в сценариях проекта.
- Исследуй интерфейс и заполни форму вручную. Предпочтительный путь — MCP-инструменты Vanessa Automation через
v8-client-session-manager(см. «MCP-исследование через Vanessa Automation»). Для UI/UX-контроля формы применяйva-visual-check: VA MCP screenshot route, Linux/Xvfb рецепт и browser fallback с фиксацией причины. В любом варианте зафиксируй точные имена и заголовки элементов, поля, кнопки, закладки до ссылок на них в шагах; не угадывай идентификаторы (заголовок Title vs имя name — см.vanessa-scenario-policy). - Напиши один smoke-сценарий: открыть → одно действие → одно наблюдаемое следствие.
- Если шага нет — пометь
# unknown_step_candidate, не изобретай BSL-шаг. - Передай сценарий на прогон через
v8-runner(v8-runner test va).
MCP-исследование через Vanessa Automation
Этот раздел фиксирует универсальный workflow, проверенный на Vanessa Automation 1.2.043.28. Для другой версии сначала сверяй поведение с официальной инструкцией VA и live-схемами инструментов.
Официальный источник Vanessa Automation: <https://github.com/Pr-Mex/vanessa-automation>. Инструкции для AI/MCP находятся в docs/AI/. Обновления VA бери из официального репозитория/релизов, а не правками vendor-кода в проекте. Для WS-запуска используются наш форк v8-runner <https://github.com/SteelMorgan/v8-runner-rust> и v8-client-session-manager <https://github.com/SteelMorgan/v8-client-session-manager>.
Проверка версии и готовности
- Если VA manager-сессия ещё не поднята, запусти её строго по навыку
v8-runner(раздел «Vanessa Automation MCP через session-manager»); не собирай строку запуска в этом навыке. - Через
session_listдождись live-сессииkind=vanessa_test_client, где появились VA-tools: напримерget_VanessaAutomation_state,connect_test_client,get_form_analysis,manage_command_interface. - Вызови
get_environment_dataили ближайший доступный VA-инструмент окружения и зафиксируй версию Vanessa Automation в контексте задачи. - Если нужны служебные data-tools (
get_table_data,get_object_attributes), проверь, что служебное расширение VA загружено в тестируемую ИБ. Наличие свежих файлов расширения в source недостаточно: runtime-инструменты ищут формы в подключенной базе.
Обязательная последовательность работы
- Подключить тест-клиент. Перед любыми инструментами, которые читают/управляют интерфейсом тестируемого приложения, вызови
connect_test_clientс профилем тест-клиента. Профиль выбирай из настроек VA/таблицы профилейДанныеКлиентовТестированияв VAParams, не угадывай имя. Как формироватьtools.va/tests.vaвv8project.yamlи профиль TestClient внутри VAParams — см.v8-runner,references/config-and-backends.md. - Исследовать форму через VA-tools. Используй live-схемы tools и их описания из
session_list/tools/list, потому что набор инструментов расширяется между версиями VA. Не фиксируй закрытый список как полный. На момент VA1.2.043.28основные классы инструментов: командный интерфейс, список окон, данные активного окна, анализ формы, действия с элементами формы, чтение реквизитов объекта, чтение таблиц/данных, скриншоты, запись действий пользователя, выполнение шагов.feature. - Снять визуальный контрольный скриншот. Для любой UI/UX-проверки после открытия нужной формы применяй
va-visual-check: сначала VA MCP PNG, затем при необходимости Linux/Xvfb рецепт или browser fallback с фиксацией причины. - Не записывать данные без цели теста. Для исследования заполнения формы можно открыть форму создания, читать реквизиты и пробовать навигацию; запись/проведение выполняй только если это нужно для проверки заполнения или сценария, и соблюдай правила изоляции тестовых данных.
- Закрыть тест-клиент. После исследования, прогона или ошибки обязательно вызови
close_test_clientдля подключенного профиля. Если VA manager-сессия запускалась вручную для исследования, после завершения работы останови и её.
Антипаттерны:
- вызывать
get_form_analysis,manage_command_interface,manage_form_elements,get_object_attributes, screenshot/recording-инструменты доconnect_test_client; - считать внутренний список окон
get_window_list_testclientвизуальным скриншотом: он нужен для структуры и навигации, а UI/UX-приёмка требует PNG по правиламva-visual-check; - считать наличие имени tool в кешированном
tools/listдоказательством доступности — проверяй live-сессию нужногоkind; - держать тест-клиент открытым после завершения операции;
- править vendor-код VA/VAExtension, когда проблема в версии, загрузке расширения или настройке запуска.
Встраивание в сценарный авторинг
Перед написанием .feature по новой форме сначала проведи MCP-исследование:
- Открой раздел/команду через
manage_command_interfaceили прямую навигацию. - Получи
get_active_window_dataиget_form_analysis. - Сделай визуальный PNG формы по
va-visual-checkи проверь его поform-visual-requirements. - Для формы объекта получи
get_object_attributesв режимах реквизитов шапки и табличных частей. - При необходимости получи справочные данные через
get_table_data, чтобы выбирать существующие валидные значения. - По результатам зафиксируй точные команды, имена элементов, обязательные поля, условную видимость/доступность, визуальные замечания и порядок заполнения в контексте сценария.
- Только после этого пиши Gherkin-шаги и подсценарии.
Ручное заполнение формы перед сценарием (MUST)
Перед написанием НОВОГО сценария по документу агент сначала заполняет форму через Vanessa/TestClient, сверяясь с реальным составом формы на каждом шаге. Платформенный TestClient MCP допустим только для действия, которого VA MCP принципиально не предоставляет, с записью причины в контекст..featureпишется только ПОСЛЕ успешного заполнения через VA/TestClient. Web-клиент допустим только для браузерных функций, которых VA MCP принципиально не поддерживает.
| Требование | Описание | |
|---|---|---|
| Снимок после каждого поля | После изменения каждого поля заново снимать состав формы (get_form_analysis, get_active_window_data, чтение элемента/таблицы): значение поля меняет видимость, доступность и обязательность других полей (обработчики ПриИзменении). Визуальный PNG делай по va-visual-check на ключевых состояниях формы и обязательно для итоговой UI/UX-приёмки. Полный набор обязательных полей выясняется итеративно, не угадывается заранее | |
| Изучить Подсказку и справочные данные | До заполнения прочитать Help/подсказку документа и справочные данные — понять сценарии работы и порядок заполнения. Могут быть пусты, но у типовых объектов часто заполнены | |
| Все ключевые поля шапки | Заполнять по смысловой оценке назначения документа (Организация, Контрагент, Соглашение, Склад и т.п. — то, что требует смысл документа) | |
| Обязательные табличные части | Заполнять обязательные ТЧ (обычно товары / по смыслу документа) хотя бы несколькими строками; проверять, что все поля строк заполнены | |
| Полосы прокрутки | При визуальном анализе помнить: форма и ТЧ могут иметь полосы прокрутки, скрывающие часть полей — прокручивать, чтобы увидеть все элементы, а не только видимую область | |
| Переиспользуемые «кубики» | Сценарии заполнения оформлять как переиспользуемые подсценарии (@exportscenarios), чтобы другие тесты с тем же документом собирались из них как из кубиков конструктора. Один документ → может иметь несколько сценариев заполнения | |
| Запись и проведение | При ручном прогоне документ записать и провести (если этого требует смысл теста) — убедиться, что заполнение реально проходит, а не только выглядит полным | |
| Анализ ошибок заполнения | Запись/проведение могут дать ошибки — всплывающие сообщения в нижней части экрана (могут иметь собственную полосу прокрутки — прокручивать и читать все). Каждую разобрать, скорректировать заполнение и повторить, пока документ не запишется/проведётся чисто | |
| Порядок | Сначала успешное ручное заполнение со сверкой состава, запись и проведение документа и устранение всплывающих ошибок → затем запись .feature |
Анатомия feature-файла
# language: ru# encoding: utf-8# Задача: task-103 — Оформление заказа клиента через портфель@task-103 @тег-фичиФункциональность: Краткое названиеКак <роль пользователя>Я хочу <что сделать>Чтобы <бизнес-польза>Контекст:Дано Я запускаю тест-клиент для пользователя "Логин" с паролем "Пароль" или подключаю уже существующийСценарий: Название сценарияКогда <действие>И <следующее действие>Тогда <ожидаемый результат>
Контекст:выполняется перед каждым сценарием файла.- Ключевые слова шагов:
Дано,Когда,Тогда,И,Затем— взаимозаменяемы синтаксически. - Строки — в апострофах или кавычках; спецсимволы:
\',\",\\. Структура сценария:+Примеры:— запускает сценарий по каждой строке таблицы параметров.@treeв заголовке — включает Turbo Gherkin: отступы Tab задают дерево шагов (пробелы недопустимы!).@exportscenarios— делает сценарий доступным как подсценарий из другого feature-файла.
Пользовательский контекст
MUST: каждый сценарий выполняется под конкретным бизнес-пользователем, а не под admin/AgentAI. Исключение — только если проверяемая функция доступна исключительно администратору.
Как определить пользователя:
- Указан в описании задачи → использовать его.
- Не указан → спросить у человека до написания сценария.
Один пользователь (в секции Контекст:):
Дано Я запускаю тест-клиент для пользователя "SalesManager" с паролем "123" или подключаю уже существующий
Несколько пользователей (в теле сценария — именованные TestClient):
И я подключаю TestClient "Менеджер" логин "SalesManager" пароль "123"И я подключаю TestClient "Руководитель" логин "Director" пароль "456"И я активизирую TestClient "Менеджер"# ... шаги от имени менеджера ...И я активизирую TestClient "Руководитель"# ... шаги от имени руководителя ...И я закрываю TestClient "Менеджер"И я закрываю TestClient "Руководитель"
Пароль — plain text в feature-файле. Тестовые пользователи должны иметь простой или пустой пароль (пароль "").
Двухсессийный сплит (MUST)
.feature-файл логически делится на две части:
- Setup / инфраструктура — выполняется под техническим пользователем (
AgentAIв этом проекте): подготовка тестовых данных (создание документов, элементов справочников, записей регистров), шагиVAExtension (Расширение), BSL-фикстуры изvanessa-tests/support/, всё что требует технических ролей вне нормального доступа бизнес-пользователя. - Бизнес-флоу (верификация) — выполняется под конкретным бизнес-пользователем (например
Gavrilova Nataliaдля OC-23400): только шаги, проверяющие пользовательское поведение под тестом. Бизнес-пользователь НЕ должен получать технические роли (например роли изVAExtension.cfe) лишь ради прохождения шага.
Переключение сессий:
И я закрываю сеанс TESTCLIENT
или
И я закрываю TestClient "<имя>"
после чего открывается новая сессия:
Дано я подключаю TestClient "<роль>" логин "<пользователь>" пароль "<пароль>"
Обоснование (Infostart id=249957, id=249958): если бизнес-флоу выполняется с полными правами, тест перестаёт проверять реальные ролевые ограничения и даёт ложное ощущение правильности. Выдача бизнес-пользователю технических ролей ради удовлетворения инфраструктурного шага — это тот же антипаттерн в другой форме.
Антипаттерн: помещать шаги (Расширение) / фикстуры в сессию бизнес-пользователя, а потом «починить» падение выдачей ему технических ролей. Вместо этого — переместить шаг в блок setup под техническим пользователем.
Поиск шагов
Библиотека: /opt/onescript/2.0.0/lib/add/features/libraries/
| Категория | Файл библиотеки | |
|---|---|---|
| Интерфейс, поля, кнопки, закладки | UITestRunner/РаботаСИнтерфейсом.feature | |
| Таблицы (ТЧ) | UITestRunner/РаботаСТаблицами.feature | |
| Состояние элементов формы | UITestRunner/СостояниеЭлементаФормы.feature | |
| Флаги / переключатели | UITestRunner/РаботаСФлагами.feature | |
| Сообщения пользователю | UITestRunner/РаботаСОкномСообщений.feature | |
| Данные в БД, справочники | Данные/ЗапросыКБД.feature | |
| Один / несколько TestClient | UITestRunner/ОткрытьTestClient.feature, UITestRunner/ПодключениеНесколькихКлиентовТестирования.feature | |
| Условия, переменные | Условие/Условие.feature | |
| Пауза | Пауза/СделатьПаузу.feature |
Шпаргалка частых шагов с синтаксисом → references/steps-cheatsheet.md.
Полная библиотека: references/steps.json (1116 шагов). Не читай целиком — используй grep для поиска по ключевым словам из задачи. Структура каждой записи:
ИмяШага— пример вызова с параметрамиОписаниеШага— что делает шагПолныйТипШага— категория (UI, Прочее, Файлы, Переменные и т.д.)
Теги
| Тег | Смысл | |
|---|---|---|
@task-<ID> | Привязка к задаче трекера (MUST, vanessa-scenario-policy) | |
@draft / @Draft@ | Исключить из прогона при запуске каталога | |
@manual-data | Сценарий зависит от данных, созданных вручную | |
@regression | Регрессионный тест | |
@ui | UI-тест через TestClient | |
@tree | Turbo Gherkin: отступы Tab = вложенность (пробелы запрещены) | |
@exportscenarios | Сценарий вызывается как подсценарий из другого файла | |
@IgnoreOnXxx | Системный: пропустить в указанном окружении |
Антипаттерны
| Антипаттерн | Последствие | |
|---|---|---|
| Сценарий под admin без обоснования | Не проверяет реальные права пользователя | |
| Шаг проверяет внутреннюю деталь (вызов метода, прямой запрос в БД) | Хрупкий: нет наблюдаемого UI-поведения | |
| Изобретённый шаг вместо поиска в библиотеке | Не резолвится при запуске | |
| Длинный сценарий (7+ действий) | Сложно локализовать падение | |
| Подготовка данных смешана с проверкой | Нарушает Given/Then разделение |
depends_on:
- framework/rules/vanessa-scenario-policy/SKILL.md
- framework/rules/vanessa-test-isolation-policy/SKILL.md
- framework/rules/vanessa-tests-location/SKILL.md
- framework/rules/vanessa-run-loop/SKILL.md
- framework/skills/tool-usage/vanessa/vanessa-diagnostics/SKILL.md
- framework/skills/tool-usage/platform-data/xml-generation/SKILL.md
requires:
- tools