使用 jacoco 的 GitLab CI&CD 测试覆盖率

GitLab CI&CD test coverage with jacoco

在 GitLab 15.0 中,设置项目中的测试覆盖率功能将被删除。

GitLab 提供在 .gitlab-ci.yml

中使用 coverage 关键字解析测试覆盖率

满足所有要求:

  1. 定义为单引号字符串。
  2. 正则表达式以 / 字符开头和结尾。

为什么测试覆盖徽章仍然显示 unknown

test:
  stage: test
  script: gradle check
  coverage: '/Total.*?([0-9]{1,3})%./'
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: pull
    paths:
      - build
      - .gradle
  artifacts:
    when: always
    reports:
      junit: build/test-results/test/**/TEST-*.xml

为了让 ./gradlew test 输出测试覆盖率摘要,我需要将 gradle-jacoco-log 添加到我的项目中。

plugins {
  id 'org.barfuin.gradle.jacocolog' version '2.0.0'
}

test {
  finalizedBy jacocoTestReport
}

jacocoTestReport {
  dependsOn test
}

这给了我以下控制台输出:

> Task :jacocoLogTestCoverage
Test Coverage:
    - Class Coverage: 100%
    - Method Coverage: 83.6%
    - Branch Coverage: 75%
    - Line Coverage: 85.5%
    - Instruction Coverage: 83.1%
    - Complexity Coverage: 82.5%

然后我可以通过将以下内容添加到 .gitlab-ci.yml 来选择向 GitLab 报告 Instruction Coverage

test:
  stage: test
  script: gradle check
  coverage: '/    - Instruction Coverage: ([0-9.]+)%/'