Android Ui 代码覆盖率插件—jacoco
由于单元测试很难在公司推行,且为了解决新功能测试以及回归测试在手工测试的情况下,即便用例再为详尽,也会存在遗漏的用例。通过统计手工测试覆盖率的数据,可以及时的完善用例。 经过了解准备使用Jacoco完成这个需求.Jacoco是Java Code Coverage的缩写。
通过插码形式,当我们测试App时,启动后,手动测试完成后,我们通过生成的报告就可以分析到我们手工测试的覆盖率,也就是说,我可以看出,我们手动测试过程中是否对我们的代码分支覆盖的足够多。
如何做呢?
1、将3以下三个类放入项目中:
2. 修改app的build.gradle文件
添加的代码内容:
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.7.9"
}
android {
buildTypes {
debug { testCoverageEnabled = true
}
}
def coverageSourceDirs = [
'../app/src/main/java'
]
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "GenerateJacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir:'./build/intermediates/classes/debug',
excludes:['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories =files(coverageSourceDirs)
executionData = files("$buildDir/outputs/code-coverage/connected/flavors/coverage.ec")
doFirst {
newFile("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if(file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
dependencies {
compile fileTree(dir:'libs', include: ['*.jar'])
}
3、修改AndroidManifest.xml文件
4、我们需要通过adb shell am instrument 包名/包名.test.JacocoInstrumentation 启动app;
adb shell am instrument com.example.admin.myapplication/包名.JacocoInstrumentation
5、进行app手工测试,测试完成后退出App,覆盖率文件会保存在手机/storage/emulated/0/Android/data/com.example.admin.myapplication/cache/coverage.ec目录(该目录可修改)
6、导出coverage.ec,把手机中的该文件放到项目的指定目录下,如下图所示。使用gradle jacocoTestReport分析覆盖率文件并生成html报告。
7、分析覆盖率报告