使用Bazel生成覆盖率报告

时间:2017-09-27 11:54:18

标签: code-coverage bazel

我正在使用genhtml命令从Bazel生成的coverage.dat文件生成html覆盖率报告:

genhtml bazel-testlogs/path/to/TestTarget/coverage.dat --output-directory coverage

使用genhtml的问题是我必须提供coverage.dat文件的路径(在bazel-testlogs / ..中生成)是否可以将这些coverage.dat文件作为另一条规则的输出获取?

我不想直接调用genthml命令,但让Bazel处理所有事情。

2 个答案:

答案 0 :(得分:8)

我无法找到将coverage.dat文件作为bazel规则输出的方法。但是,我能够将所有.dat文件的所有位置包装为srcs到WORKSPACE目录中的文件组:

filegroup(
    name = "coverage_files",
    srcs = glob(["bazel-out/**/coverage.dat"]),
)

然后在自定义.bzl规则中使用该文件组,该规则包装genthml命令以生成html覆盖率报告。所以现在我只需要打电话

bazel coverage //path/... --instrumentation_filter=/path[/:]

命令生成coverage.dat文件,生成html报告并压缩它。因此,bazel处理一切。

答案 1 :(得分:2)

Bazel添加了对C++ coverage的支持(尽管我找不到很多文档)。

我能够使用以下方式生成合并的coverage.dat文件

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