如何在Bazel Java项目中设置整体代码覆盖率阈值
Bazel覆盖率阈值配置说明
Bazel 原生没有内置可直接配置整体覆盖率阈值的flag,你当前使用的默认覆盖率报告生成器仅负责汇总输出lcov格式的覆盖率数据,不会自带阈值校验逻辑,可通过以下两种方式实现阈值校验、不满足时抛错/警告的需求:
方案1:复用genhtml自带的阈值能力(成本最低)
你已经在使用genhtml生成HTML格式报告,该工具原生支持覆盖率阈值校验,不需要额外开发:
- 行覆盖率阈值:添加参数
--fail-under-lines <0-100的数值>,例如要求行覆盖率不低于80%就传--fail-under-lines 80 - 分支覆盖率阈值:添加参数
--fail-under-branches <0-100的数值>,如果要启用分支覆盖率统计,需要额外加--rc lcov_branch_coverage=1 - 函数覆盖率阈值:添加参数
--fail-under-functions <0-100的数值>
配置后如果实际覆盖率低于设定阈值,genhtml会直接返回非0退出码,在本地执行或者CI流水线中都会直接判定为执行失败,满足自动抛错的要求。如果只需要打印警告、不需要中断流程,追加--keep-going参数即可。
修改后的命令示例:
# 要求行覆盖率≥80%、分支覆盖率≥70%,不满足直接报错退出 genhtml -o <output-directory-name> bazel-out/_coverage/_coverage_report.dat \ --fail-under-lines 80 \ --fail-under-branches 70
方案2:自定义脚本校验(适配复杂规则)
如果需要更灵活的校验规则(比如不同模块设置不同阈值、排除指定生成代码/测试代码的覆盖率统计),可以在lcov报告生成后,写简单脚本解析lcov格式的_coverage_report.dat文件,自行计算整体覆盖率数值,和预设阈值比对后,不满足要求就输出警告/返回非0退出码终止流程。
内容的提问来源于stack exchange,提问作者rishi007bansod
相关产品推荐
相关产品推荐

