注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

2015年08月28日  

来自王吉华   2015-08-28 11:04:40|  分类: 移动APP |举报 |字号 订阅

  下载LOFTER 我的照片书  |
##Android手动代码覆盖率实践
###环境
* andorid sdk配置
* android studio
* gradle环境配置
* ps:最好sdk升级到最新,android studio最好升级到稳定1.3

###过程
####新建android工程jacocoAndroidDemo
* android studio中新建android工程

####加入必要文件嵌套主页面
* FinshListner(监听是否退出程序)
* InstrumentedActivity(用于嵌套主页面)
* JacocoInstrumentation(用adb shell am 调起的runner类)

####工程中声明,并修改继承修改
* AndroidManifest中声明新加入acitvity(InstrumentedActivity)

<activity
            android:name="com.example.nickbeibei.jacoco.InstrumentedActivity"
            android:label="@string/app_name" >
        </activity>
     
* AndroidManifest中加入instrumentation属性(JacocoInstrumentation)

<instrumentation
android:handleProfiling="true"
android:label="CoverageInstrumentation"
android:name="com.example.nickbeibei.jacoco.JacocoInstrumentation"
android:targetPackage="com.example.nickbeibei.jcocodemo"/>
     
* InstrumentedActivity继承main acitivity(MainActivity)

####build.gradle修改
* 下图为build.gradle内容

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.nickbeibei.jcocodemo"
        minSdkVersion 15
        targetSdkVersion 22
        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.1.1'
}

* 加入jacoco插件:apply plugin: 'jacoco'
* 开启覆盖率统计:testCoverageEnabled = true

####build工程
* 之前配置了gradle环境后,在命令行:gradle assembleDebug进行构建build,若build有错,可通过gradle assembleDebug --debug查看具体log排查问题。这里要说一下,在配置的时候遇到很多问题,大多为android sdk和android studio过旧,还是都update下确保一些不必要的问题。

####adb shell am 调起页面,退出app产生coverage.ec
* adb shell am instrument com.example.nickbeibei.jcocodemo/com.example.nickbeibei.jacoco.JacocoInstrumentation runner类调起进去app
* 退出app时,会在packagename/files文件下产生coverage.ec
* adb pull操作传输到本地

####根据coverage.ec产生html形式的report
* pull到本地的coverage.ec文件放入app根目录/build/outputs/code-coverage/connected下
* 在build.gradle文件中加入产生report的task

def coverageSourceDirs = [
        '../app/src/main/java'
]

task jacocoTestReport(type: JacocoReport) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
            dir: '../app/build/intermediates/classes/debug',
            excludes: ['**/R*.class',
                       '**/*$InjectAdapter.class',
                       '**/*$ModuleAdapter.class',
                       '**/*$ViewInjector*.class',
                       '**/BuildConfig.*',
                       '**/Manifest*.*',
                       '**/*Activity*.*',
                       '**/*Fragment*.*'
            ])
    sourceDirectories = files(coverageSourceDirs)
    executionData = files("../app/build/outputs/code-coverage/connected/coverage.ec")

    doFirst {
        new File("../app/build/intermediates/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}
* 命令行执行:gradle jacocoTestReport
* build成功之后报告生成在:app/build/reports下
  评论这张
 
阅读(389)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016