本次任务的目的是统计安卓java开发的测试覆盖率。
在java方面测试代码覆盖率毫无疑问会推荐jacoco,实际上jacoco的成熟度并不高,官方文档主要在maven项目和eclipse工具上应用。在Gradle上的应用,官方提供了简单的文档介绍。The JaCoCo Plugin 。国内的各种文章有各种版本,并且常常随着Gradle的版本快速发展,各种Bug层出不穷,无法正常运行。经过多方探寻,这里将最新的成功经验记录如下:
本文使用 Gradle 6.7.1, Jacoco版本0.88, sonarqube 9.6 参考的Gradle Jacoco Plugin的文档来自Gradle 7.6.
前提条件,完成了junit格式测试用例的编写。
主要只需要修改根目录下的build.gradle
plugins {
id 'jacoco'
id 'java'
id "org.sonarqube" version "3.5.0.2730"
}
test {
finalizedBy jacocoTestReport // report is always generated after tests run
}
jacocoTestReport {
dependsOn test // tests are required to run before generating the report
}
jacoco {
toolVersion = "0.8.8"
reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir')
}
jacocoTestReport {
reports {
xml.required = false
csv.required = false
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
}
}
gradle.properties 设置sonarqueb的地址和认证token
# gradle.properties
systemProp.sonar.host.url=http://mengpc:9000
systemProp.sonar.login=sqa_64ef0fddf320101f36d61508c665a57b25ed7
成功运行 gradlew test jacocoTestReport 后,在app/build/jacoco目录下能够看到生成的.exec文件。但是始终生成html格式的jacoco覆盖率报告。虽然官方文档里面有写,但是没有找到生成的结果,我认为是gradle jacoco plugin 的一个bug.
弥补的方式是:运行jacococli 命令,单独解析exec文件为html文件。
java -jar lib/jacococli.jar report jacoco.exec \
--html ./report \
--sourcefiles [path/to/your/source/files] \
--classfiles [path/to/your/class/files]
Jacoco 的下载地址是: EclEmma - JaCoCo Java Code Coverage Library
jacococli的文档在这里: https://www.jacoco.org/jacoco/trunk/doc/cli.html
生成的代码覆盖率报告如下:
同步到Sonarqube 上的效果