首页/开发/CI/CD 与发布速查/GitLab CI 测试报告与覆盖率
工具链要点63 条

GitLab CI 测试报告与覆盖率

把测试结果与覆盖率以报告形式接入 GitLab:MR 页面直接显示失败用例与覆盖率变化,减少翻日志定位。

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

测试报告与覆盖率是什么

把测试结果与覆盖率以报告形式接入 GitLab:JUnit XML 让合并请求页面直接列出失败用例,覆盖率报告展示行覆盖变化,省去翻原始日志定位的步骤。GitLab 在作业完成后解析 artifacts 中声明的报告文件并渲染到界面;报告文件生成失败或格式不合法时页面只是静默无数据,不会额外报错,因此接入后要实际验证一次展示效果。

基本信息

JUnitreports:junit 解析用例结果,MR 页直接显示失败用例
覆盖率数值coverage 关键字用正则从作业日志提取百分比
覆盖率报告reports:coverage_report 展示行级覆盖标记
展示位置合并请求差异视图与流水线页面
解析时机作业完成后由 GitLab 解析报告文件

报告配置

报告配置
test:
  script:
    # 生成 JUnit 报告供 MR 展示
    - pytest --junitxml=report.xml --cov=src --cov-report=xml
  # 从日志提取覆盖率百分比
  coverage: '/TOTAL.+ (\\d+%)/'
  artifacts:
    reports:
      junit: report.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml

报告类型对照

类型关键字作用
用例结果reports:junit列出失败用例与堆栈信息
行覆盖reports:coverage_report差异视图标注覆盖到的行
覆盖率数值coverage 正则流水线徽标与 MR 上展示
报告留存artifacts:paths报告文件本身可下载复查

典型使用场景

  • 合并请求评审:直接看到失败用例清单与覆盖率增减,无需打开日志翻找
  • 存量项目接入:先接 JUnit 用例报告,再逐步补覆盖率数值与行级覆盖
  • 多测试框架统一:各框架输出 JUnit XML 后走同一套展示与统计
  • 覆盖率门禁:结合合并规则,让覆盖率明显下降的变更被提醒或阻断
  • 发布前检查:流水线页面汇总通过与失败数量,作为放行依据之一
报告文件路径写错时不会有明显报错,只是页面无数据:配置后要到合并请求页面验证一次。
JUnit XML 必须符合规范结构:格式错误会让解析失败且提示有限,先在本地用解析器校验再提交。

易错点

  • JUnit 文件格式不合法:解析失败不显示结果,先本地校验 XML
  • coverage 正则与输出格式不匹配:覆盖率恒为空,需要对着日志实际输出调试
  • 报告路径与作业工作目录不一致:文件找不到,页面长期无数据
  • 用例数量过多导致报告巨大:解析与渲染变慢,按需拆分或仅保留失败用例

数据来源与参考

  • GitLab Docs《Unit test reports》
  • GitLab Docs《Code coverage》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌