Использование Bazel для создания отчета о покрытии
Я использую команду genhtml для генерации отчета о покрытии html из сгенерированного Bazel файла cover.dat:
genhtml bazel-testlogs/path/to/TestTarget/coverage.dat --output-directory coverage
Проблема с использованием genhtml заключается в том, что я должен предоставить пути к файлам cover.dat (которые создаются в bazel-testlogs /..). Можно ли получить эти файлы cover.dat как выходные данные из другого правила?
Я хотел бы не вызывать команду genthml напрямую, но Bazel должен обрабатывать все.
3 ответа
Я не смог найти способ получить файлы cover.dat как вывод правила bazel. Однако я смог обернуть все расположения всех файлов.dat как srcs в файловую группу в каталоге WORKSPACE:
filegroup(
name = "coverage_files",
srcs = glob(["bazel-out/**/coverage.dat"]),
)
а затем используйте эту файловую группу в пользовательском.bzl-правиле, которое обертывает команду genthml, чтобы сгенерировать отчет о покрытии html. Так что теперь мне нужно только позвонить
bazel coverage //path/... --instrumentation_filter=/path[/:]
Команда для генерации файлов cover.dat, генерации html-отчета и архивирования. Таким образом, Базель обрабатывает все.
Базель добавил поддержку покрытия C++ (хотя я не смог найти много документации для него).
Мне удалось создать комбинированный файл
bazel coverage -s \
--instrument_test_targets \
--experimental_cc_coverage \
--combined_report=lcov \
--coverage_report_generator=@bazel_tools//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:Main \
//...
Файл покрытия добавляется в bazel-out/_coverage/_coverage_report.dat
Для проекта на основе Java мы можем получить покрытие кода следующим образом.
Чтобы получить покрытие для полного модуля ->
- Запуск покрытия для полного модуля проекта. Выполните следующую команду ->
bazel coverage ... --compilation_mode=dbg --subcommands --announce_rc --verbose_failures --jobs=auto --sandbox_debug --build_runfile_links --combined_report=lcov --coverage_report_generator=@bazel_tools//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:Main
- Затем выполните следующую команду из каталога родительского проекта, чтобы получить представление html. Html отчет формируется в указанном нами формате. Из этого открытого, чтобы увидеть отчет о покрытии.
bazel-out
каталог обычно создается в родительском каталоге проекта (например, где bazel
WORKSPACE
файл есть)
Чтобы получить покрытие для конкретных ИТ/тестов в модуле ->
- Выполнение покрытия для конкретных ИТ/тестов в модуле. Запустите следующую команду из каталога проекта/подпроекта ->
bazel coverage <class-name-of-Test-or-IT> --compilation_mode=dbg --subcommands --announce_rc --verbose_failures --jobs=auto --sandbox_debug --build_runfile_links --combined_report=lcov --coverage_report_generator=@bazel_tools//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:Main
- Затем выполните следующую команду из каталога родительского проекта, чтобы получить представление html. HTML-отчет формируется в
output-directory-name
мы уточнили. От этого открытогоindex.html
чтобы увидеть отчет о покрытии.
genhtml -o <output-directory-name> bazel-out/_coverage/_coverage_report.dat