使用 jacoco 的 GitLab CI&CD 测试覆盖率
GitLab CI&CD test coverage with jacoco
在 GitLab 15.0 中,设置项目中的测试覆盖率功能将被删除。
GitLab 提供在 .gitlab-ci.yml
中使用 coverage
关键字解析测试覆盖率
满足所有要求:
- 定义为单引号字符串。
- 正则表达式以 / 字符开头和结尾。
为什么测试覆盖徽章仍然显示 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.]+)%/'
在 GitLab 15.0 中,设置项目中的测试覆盖率功能将被删除。
GitLab 提供在 .gitlab-ci.yml
coverage
关键字解析测试覆盖率
满足所有要求:
- 定义为单引号字符串。
- 正则表达式以 / 字符开头和结尾。
为什么测试覆盖徽章仍然显示 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.]+)%/'