Генерация тестов YAxUnit и Vanessa для 1С через AI

·
  • yaxunit
  • vanessa
  • тесты
  • 1c

MCP для YAxUnit и Vanessa: как mcp-1c-pro анализирует BSL-модули и генерирует заготовки тестов 1С через AI. Команды, флаги, режим MCP-сервера, границы.

Писать тесты для типовой или доработанной конфигурации руками долго: на каждую экспортную процедуру нужен модуль, на каждый сценарий формы отдельный .feature. Профессиональная редакция MCP-1C снимает с этого рутинную часть: команда --build-testgen читает BSL-модули конфигурации и формирует заготовки тестов YAxUnit и Vanessa. Заготовки строятся по экспортированным процедурам и функциям выгруженной конфигурации.

Сразу про рамку: на выходе скелеты (scaffold-тесты), а не готовый к коммиту набор. Их нужно дорабатывать руками.

Что генерируется

--build-testgen анализирует BSL-модули конфигурации и формирует три вещи:

  • scaffold-тесты YAxUnit для экспортированных процедур и функций (правила TG001-TG019);
  • Vanessa .feature сценарии для taint-находок с критичностью CVSS не ниже Medium (правило TG020);
  • файл manifest.json с итогами прогона.

Оба фреймворка открытые. YAxUnit это инструмент юнит-тестирования для платформы 1С:Предприятие от BIA Technologies: тесты пишутся на встроенном языке (BSL) в модулях, есть движок прогона, утверждения, плагин для 1С:EDT и подсистема моков. Репозиторий github.com/bia-technologies/yaxunit, лицензия Apache License, Version 2.0. Vanessa Automation это BDD-инструмент для 1С:Предприятие на сценариях Gherkin в .feature файлах, с тестированием управляемых форм и HTML-отчётами в формате Allure. Репозиторий github.com/Pr-Mex/vanessa-automation, лицензия BSD 3-Clause.

Разделение зон ответственности отражает то, под что заточен каждый фреймворк. YAxUnit покрывает уровень кода: на каждую экспортную процедуру или функцию своя заготовка теста. Vanessa здесь привязана к одному правилу TG020 и эмитирует регрессии по taint-находкам, то есть по местам, где данные из недоверенного источника доходят до опасной операции.

Два режима запуска

Функция работает в двух режимах.

  1. Разовая генерация: --build-testgen запускает прогон и выходит. Удобно для CI или для первичного наполнения каталога тестов.
  2. Режим MCP-сервера: --enable-testgen оставляет инструмент доступным для интерактивных запросов от AI-ассистента (Claude или любой другой MCP-клиент).

Разовый прогон выглядит так:

mcp-1c-pro --build-testgen \
  --dump /path/to/dump \
  --testgen-framework auto \
  --testgen-output ./tests

Флаг --testgen-framework принимает yaxunit, vanessa, both или auto. При auto фреймворк выбирается по типу объекта. Каталог записи по умолчанию <dump>/.testgen-output, переопределяется через --testgen-output. Параллельность по умолчанию min(CPU, 8), регулируется --testgen-concurrency.

Для генерации нужен флаг --dump (выгрузка конфигурации в файлы) плюс одно из двух: API-ключ LLM-провайдера для обогащения результатов либо флаг --testgen-llm-disable. С --testgen-llm-disable генерируются только скелеты YAxUnit и Vanessa без LLM-комментариев, и это работает без API-ключей.

Подключение к AI-клиенту

В режиме MCP-сервера транспорт по умолчанию stdio: клиент запускает бинарник mcp-1c-pro и общается с ним через stdin и stdout, без отдельных портов и HTTP-серверов. Минимальный конфиг с включённой генерацией тестов:

{
  "mcpServers": {
    "mcp-1c": {
      "command": "/usr/local/bin/mcp-1c-pro",
      "args": [
        "--dump", "/path/to/dump",
        "--enable-testgen"
      ],
      "env": {
        "YANDEXGPT_API_KEY": "AQVN...",
        "YANDEXGPT_FOLDER_ID": "b1g..."
      }
    }
  }
}

Ключи провайдера задаются в секции env. На сайте показан YandexGPT (YANDEXGPT_API_KEY, YANDEXGPT_FOLDER_ID); поддерживается также GigaChat. Если LLM-обогащение не нужно, ключи можно не задавать, а в args добавить "--testgen-llm-disable" и получать только скелеты. Полный перечень переменных окружения и провайдеров смотрите в разделе настройки LLM на странице документации.

В режиме MCP-сервера доступны четыре действия, все в Профессиональной редакции:

Действие Что делает
generate генерация тестов по всей кодовой базе, нужен dump_path
summary сводка: число тестов, покрытие, ошибки
findings список сгенерированных тестов с фильтрами
manifest прочитать manifest.json последней генерации

Флаги настройки

Флаг Назначение
--testgen-framework yaxunit, vanessa, both или auto
--testgen-rules подмножество правил TG001..TG020 через запятую
--testgen-output каталог записи тестов (по умолчанию <dump>/.testgen-output)
--testgen-concurrency число воркеров (по умолчанию min(CPU, 8))
--testgen-llm-disable только скелеты, без обращения к LLM
--testgen-taint-regressions Vanessa-регрессии по taint-находкам (TG020)
--testgen-include-bsp генерировать тесты для модулей БСП/SSL
--testgen-vendor-baseline фильтровать стандартные модули по vendor-baseline дампу
--testgen-emit-sarif отчёт SARIF 2.1.0
--testgen-audit-trail audit log (по умолчанию <dump>/.testgen-audit.log)

Флагом --testgen-rules можно сузить прогон до нужного диапазона правил TG001..TG020. Стандартные модули типовых конфигураций можно отсечь через --testgen-vendor-baseline, чтобы тесты генерировались только на вашу доработку, а не на весь поставляемый код.

Есть и обратная связь с генерацией обработок: команда --epfgen-emit-tests эмитирует sibling YAxUnit-тесты через тот же testgen API, так что заготовку обработки и заготовку теста к ней можно получить за один проход.

Границы

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

  • На выходе заготовки. Термины в документации это scaffold и skeleton: каркас теста с местами под утверждения, а не финальный тест. Логику проверок и подготовку данных дописывает разработчик.
  • TG020 единственное правило, явно привязанное к Vanessa и taint-находкам. Остальные правила TG001-TG019 относятся к YAxUnit.
  • Расшифровка каждого правила по отдельности в публичных материалах не приводится: известен диапазон и общий смысл (скелеты для экспортированных процедур и функций), но не пословное содержание конкретного TG-правила.
  • Без LLM-ключа генерируются только скелеты без комментариев. Обогащение текстом подключается отдельно через провайдера.

Где это в линейке

Генерация тестов это возможность Профессиональной редакции. Она входит в список четырёх функций, которые используют внешние LLM API для обогащения результатов. Команда --build-testgen доступна в бинарнике mcp-1c-pro, поэтому отдельный исполняемый файл под генерацию тестов не нужен. Сравнение редакций и условия смотрите на странице тарифов.