Сбор покрытия тестами
Команды test xunit, test yaxunit, test vanessa умеют собирать покрытие кода тестами: какие строки модулей конфигурации и расширений выполнились во время прогона. Результат - XML-отчёт в формате genericCoverage (SonarQube), Cobertura или Clover.
Сбор включается одной опцией --coverage-report - путём к файлу отчёта. Остальное работает по умолчанию: сервер отладки dbgs поднимается сам, исходники ищутся в ./src, процент покрытия считается автоматически.
vrunner test yaxunit --ibconnection /F./ib --coverage-report ./build/coverage.xmlПример вывода в консоль:
Включён сбор покрытия, отчёт: 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 | Не рассчитывать покрываемые строки и процент покрытия |
Покрытие несовместимо с --no-wait: клиент 1С должен завершиться до сбора данных, иначе команда завершается ошибкой.
Форматы отчёта
--coverage-format | Формат | Назначение |
|---|---|---|
generic (по умолчанию) | genericCoverage XML | SonarQube: свойство sonar.coverageReportPaths |
cobertura | Cobertura XML | Jenkins, GitLab CI и др. |
clover | Clover 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):
{
"coverage": {
"lines-tool": {
"home": "D:/tools/lines-to-cover"
}
}
}| Ключ | По умолчанию | Описание |
|---|---|---|
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>/vanessa-runner/tools | Каталог кеша загруженных утилит |
Примеры
# Покрытие конфигурации из ./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