testing:coverage
1066 字约 4 分钟
testing:coverage
单测覆盖率,通过单测结果报告,计算单测覆盖率结果,并上报徽章数据。
可以在仓库的 洞察 页面以图表的形式按分支查看 最近 100 个 Commit 的覆盖率徽章数据上报结果。
提示
Pull Request 相关事件(除了 pull_request.merged)触发的流水线报告的覆盖率数据, 要查看单元测试洞察曲线,需要切换到合并请求视图。
适用事件
全量覆盖率
从本地覆盖率报告文件解析而来,目前可识别以下格式的报告:
json(js)(推荐使用)json-summarylcov(推荐使用)jacocogolang
增量覆盖率
参数
以下列表先概览 testing:coverage 的全部参数。
- key:覆盖率数据 key,用于区分多类覆盖率数据
- name:覆盖率数据名称,展示在徽章中,与
key对应 - pattern:Glob 格式指定报告文件位置
- lines:全量覆盖率红线,低于则阻断流水线
- diffLines:增量覆盖率红线,低于则阻断流水线
- allowExts:参与覆盖率计算的代码文件类型白名单
- lang:报告为
golang时指定go,避免计算误差 - breakIfNoCoverage:未找到报告文件时是否抛错终止
各参数详细说明如下。
key
- type:
String - required:
false
覆盖率数据 key 值,用于区分不同类型的覆盖率数据, 例如 frontend、backend 等。如果仓库仅包含一种覆盖率数据,则可以忽略此参数。
- 最多
256个字符 - 同一仓库最多支持
30个不同的 key - 指定 key 后,覆盖率数据仅写入 meta 的 map 中,不再记录一级 value(默认全量/增量覆盖率), 未指定 key 时才会记录默认覆盖率数据
name
- type:
String - required:
false
覆盖率数据名称,用于展示在徽章中, 和覆盖率数据 key 一一对应,key 不存在时,name 将被忽略。
例如:key: frontend, name: 前端覆盖率
pattern
- type:
String - required:
false
Glob 格式,指定覆盖率报告文件位置,相对于当前工作目录。 缺省时,将尝试查找当前目录(包括子目录)下的以下文件: coverage.json、jacoco*.xml、lcov.info、*.lcov。
lines
- type:
Number - required:
false
指定全量覆盖率红线,判断如果全量覆盖率百分比小于该值,阻断工作流退出流水线。
diffLines
- type:
Number - required:
false
指定增量覆盖率红线,判断如果增量覆盖率百分比小于该值,阻断工作流退出流水线。 pull_request、pull_request.update、pull_request.target 事件 支持计算增量覆盖率结果,其他事件只计算全量覆盖率。
allowExts
- type:
String - required:
false
参与覆盖率计算的代码文件类型白名单,逗号分隔,如:.json, .ts, .js。 缺省时报告中的文件都会参与计算。
lang
- type:
String - required:
false
当覆盖率结果报告目标格式为 golang 时, 请指定此参数为 go,否则会出现计算误差。其他情况可忽略该参数。
breakIfNoCoverage
- type:
Boolean - required:
false
没有找到覆盖率报告文件时,是否抛出错误终止流程。
输出结果
{
// 代码行覆盖率,例如 100,计算出错时值为 NA
"lines": 100,
// 代码增量行覆盖率,例如 100,计算出错时值为 NA
"diff_pct": 100
}配置样例
main:
push:
- stages:
- name: coverage
type: testing:coverage
options:
breakIfNoCoverage: false
exports:
lines: LINES
- name: result
script: echo $LINES