Skip to content

Сбор покрытия тестами

Команды группы testtest xunit, test yaxunit, test vanessa — умеют собирать покрытие кода тестами: какие строки модулей конфигурации и расширений выполнились во время прогона. Результат сохраняется в XML-отчёт (genericCoverage, Cobertura или Clover), пригодный для SonarQube и других систем анализа.

Сбор включается единственной опцией — --coverage-report (путь к файлу отчёта). Всё остальное имеет разумные значения по умолчанию: сервер отладки поднимается автоматически, исходники ищутся в ./src, знаменатель для процента покрытия считается сам.

bash
vrunner test yaxunit --ibconnection /F./ib --coverage-report ./build/coverage.xml

Как это работает

Покрытие снимается по итогам прогона тестов через штатный сервер отладки 1С (dbgs):

  1. Поднимается сервер отладки dbgs (либо используется уже запущенный — см. Сервер отладки).
  2. Открывается сессия сбора нативной компонентой coveragebsl, тесты запускаются в 1С:Предприятии с подключённым отладчиком.
  3. Параллельно с прогоном во фоновом процессе считается знаменатель — все покрываемые (исполняемые) строки исходников утилитой lines-to-cover (можно отключить).
  4. После завершения тестов данные забираются, модули 1С сопоставляются с файлами исходников (XML-дамп Конфигуратора или 1С:EDT), исполненные строки объединяются с покрываемыми.
  5. Формируется файл отчёта в выбранном формате, а в консоль выводится процент покрытия.

Компоненты coverage и coveragebsl входят в поставку vanessa-runner и подключаются автоматически только при включённом покрытии — на обычные команды test они не влияют.

Пример вывода в консоль:

Включён сбор покрытия, отчёт: build/coverage.xml
...
Покрытие строк: 78% (покрыто 39 из 50)
Отчёт покрытия сформирован: build/coverage.xml

Опции

Опции покрытия одинаковы для всех трёх подкоманд test.

ОпцияПеременная окруженияОписание
--coverage-reportVRUNNER_COVERAGE_REPORTПуть к файлу отчёта. Если задан — покрытие собирается (единственный включатель)
--coverage-formatVRUNNER_COVERAGE_FORMATФормат отчёта: generic (по умолчанию), cobertura, clover
--coverage-srcVRUNNER_COVERAGE_SRCКаталог исходников конфигурации для сопоставления модулей (по умолчанию ./src, рекурсивный поиск)
--coverage-ext-Каталог исходников расширения для покрытия. Можно указать несколько раз
--coverage-serverVRUNNER_COVERAGE_SERVERСервер отладки [хост:]порт. Пусто/порт — поднять свой локально; хост:порт — подключиться к уже запущенному
--coverage-dbgsVRUNNER_COVERAGE_DBGSПуть к исполняемому файлу сервера отладки dbgs (по умолчанию определяется по версии платформы)
--coverage-aliasVRUNNER_COVERAGE_ALIASИмя (алиас) ИБ для сессии отладки (по умолчанию определяется из строки подключения)
--coverage-debug-pwdVRUNNER_COVERAGE_DEBUG_PWDПароль сервера отладки (если он защищён паролем)
--coverage-skip-linesVRUNNER_COVERAGE_SKIP_LINESНе рассчитывать покрываемые строки и процент покрытия (собрать только исполненные строки)

Покрытие работает поверх обычного запуска теста, поэтому доступны все опции подключения и платформы соответствующей подкоманды (--ibconnection, --v8version, --ibcmd и т. д.). Подробнее: Подключение к базе данных →.

Форматы отчёта

Опция --coverage-format задаёт формат XML-отчёта:

ФорматЗначениеНазначение
genericCoveragegeneric (по умолчанию)Импорт в SonarQube (sonar.coverageReportPaths)
CoberturacoberturaCobertura XML (Jenkins, GitLab CI и др.)
ClovercloverClover XML

Каталог для файла отчёта создаётся автоматически, если его ещё нет.

Сервер отладки

Покрытие снимается через сервер отладки dbgs, входящий в поставку платформы 1С. Поведение задаёт опция --coverage-server [хост:]порт:

  • не задана или указан только порт (1550, :9000) — vanessa-runner поднимает свой сервер отладки локально. Если порт не указан — берётся 1550; если он занят, порт подбирается автоматически. Если порт указан явно и занят — команда завершается ошибкой;
  • указан хост (server:1550, server) — vanessa-runner подключается к уже запущенному серверу отладки, в том числе на другой машине.

Путь к dbgs определяется автоматически по версии платформы; переопределить его можно опцией --coverage-dbgs.

Клиент-серверные базы

Для серверной ИБ код тестов исполняется в процессе кластера (rphost), а не в клиенте. Чтобы собрать покрытие серверного кода, сервер отладки должен быть доступен кластеру, а на кластере должна быть разрешена отладка (настройка кластера вне контроля команды test). Обычно сервер отладки поднимают на машине кластера и подключаются к нему через --coverage-server <хост>:<порт>. Полнота покрытия серверных модулей зависит от этих настроек — это общее ограничение всех инструментов покрытия 1С.

Сопоставление с исходниками

Чтобы перевести «модуль 1С → строки» в «файл исходника → строки», нужны исходники — в формате XML-дампа Конфигуратора или 1С:EDT (формат определяется автоматически):

  • конфигурация — каталог из --coverage-src (по умолчанию ./src, поиск рекурсивный);
  • расширения — обнаруживаются в том же каталоге, а также задаются явно через --coverage-ext (опцию можно повторять для нескольких расширений).

Если исходники не найдены или ни один покрытый модуль не сопоставлен с файлом, отчёт не формируется, а в лог выводится предупреждение с подсказкой проверить --coverage-src.

Процент покрытия

coveragebsl даёт только исполненные строки. Чтобы посчитать процент, нужен знаменатель — все покрываемые (исполняемые) строки модулей. Их считает внешняя утилита lines-to-cover (репозиторий Segate-ekb/Lines_to_cover_1c): самодостаточный бандл со своей JRE — устанавливать Java не нужно.

Утилита скачивается автоматически при первом запуске покрытия (в кеш) и переиспользуется в дальнейшем. Расчёт идёт в фоне параллельно с прогоном тестов; в итоге строки, прочитанные утилитой, но не исполненные, попадают в отчёт как непокрытые (covered="false"), а в консоль выводится строка Покрытие строк: N% (покрыто X из Y).

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

Установка lines-to-cover вручную

Если автозагрузка недоступна (нет доступа в интернет, корпоративный прокси), скачайте релиз утилиты вручную, распакуйте так, чтобы получился каталог с подпапками bin/ и lib/, и укажите его настройкой. Настройки задаются в файле настроек или переменными окружения (см. Файл настроек):

НастройкаПо умолчаниюОписание
coverage.lines-tool.home-Путь к готовому каталогу образа утилиты (bin/, lib/). Задан — загрузка не выполняется
coverage.lines-tool.version0.1.0Версия утилиты для автозагрузки
coverage.lines-tool.base-urlGitHub ReleasesБазовый URL для загрузки релиза
coverage.lines-tool.tools-dirкеш tempКаталог кеша установленных утилит

Альтернатива — просто отключить процент флагом --coverage-skip-lines.

Ограничения

  • Несовместимо с --no-wait. Клиент 1С должен завершиться до сбора данных, поэтому при --coverage-report вместе с --no-wait команда завершается ошибкой.
  • Серверный код покрывается только при разрешённой отладке на кластере (см. Клиент-серверные базы).

Примеры

bash
# Простейший запуск: покрытие конфигурации из ./src
vrunner test yaxunit \
  --ibconnection /F./ib \
  --coverage-report ./build/coverage.xml

# Покрытие конфигурации и расширения с тестами, формат Cobertura
vrunner test yaxunit \
  --ibconnection /F./ib \
  --ext МоиТесты \
  --coverage-report ./build/coverage.xml \
  --coverage-format cobertura \
  --coverage-src ./src \
  --coverage-ext ./tests-ext/src

# Только исполненные строки, без расчёта процента (без загрузки lines-to-cover)
vrunner test xunit \
  --ibconnection /F./ib \
  --coverage-report ./build/coverage.xml \
  --coverage-skip-lines \
  ./tests

# Клиент-серверная ИБ: подключиться к серверу отладки на машине кластера
vrunner test yaxunit \
  --ibconnection "/S1c-server\MyBase" \
  --coverage-report ./build/coverage.xml \
  --coverage-server 1c-server:1550

Интеграция с SonarQube

Формат по умолчанию (generic) — это genericCoverage. Укажите путь к отчёту в свойстве sonar.coverageReportPaths анализатора SonarQube, чтобы покрытие подтянулось в проект.