代码覆盖率

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

配置代码覆盖率以跟踪和可视化您的源代码中有多少被测试覆盖。您可以:

  • 使用 coverage 关键字跟踪整体覆盖率指标和趋势。
  • 使用 artifacts:reports:coverage_report 关键字可视化逐行覆盖率。

配置覆盖率报告#

使用 coverage 关键字监控您的测试覆盖率,并在合并请求中强制执行覆盖率要求。

通过覆盖率报告,您可以:

  • 在合并请求中显示整体覆盖率百分比。
  • 汇总来自多个测试作业的覆盖率。
  • 添加覆盖率检查审批规则。
  • 跟踪随时间变化的覆盖趋势。

要配置覆盖率报告:

  1. coverage 关键字添加到您的流水线配置中:

    yaml
    1test-unit: 2 script: 3 - coverage run unit/ 4 coverage: '/TOTAL.+ ([0-9]{1,3}%)/' 5 6test-integration: 7 script: 8 - coverage run integration/ 9 coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
  2. 配置正则表达式 (regex) 以匹配您的测试输出格式。查看覆盖率正则表达式模式以获取常见模式。

  3. 要汇总来自多个作业的覆盖率,请将 coverage 关键字添加到您想要包括的每个作业中。

  4. 可选。添加覆盖率检查审批规则

覆盖率正则表达式模式#

以下示例正则表达式模式旨在解析来自常见测试覆盖工具的覆盖率输出。

请仔细测试正则表达式模式。工具输出格式可能会随时间变化,这些模式可能不再按预期工作。

工具语言命令正则表达式模式
pytest-covPythonpytest --cov/TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/
SimplecovRubyrspec spec/\(\d+.\d+\%\) covered/

覆盖率可视化#

使用 artifacts:reports:coverage_report 关键字查看在合并请求中被测试覆盖的具体代码行。

您可以生成以下格式的覆盖率报告:

  • Cobertura:适用于包括 Java、JavaScript、Python 和 Ruby 在内的多种语言。
  • JaCoCo:仅适用于 Java 项目。

覆盖率可视化使用 产物报告 来:

  1. 收集一个或多个覆盖率报告,包括通配符路径。
  2. 合并所有报告中的覆盖信息。
  3. 在合并请求差异中显示合并的结果。

覆盖文件在后台作业中解析,因此可能会在流水线完成和可视化出现在合并请求之间存在延迟。

默认情况下,覆盖率可视化数据在创建后一周后过期。

配置覆盖率可视化#

要配置覆盖率可视化:

  1. 配置您的测试工具生成覆盖率报告。

  2. artifacts:reports:coverage_report 配置添加到您的流水线中:

    yaml
    1test: 2 script: 3 - run tests with coverage 4 artifacts: 5 reports: 6 coverage_report: 7 coverage_format: cobertura # or jacoco 8 path: coverage/coverage.xml

有关特定语言的配置详情,请参阅:

来自子流水线的覆盖率报告#

History
    • 引入于极狐GitLab 15.1,使用名为 ci_child_pipeline_coverage_reports功能标志。默认禁用。
    • 在极狐GitLab 15.2 中为 JihuLab.com 和私有化部署启用。功能标志 ci_child_pipeline_coverage_reports 被移除。

在子流水线中生成的覆盖率报告会包含在父流水线的覆盖率报告中。例如:

yaml
child_test_pipeline: trigger: include: - local: path/to/child_pipeline_with_coverage.yml

添加覆盖率检查审批规则#

  • Tier: 专业版, 旗舰版

您可以要求特定用户或群组批准减少项目测试覆盖率的合并请求。

先决条件:

要添加 Coverage-Check 审批规则:

  1. 转到您的项目并选择 设置 > 合并请求
  2. 合并请求审批 下,执行以下操作之一:
    • Coverage-Check 审批规则旁,选择 启用
    • 对于手动设置,选择 新增审批规则,然后输入 Coverage-Check 作为 规则名称
  3. 选择一个 目标分支
  4. 设置 需要的审核者数量 的数量。
  5. 选择提供审批的 用户群组
  6. 选择 保存变更

查看覆盖率结果#

在流水线成功运行后,您可以在以下位置查看代码覆盖率结果:

  • 合并请求小部件:查看覆盖率百分比和与目标分支的变化。

    合并请求小部件显示代码覆盖率百分比

  • 合并请求差异:查看哪些行被测试覆盖。适用于 Cobertura 和 JaCoCo 报告。

  • 流水线作业:监控单个作业的覆盖率结果。

查看覆盖率历史#

您可以跟踪项目或群组的代码覆盖率随时间的变化。

对于项目#

要查看项目的代码覆盖率历史:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 分析 > 仓库分析
  3. 从下拉列表中选择要查看历史数据的作业。
  4. 可选。要查看数据的 CSV 文件,选择 下载原数据 (.csv)

对于群组#

  • Tier: Premium, Ultimate

要查看群组中所有项目的代码覆盖率历史:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的群组。
  2. 选择 分析 > 仓库分析
  3. 可选。要查看数据的 CSV 文件,选择 下载历史测试覆盖率数据 (.csv)

显示覆盖率徽章#

使用流水线徽章分享您的项目代码覆盖率状态。

要向您的项目添加覆盖率徽章,请参阅 测试覆盖率报告徽章

故障排除#

从代码覆盖率中移除颜色代码#

某些测试覆盖工具输出中包含的 ANSI 颜色代码无法被正则表达式正确解析。这会导致覆盖率解析失败。

有些覆盖工具不提供禁用输出颜色代码的选项。如果是这样,请通过一个删除颜色代码的单行脚本传递覆盖工具的输出。

例如:

shell
lein cloverage | perl -pe 's/\e\[?.*?[\@-~]//g'