Android自动化单元测试(下)

简介:

承接上文

上一篇单元测试讲了如何在Android Studio中写测试用例,自动化测试并生成测试报告,这一篇主要讲一下扩展工具的使用。

jacoco代码覆盖率

  jacoco是一个检测代码覆盖率的插件工具,那什么是代码覆盖率呢?代码覆盖率简单来说就是单元测试用例所测试到的代码比重,被测试到即是被覆盖。覆盖率高自然是好事,但不能完全说明代码质量高没有bug,生成的覆盖率报告可能大部分情况下也就是应付差事,应付差事,付差事。。。
  呵呵
   在Android Studio中使用jacoco还是比较简单的,只需要更改Module目录下的gradle文件。首先就是导入jacoco插件并指定使用版本。

apply plugin: 'jacoco'
jacoco {
    version "填写版本号,如0.7.9"
}

   指定版本的代码在AS2.x时代可以写在android代码块中,不过到了3.0之后就不推荐了,可以写在外面和android、dependencies一个级别。另外需要在buildTypes下的debug(release应该也可以)中添加支持代码覆盖testCoverageEnable为true。然后就是自定义一个gradle task。

task jacocoTestReport(type:JacocoReport,dependsOn:"test"){  // 1
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    classDirectories = fileTree(  // 2
            dir : "$buildDir/intermediates/classes/debug",
            excludes : [
                    '**/R.class',
                    '**/R$*.class',
                    '**/BuildConfig.*',
                    '**/Manifest*.*'
            ]
    )
    def coverageSourceDirs = ['src/main/java']
    additionalSourceDirs = files(coverageSourceDirs)
    sourceDirectories = files(coverageSourceDirs)
    additionalClassDirs = files(coverageSourceDirs)
    executionData = files("$buildDir/jacoco/testDebugUnitTest.exec")  // 3
    reports{  // 4
        xml.enabled = false
        html.enabled = true
        csv.enabled = false
    }
}

  上面的代码有几个点需要注意:

  • 注释1中的type指定了类型,这里就是jacoco的报告,然后他是依据后面dependsOn的task去生成的;
  • 注释2是指定了生成的类文件的目录,其中exclude是排除以下的文件,如果有以下源码不需要进行识别是否覆盖,这里也就要求了命名的规范性;
  • 注释3是最重要的一个部分,这里指向了一个exec文件,jacoco原理上就是根据这个生成的文件去生成自己的报告,不过有一点要注意如果一开始dependsOn的是AndroidTest的任务,这个文件的路径就不一样了而且后缀也不一样,去尝试一下吧;
  • 注释4比较显而易见的就是报告生成的类型,最好还是html。

  依然是在AS的命令终端执行gradlew+task的命令模式,gradlew jacocoTestReport之后终端会自动执行自动化测试并生成测试报告和代码覆盖率报告。代码覆盖率报告生成的前提是所有的测试用例都通过测试。覆盖率报告的样子可以参考下图,红色代表了没有覆盖到:
这里写图片描述

jenkins持续集成

   jenkins是一种持续集成工具,可以监控持续重复的工作,如apk的打包生成等。它的环境搭建不是这里重点说的,网上的例子也很多。用过这个工具的应该也对它支持gradle构建Android apk有所了解,在自动化测试的部分用到它也是用到了它能够对Android项目自动打包,同时支持插件的扩展。
   为了能够支持单元测试,jenkins需要安装junit插件,如果想增加对代码覆盖率的支持,就需要安装本文介绍的jacoco的插件。由于这一部分并不是所有技术人员都会参与,所以主体内容就省略,直接跳转到如何配置构建的命令一步。
这里写图片描述
   上图中就是对一个jenkins任务的配置,这里的构建就是项目在构建时所需要做的一些工作,首先选择合适版本的gradle,然后就是添加gradle所需要执行的tasks。保存之后在该项目的控制面板中点击立即构建,会出现一个正在构建的任务,这个过程可能比较漫长。构建成功之后可以在对应的jenkins的工作目录下的该项目目录找到生成的报告。特别提醒一下,这次构建gradle会自动为我们生成lint报告,方便了代码review。

总结

   两篇文章其实也只是简单介绍了Android的自动化单元测试,介绍了移动端自动化测试的可行性。不过也有很多没有涉及或介绍不细之处,如其他的单元(UI)测试框架,对jenkins的使用等等。准备仓促,而且也不是专业测试开发人员,最后列出一下参考文章以拓展。

参考文章

Android单元测试框架Robolectric3.0介绍
Jenkins构建Android项目持续集成之简介篇(这是一个系列)

目录
相关文章
|
2月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
2月前
|
资源调度 测试技术 Linux
一款接口自动化神器—开源接口测试平台Lim(Less is More)
一款接口自动化神器—开源接口测试平台Lim(Less is More)
130 2
|
2月前
|
安全 测试技术 持续交付
接口自动化测试的基本流程
接口自动化测试的基本流程
|
3月前
|
敏捷开发 存储 测试技术
敏捷测试中的挑战和自动化风险
敏捷测试中的挑战和自动化风险
|
3天前
|
Linux Shell Android开发
自动化脚本之GPIO/LED相关适用于Android/Linux
自动化脚本之GPIO/LED相关适用于Android/Linux
13 0
|
3天前
|
Java API Android开发
Android 11 修改libcore Cipher AS测试
Android 11 修改libcore Cipher AS测试
13 1
|
1月前
|
数据采集 数据处理 开发工具
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
|
1月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
34 3
|
1月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
29 4
|
2月前
|
Java 测试技术 API
安卓APP和iOS APP在测试上的区别是什么?
安卓APP和iOS APP在测试上的区别是什么?

热门文章

最新文章