You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel中合并多轮C++测试生成的.dat覆盖率报告

合并多轮Bazel C++覆盖率报告的步骤

因为你没法拆分测试,只能用同一测试跑不同数据集,要合并各轮的.dat覆盖率文件,按以下步骤来:

1. 分批次跑测试并备份覆盖率文件

每次针对一个数据集跑Bazel coverage,跑完立刻把生成的覆盖率文件备份(避免被下一轮覆盖):

  • 跑测试时通过外部参数传入数据集(比如环境变量或测试命令行参数,根据你的测试实现调整):
    # 示例:用环境变量传数据集
    TEST_DATASET=dataset1 bazel coverage //tests --instrumentation_filter="^..."
    
  • 复制Bazel生成的默认覆盖率文件到单独命名的文件:
    cp bazel-out/_coverage/_coverage_report.dat coverage_dataset1.dat
    
  • 重复上述步骤,跑完所有数据集,得到coverage_dataset1.dat、coverage_dataset2.dat等多个文件。

2. 用lcov合并覆盖率文件

Bazel生成的.dat是lcov格式,直接用lcov的合并命令处理:

lcov --add-tracefile coverage_dataset1.dat --add-tracefile coverage_dataset2.dat --output-file combined_coverage.dat

如果有更多数据集,继续添加--add-tracefile参数即可。lcov会自动累加各轮的覆盖统计,不会重复计算。

3. 生成合并后的HTML报告

用genhtml处理合并后的.dat文件,生成可视化报告:

genhtml combined_coverage.dat --output-directory combined_coverage_report

打开combined_coverage_report/index.html就能看到所有数据集跑过的总覆盖率。

注意事项

  • 确保安装了lcov工具(大部分Linux发行版可以通过包管理器安装,比如apt install lcov)。
  • 每次跑测试前,不需要额外清理Bazel缓存,但一定要及时备份覆盖率文件,否则下一轮会覆盖掉之前的结果。
  • 如果你的测试是通过命令行参数接收数据集,跑coverage时要把参数放在--后面,比如:
    bazel coverage //tests --instrumentation_filter="^..." -- --dataset=dataset1
    

内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:54:57