代码覆盖率我们都知道,了解过jacoco也知道如何去弄,那么我们想要在跑UI自动化脚本的时候如何收集脚本执行过程中的代码覆盖率呢?首先我们知道jacoco可以得到测试的代码覆盖率,那么如果这些单测是UI的case,是不是就可以达到我们的要求,我们尝试一下,参考文档
AS中新建android项目
在android studio上新建一个android项目,默认build.gradle如下:
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.wuba.wuxian.android_0504" minSdkVersion 19 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' } |
执行测试
执行connectedAndroidTest任务,在android studio中,执行测试任务的任务名为connectedAndroidTest(被坑了很久)。
58deMacBook-Pro:app wuxian$ gradle clean connectedAndroidTest :app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:compileDebugNdk UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72200Library :app:prepareComAndroidSupportSupportV42200Library :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources /Users/wuxian/Documents/sourcecode/self/Android_05042/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.0.0/res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJava :app:preDexDebug :app:dexDebug :app:processDebugJavaRes UP-TO-DATE :app:validateDebugSigning :app:packageDebug :app:zipalignDebug :app:assembleDebug :app:preDebugAndroidTestBuild UP-TO-DATE :app:compileDebugAndroidTestNdk UP-TO-DATE :app:prepareDebugAndroidTestDependencies :app:compileDebugAndroidTestAidl :app:processDebugAndroidTestManifest :app:compileDebugAndroidTestRenderscript :app:generateDebugAndroidTestBuildConfig :app:generateDebugAndroidTestAssets UP-TO-DATE :app:mergeDebugAndroidTestAssets :app:generateDebugAndroidTestResValues UP-TO-DATE :app:generateDebugAndroidTestResources :app:mergeDebugAndroidTestResources :app:processDebugAndroidTestResources :app:generateDebugAndroidTestSources :app:compileDebugAndroidTestJava :app:preDexDebugAndroidTest :app:dexDebugAndroidTest :app:processDebugAndroidTestJavaRes UP-TO-DATE :app:packageDebugAndroidTest :app:assembleDebugAndroidTest :app:connectedAndroidTest BUILD SUCCESSFUL Total time: 47.159 secs |
执行成功后,我们去找测试报告,可千万别去build下找reports目录啊,真心不一样有没有,带build/outputs/reports/androidTests/connected目录下打开index.html。
在gradle中加入jacoco
在build.gradle中添加如下信息:
apply plugin: 'jacoco' .... jacoco{ toolVersion = "0.7.1.201405082137" } android { buildTypes { debug { testCoverageEnabled = true } |
添加后的build.gradle如下所示:
apply plugin: 'com.android.application' apply plugin: 'jacoco' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.wuba.wuxian.android_0504" minSdkVersion 19 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled = true } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' } jacoco { toolVersion = "0.7.1.201405082137" } |
执行jacoco
执行获得代码覆盖率的报告命令为createDebugCoverageReport
58deMacBook-Pro:app wuxian$ gradle clean createDebugCoverageReport :app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:compileDebugNdk UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72200Library :app:prepareComAndroidSupportSupportV42200Library :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources /Users/wuxian/Documents/sourcecode/self/Android_05042/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.0.0/res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJava :app:unzipJacocoAgent :app:instrumentDebug :app:preDexDebug :app:dexDebug :app:processDebugJavaRes UP-TO-DATE :app:validateDebugSigning :app:packageDebug :app:zipalignDebug :app:assembleDebug :app:preDebugAndroidTestBuild UP-TO-DATE :app:compileDebugAndroidTestNdk UP-TO-DATE :app:prepareDebugAndroidTestDependencies :app:compileDebugAndroidTestAidl :app:processDebugAndroidTestManifest :app:compileDebugAndroidTestRenderscript :app:generateDebugAndroidTestBuildConfig :app:generateDebugAndroidTestAssets UP-TO-DATE :app:mergeDebugAndroidTestAssets :app:generateDebugAndroidTestResValues UP-TO-DATE :app:generateDebugAndroidTestResources :app:mergeDebugAndroidTestResources :app:processDebugAndroidTestResources :app:generateDebugAndroidTestSources :app:compileDebugAndroidTestJava :app:preDexDebugAndroidTest :app:dexDebugAndroidTest :app:processDebugAndroidTestJavaRes UP-TO-DATE :app:packageDebugAndroidTest :app:assembleDebugAndroidTest :app:connectedAndroidTest :app:createDebugCoverageReport BUILD SUCCESSFUL Total time: 1 mins 6.089 secs |
ok,我们去查看代码覆盖率的报告:
报告目录:
报告形式:
加入UI脚本
上面的测试结果报告和代码覆盖率的报告都有了,但是我们的要求是执行UI脚本的时候,查看代码覆盖率的。所以我们现在加入UI脚本,我选择Robotium来编写自动化脚本,原因是Robotium是继承自instrumentation的框架,至于uiautomator的case看官方的介绍暂时还没有加入,以后可能会加入。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。