Сбор покрытия тестами
Команды группы test — test xunit, test yaxunit, test vanessa — умеют собирать покрытие кода тестами: какие строки модулей конфигурации и расширений выполнились во время прогона. Результат сохраняется в XML-отчёт (genericCoverage, Cobertura или Clover), пригодный для SonarQube и других систем анализа.
Сбор включается единственной опцией — --coverage-report (путь к файлу отчёта). Всё остальное имеет разумные значения по умолчанию: сервер отладки поднимается автоматически, исходники ищутся в ./src, знаменатель для процента покрытия считается сам.
vrunner test yaxunit --ibconnection /F./ib --coverage-report ./build/coverage.xmlКак это работает
Покрытие снимается по итогам прогона тестов через штатный сервер отладки 1С (dbgs):
- Поднимается сервер отладки
dbgs(либо используется уже запущенный — см. Сервер отладки). - Открывается сессия сбора нативной компонентой coveragebsl, тесты запускаются в 1С:Предприятии с подключённым отладчиком.
- Параллельно с прогоном во фоновом процессе считается знаменатель — все покрываемые (исполняемые) строки исходников утилитой lines-to-cover (можно отключить).
- После завершения тестов данные забираются, модули 1С сопоставляются с файлами исходников (XML-дамп Конфигуратора или 1С:EDT), исполненные строки объединяются с покрываемыми.
- Формируется файл отчёта в выбранном формате, а в консоль выводится процент покрытия.
Компоненты coverage и coveragebsl входят в поставку vanessa-runner и подключаются автоматически только при включённом покрытии — на обычные команды test они не влияют.
Пример вывода в консоль:
Включён сбор покрытия, отчёт: build/coverage.xml
...
Покрытие строк: 78% (покрыто 39 из 50)
Отчёт покрытия сформирован: build/coverage.xmlОпции
Опции покрытия одинаковы для всех трёх подкоманд test.
| Опция | Переменная окружения | Описание |
|---|---|---|
--coverage-report | VRUNNER_COVERAGE_REPORT | Путь к файлу отчёта. Если задан — покрытие собирается (единственный включатель) |
--coverage-format | VRUNNER_COVERAGE_FORMAT | Формат отчёта: generic (по умолчанию), cobertura, clover |
--coverage-src | VRUNNER_COVERAGE_SRC | Каталог исходников конфигурации для сопоставления модулей (по умолчанию ./src, рекурсивный поиск) |
--coverage-ext | - | Каталог исходников расширения для покрытия. Можно указать несколько раз |
--coverage-server | VRUNNER_COVERAGE_SERVER | Сервер отладки [хост:]порт. Пусто/порт — поднять свой локально; хост:порт — подключиться к уже запущенному |
--coverage-dbgs | VRUNNER_COVERAGE_DBGS | Путь к исполняемому файлу сервера отладки dbgs (по умолчанию определяется по версии платформы) |
--coverage-alias | VRUNNER_COVERAGE_ALIAS | Имя (алиас) ИБ для сессии отладки (по умолчанию определяется из строки подключения) |
--coverage-debug-pwd | VRUNNER_COVERAGE_DEBUG_PWD | Пароль сервера отладки (если он защищён паролем) |
--coverage-skip-lines | VRUNNER_COVERAGE_SKIP_LINES | Не рассчитывать покрываемые строки и процент покрытия (собрать только исполненные строки) |
Покрытие работает поверх обычного запуска теста, поэтому доступны все опции подключения и платформы соответствующей подкоманды (
--ibconnection,--v8version,--ibcmdи т. д.). Подробнее: Подключение к базе данных →.
Форматы отчёта
Опция --coverage-format задаёт формат XML-отчёта:
| Формат | Значение | Назначение |
|---|---|---|
| genericCoverage | generic (по умолчанию) | Импорт в SonarQube (sonar.coverageReportPaths) |
| Cobertura | cobertura | Cobertura XML (Jenkins, GitLab CI и др.) |
| Clover | clover | Clover 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.version | 0.1.0 | Версия утилиты для автозагрузки |
coverage.lines-tool.base-url | GitHub Releases | Базовый URL для загрузки релиза |
coverage.lines-tool.tools-dir | кеш temp | Каталог кеша установленных утилит |
Альтернатива — просто отключить процент флагом --coverage-skip-lines.
Ограничения
- Несовместимо с
--no-wait. Клиент 1С должен завершиться до сбора данных, поэтому при--coverage-reportвместе с--no-waitкоманда завершается ошибкой. - Серверный код покрывается только при разрешённой отладке на кластере (см. Клиент-серверные базы).
Примеры
# Простейший запуск: покрытие конфигурации из ./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, чтобы покрытие подтянулось в проект.
