android studio+jacoco获取代码覆盖率

最近在做android测试时代码的覆盖率,网上查了好长一段时间,遇到了很多坑,在这里简单记录一下,主要参考了这篇文章https://www.jianshu.com/p/671fad23c2ce

jacoco简介

jacoco是Java Code Coverage的缩写,顾名思义,是Java代码覆盖率统计的主流工具之一。在安卓项目的代码覆盖率统计使用了jacoco的离线插桩方式,在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试(单元测试、UI测试或者手工测试等)插过桩的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。

android studio+jacoco配置

1.配置build.gradle

使用Android Studio打开项目,打开build.gradle文件,添加以下内容:
添加jacoco插件并设置版本
在这里插入图片描述

apply plugin: 'jacoco' //加载代码覆盖库jacoco

jacoco {
    toolVersion = "0.7.9" //代码覆盖库jacoco版本号
}

在buildTypes中启用jacoco
在这里插入图片描述

testCoverageEnabled = true

添加生成报告的相关设置
在这里插入图片描述

//代码覆盖率相关配置
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(
            //检测覆盖率的class所在目录(以项目class所在目录为准)
            dir: './build/intermediates/javac/debug/classes',        
            //增加以上目录中不需要检测的文件列表
//            excludes: ['**/R*.class',
//                       '**/*$InjectAdapter.class',
//                       '**/*$ModuleAdapter.class',
//                       '**/*$ViewInjector*.class'
//            ]
    )
    //设置需要检测覆盖率的目录
    sourceDirectories = files(coverageSourceDirs)
    //存储APP运行时产生报告的路径 
    executionData = files("$buildDir/outputs/code-coverage/connected/code_coverage.ec") 
}

2.配置AndroidManifest.xml

确认APP有开启文件读写权限
在这里插入图片描述

3.配置项目代码

在基类Activity中的onDestory中添加生成代码覆盖率的方法

public class BaseActivity extends AppCompatActivity {

    public static String DEFAULT_COVERAGE_FILE_PATH = Environment.getExternalStorageDirectory()+"/";

    @Override
    protected void onDestroy() {
        generateCoverageFile();
        super.onDestroy();
    }

    /**
     * 生成executionData
     */
    public void generateCoverageFile() {
        OutputStream out = null;
        try {
            out = new FileOutputStream(DEFAULT_COVERAGE_FILE_PATH + "/code_coverage.ec", false); //在SDcard根目录下生产检测报告,文件名自定义
            Object agent = Class.forName("org.jacoco.agent.rt.RT").getMethod("getAgent").invoke(null);
            // 这里之下就统计不到了
            out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean.class).invoke(agent, false));           
        } catch (Exception e) {            
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4.生成代码覆盖率文件

项目build成功后,点击Gradle->app->install->installDebug安装应用
在这里插入图片描述
启动应用,手动点击或者执行自动化脚本,执行完成后退出应用并杀掉进程,使用adb shell命令进入scard目录下,查看是否生成code_coverage.ec文件,如果生成该文件使用adb pull把文件pull到本地

5.生成报告

把pull出的code_coverage.ec文件放到项目app/build/outputs/code-coverage/connected/目录下,如果没有该目录,可手动创建,注意这里的路径要跟上面build.gradle里面写的“executionData”一致
在这里插入图片描述
点击Gradle->app->reporting->jacocoTestReport,会在项目的app\build\reports目录下生成报告
在这里插入图片描述
报告会在项目的以下位置生成
在这里插入图片描述
打开html目录下面的index.html文件即可在网页中查看代码覆盖率
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.常见问题

未生成code_coverage.ec文件
1.检查项目配置是否正确
2.确认获取代码覆盖率的方法是在哪个生命周期中添加的,例如在onDestory中添加则需要操作完成后杀掉应用进程才会生成覆盖率文件
已生成code_coverage.ec文件,但生成的报告中数据为空
检查build.gradle中的配置地址是否与本地项目一致
在这里插入图片描述
报告中无法查看代码执行情况
检查build.gradle中的源码配置路径是否与本地项目一致
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
Android Studio中,代码自动补全是一个非常方便的功能,可以大大提高我们的编码效率。下面是一些关于代码自动补全的常见问题及其解答: 1. 代码自动补全在Android Studio中如何启用? 在Android Studio中,默认情况下,代码自动补全是启用的。你只需输入部分代码,然后按下Tab键或者Enter键,就可以自动补全代码了。 2. 如何更改自动补全的触发方式? 如果你想更改自动补全的触发方式,可以按照以下步骤进行操作: - 打开Android Studio的设置(Preferences)。 - 在左侧的面板中,选择"Editor",然后选择"General"。 - 在右侧的面板中,找到"Code Completion"选项。 - 在"Code Completion"选项中,你可以选择自己喜欢的触发方式,例如按下空格键、点号(.)等。 3. 代码自动补全的功能有哪些? Android Studio的代码自动补全功能非常强大,它可以帮助你快速输入代码,并提供代码提示和建议。它可以自动补全类、方法、变量名等,并且会显示相关的文档注释和方法签名。此外,还可以根据上下文智能地推断并提供合适的代码补全选项。 4. 如何查看代码自动补全的建议列表? 当你输入代码并启用了自动补全功能后,Android Studio会显示一个弹出窗口,其中包含与你输入的内容相关的建议列表。你可以使用键盘上的上下箭头键来选择建议列表中的项,然后按下Tab键或者Enter键进行选择。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值