首页/开发/CI/CD 与发布速查/覆盖率阈值门禁
质量门禁与回滚51 条

覆盖率阈值门禁

为行覆盖、分支覆盖率设置通过线并接入流水线;阈值应基于当前基线渐进提高,关注增量与关键路径,而不是单看一个数字。

CI/CD 与发布速查开发更新于 2026-10-13

覆盖率阈值是什么

为覆盖率设通过线并接入流水线:行覆盖、分支覆盖、函数覆盖率任一或组合达线,才允许合并或发布。阈值应基于当前基线渐进提高,关注增量代码与关键模块,而不是一次拉到远期目标;覆盖率是过程指标,为数字补无断言测试反而增加维护成本。

基本信息

常见指标行覆盖率、分支覆盖率、函数覆盖率
设置方式项目整体阈值或增量代码阈值
数据来源JaCoCo、coverage.py、Istanbul 等报告
渐进策略基线之上逐步上调,例如每季度加两个百分点
展示报告接入合并请求页面,显示覆盖率变化

典型使用场景

  • 合并门禁:新增代码覆盖率低于线不放行。
  • 整体警戒:总体覆盖率不得低于当前记录基线。
  • 关键模块加严:核心路径单独设更高要求。
  • 趋势调整:按季度把基线向上修正。
  • 报告归档:覆盖率数据随版本可追溯。

pytest 覆盖率阈值

pytest 覆盖率阈值
- name: Tests with coverage
  run: pytest --cov=app --cov-fail-under=80

JaCoCo 阈值规则片段

JaCoCo 阈值规则片段
<rule>
  <element>BUNDLE</element>
  <limits>
    <limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum></limit>
  </limits>
</rule>

指标与盲区

指标含义盲区
行覆盖率执行过的代码行比例有执行无断言也算
分支覆盖率条件分支走过比例复杂逻辑的真正重点
增量覆盖率新代码覆盖比例比总量更公平
覆盖率是过程指标:为数字补无断言的测试,反而增加维护成本。
报告格式要统一,JaCoCo、Cobertura、lcov 等标准格式平台才能解析,把覆盖率挂到合并请求上展示差异。
阈值别一次性定到远期目标:历史缺口会堵住所有人,先在基线附近设线再逐步抬高。
报告要能跳转定位:只看百分比不够,未覆盖的行与分支应能一键打开对应报告页面。
统计口径写进文档:排除哪些目录、合并哪些套件,团队按同一口径解读数字。

易错点

  • 一次性把阈值拉到远期目标:历史缺口无法通过,被迫绕过流程。
  • 只看总体覆盖率:核心模块未覆盖的路径被平均值掩盖。
  • 为数字补无断言测试:覆盖上升,缺陷防线没有实际提升。
  • 多套件报告没合并:各跑各的,真实覆盖率被低估或重复计算。
  • 阈值无人维护:长期停在低水平,约束力渐渐消失。
  • 忽略排除规则:生成代码与测试自身混入统计,数字被稀释。

数据来源与参考

  • pytest-cov 文档(--cov-fail-under)
  • JaCoCo 文档《Coverage counters and rules》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌