Skip to content

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

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

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

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

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

Включён сбор покрытия, отчёт: 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Не рассчитывать покрываемые строки и процент покрытия

Покрытие несовместимо с --no-wait: клиент 1С должен завершиться до сбора данных, иначе команда завершается ошибкой.

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

--coverage-formatФорматНазначение
generic (по умолчанию)genericCoverage XMLSonarQube: свойство sonar.coverageReportPaths
coberturaCobertura XMLJenkins, GitLab CI и др.
cloverClover XML

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

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

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

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

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

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

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

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

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

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

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

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

Сервер отладки отдаёт только исполненные строки. Знаменатель - все покрываемые строки модулей - считает утилита lines-to-cover: самодостаточный бандл со своей JRE, устанавливать Java не нужно. При первом запуске покрытия утилита скачивается с GitHub в кеш и переиспользуется дальше; расчёт идёт в фоне параллельно с тестами. Непокрытые строки попадают в отчёт, в консоль выводится Покрытие строк: N% (покрыто X из Y).

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

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

Если автозагрузка недоступна (нет доступа в интернет), скачайте релиз утилиты, распакуйте в каталог с подпапками bin/ и lib/ и укажите его в autumn-properties.json (секция coverage верхнего уровня, вне vrunner):

json
{
  "coverage": {
    "lines-tool": {
      "home": "D:/tools/lines-to-cover"
    }
  }
}
КлючПо умолчаниюОписание
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>/vanessa-runner/toolsКаталог кеша загруженных утилит

Примеры

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