代码覆盖率

使用代码覆盖率提供有关测试套件正在验证哪些源代码的信息。代码覆盖率是可以确定软件性能和质量的众多测试指标之一。

查看代码覆盖率结果

代码覆盖率结果显示在:

  • 合并请求部件
  • 项目仓库分析
  • 群组仓库分析
  • 仓库徽章

更多关于合并请求文件差异中测试覆盖率可视化的信息,请参见测试覆盖率可视化

在合并请求中查看代码覆盖率结果

如果您在代码中使用测试覆盖率,则可以使用正则表达式在作业日志中查找覆盖率结果。然后,您可以将这些结果包含在极狐GitLab 的合并请求中。

如果流水线成功,覆盖将显示在合并请求部件和作业表中。如果流水线中的多个作业都有覆盖率报告,则对它们进行平均。

MR widget coverage

Build status coverage

将代码覆盖率结果添加到合并请求中

您可以通过将 coverage 关键字添加到项目的 .gitlab-ci.yml 文件中,将测试覆盖率结果添加到合并请求中。

要聚合多个测试覆盖率值:

  • 对于您要包含在整体覆盖率值中的每个作业,添加 coverage 关键字,后跟一个正则表达式。

使用 coverage 关键字添加测试覆盖率结果

要使用项目的 .gitlab-ci.yml 文件将测试覆盖率结果添加到合并请求,请使用 coverage 关键字提供正则表达式。

测试覆盖率示例

将此正则表达式用于常用的测试工具。

名称 语言 命令 示例
Simplecov Ruby None /\(\d+.\d+\%\) covered/
pytest-cov Python None /TOTAL.*? (100(?:\.0+)?\%\|[1-9]?\d(?:\.\d+)?\%)$/
Scoverage Scala None /(?i)total.*? (100(?:\.0+)?\%\|[1-9]?\d(?:\.\d+)?\%)$/
pest PHP pest --coverage --colors=never /Statement coverage[A-Za-z\.*]\s*:\s*([^%]+)/
phpunit PHP phpunit --coverage-text --colors=never /^\s*Lines:\s*\d+.\d+\%/
gcovr C/C++ None /^TOTAL.*\s+(\d+\%)$/
tap NodeJs tap --coverage-report=text-summary /^Statements\s*:\s*([^%]+)/
nyc NodeJs nyc npm test /All files[^\|]*\|[^\|]*\s+([\d\.]+)/
jest NodeJs jest --ci --coverage /All files[^\|]*\|[^\|]*\s+([\d\.]+)/
excoveralls Elixir None /\[TOTAL\]\s+(\d+\.\d+)%/
mix Elixir mix test --cover /\d+.\d+\%\s+\|\s+Total/
JaCoCo Java/Kotlin None /Total.*?([0-9]{1,3})%/
go test (single package) Go go test -cover /coverage: \d+.\d+% of statements/
go test (whole project) Go go test -coverprofile=cover.profile && go tool cover -func cover.profile /total:\s+\(statements\)\s+\d+.\d+%/
OpenCover .NET None /(Visited Points).*\((.*)\)/
dotnet test (MSBuild) .NET dotnet test /Total\s*\|\s*(\d+(?:\.\d+)?)/
tarpaulin Rust None /^\d+.\d+% coverage/
Pester PowerShell None /Covered (\d+\.\d+%)/

查看项目代码覆盖率的历史记录

您可以始终对项目或群组进行代码覆盖了追踪。

对于项目

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

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

Code coverage graph of a project over time

对于群组

要查看群组中所有项目的代码质量历史:

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

Code coverage graph of a group over time

流水线徽章

您可以使用流水线徽章来指示项目的流水线状态和测试覆盖率。这些徽章由最新成功的流水线决定。

覆盖率检查批准规则

You can require specific users or a group to approve merge requests that reduce the project’s test coverage. 您可以要求特定用户或群组批准减少项目测试覆盖率的合并请求。

先决条件:

要添加 Coverage-Check 批准规则:

  1. 前往您的项目并选择 设置 > 合并请求
  2. 合并请求批准 下,执行以下操作之一:
    • Coverage-Check 批准规则旁边,选择 启用
    • 对于手动设置,选择 添加批准规则,然后输入 规则名称。例如:覆盖检查
  3. 选择 目标分支
  4. 设置 所需批准数
  5. 选择要提供批准的 用户群组
  6. 选择 保存更改

故障排除

使用代码覆盖率时删除代码颜色

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

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

例如:

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