Использование 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 мы можем получить покрытие кода следующим образом.

Чтобы получить покрытие для полного модуля ->

  1. Запуск покрытия для полного модуля проекта. Выполните следующую команду ->
      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
  1. Затем выполните следующую команду из каталога родительского проекта, чтобы получить представление html. Html отчет формируется в указанном нами формате. Из этого открытого, чтобы увидеть отчет о покрытии.

bazel-outкаталог обычно создается в родительском каталоге проекта (например, где bazel WORKSPACEфайл есть)

Чтобы получить покрытие для конкретных ИТ/тестов в модуле ->

  1. Выполнение покрытия для конкретных ИТ/тестов в модуле. Запустите следующую команду из каталога проекта/подпроекта ->
      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
  1. Затем выполните следующую команду из каталога родительского проекта, чтобы получить представление html. HTML-отчет формируется в output-directory-nameмы уточнили. От этого открытого index.htmlчтобы увидеть отчет о покрытии.
      genhtml -o <output-directory-name> bazel-out/_coverage/_coverage_report.dat
Другие вопросы по тегам