第十二章 Android Gradle测试

简介: 对于研发来说,测试永远都是绕不开的,通过测试我们可以减少bug率,提高产品的质量。测试有黑白之分,我们这里主要讲白盒测试,也就是基于现有代码逻辑的测试,比如单元测试等。

对于研发来说,测试永远都是绕不开的,通过测试我们可以减少bug率,提高产品的质量。测试有黑白之分,我们这里主要讲白盒测试,也就是基于现有代码逻辑的测试,比如单元测试等。


Android为测试提供了很好的支持,既可以使用传统的Junit测试,又可以使用Android提供的Instrument测试,这一章我们主要讲Android Gradle和Android测试之间的配合和结合,期间会涉及一些单元测试用例或者对一些测试框架的使用,但是主要介绍点还是Android Gradle和Android测试,对于Android测试本身介绍不多,关于Android测试本身,比如Activity等四大组件测试、UI自动化测试、espresso UI测试框架等可以参考官方文档。


12.1 基本概念


在Android Gradle中,测试应用相关已经被作为项目的一部分,而不再是一个单元的测试工程了,这对我们一起管理引用代码比较方便。它是一个SourceSet,这个我们之前有过介绍,比如有main SourceSet,对测试来说有androidTest SourceSet。当我们使用Android Studio新建一个项目的时候,会帮我们默认生成main和androidTest SourceSet,路径和main相似,是src/androidTest/,当我们运行测试的时候,androidTest SourceSet会被构建成一个可以安装到设备上的测试Apk,这个测试Apk里有很多我们写好的测试用例,他们会被执行,来测试我们的App。


在androidTest SourceSet里我们可以依赖各种测试库,写很多方面的测试用例,比如单元测试的、集成测试的,espresso UI测试的,uiautomator自动化测试的等等。


既然它可以生成一个Apk,那么它一定有Apk的必备属性和文件,比如包名、比如AndroidManifest.xml文件等等,那么他们是怎么被配置的呢,还记得我们讲的ProductFlavor吗?它里面有很多以test开头的配置,这些就是我们用来配置测试Apk用的。一般测试Apk我们会统一配置,而不是针对每个渠道都配置,所以我们会在defaultConfig里来对测试Apk进行配置,让其自动生成所需要的包名、AndroidManifest.xml文件等信息,defaultConfig也可以这么配置,因为defaultConfig其实也是一个ProductFlavor。


  1. testApplicationId 测试Apk的包名


  1. testFunctionalTest 是否启用功能测试


  1. testHandleProfiling 是否启用性能分析


  1. testInstrumentationRunner 运行测试使用的Instrumentation Runner


这些配置我们在上一章多渠道里都有详细介绍,他们是用来配置Android测试的配置,帮助我们生成AndroidManifest.xml,其实主要是用来生成AndroidManifest的instrumentation这个标签。


image.png


最后会根据配置生成AndroidManifest.xml文件。


image.png


看到这里,我们应该发现一个现象,targetPackage这个属性我们并没有配置,怎么在AndroidManifest.xml也生成了呢,这是Android Gradle自动帮我们做的,它会使用被测试App的包名进行填充。


前面我们讲过,每一个SourceSet都可以配置它自己的dependencies依赖,androidTest也不例外,它也可以,并且它可以有自己的资源,配置等,和我们使用其他的SourceSet是一样的,该有的都有。


image.png

这样只有Android测试的时候这些才会被编译到测试的Apk里,为我们测试所用,正式的Apk包里是没有这些Jar库的。


默认情况下测试Apk测试的目标Apk是debug模式下的,这有很大好处,第一个因为debug模式下的我们都不会混淆代码,对我们发现问题有帮助,第二个对我们查看测试的代码覆盖率有帮助,可以很容易的发现哪些没有覆盖到,如果想更改也很方便,Android Gradle为我们提供了testBuildType,可以更改要测试BuildType。


image.png


这样就改成测试的是release类型的Apk包了。testBuildType是android对象的一个属性,接受BuildType的名字作为参数,是一个String字符串。


image.png

从源代码里我们也可以看到,它的默认值是debug,也就是我们上面讲的测试的是debug类型的App包。


写好了测试的代码,我们怎么运行呢,测试需要我们手动执行来运行,使用./gradlew connectedCheck即可运行我们的测试,这个任务是一个引导性质的任务,它首先会使用androidAndroidTest任务构建好测试应用和被测试应用,其中被测试应用又是被assembleDebug任务构建的;然后通过install任务安装这两个应用;接着运行我们写好的测试用例,最后等运行完之后,写卸载两个应用。这个前提我们一定要有一台Android设备或者Android模拟器以供我们测试使用,如果你同时运行了多个设备,那么会在每个设备上都执行测试用例。


最后测试的结果会被保存在build/androidTest-results目录下,我们可以前往查看我们测试的结果。


以前讲的都是测试App,也就是Application项目,如果我们要测试一个库项目呢?其实和测试Application项目是一样的,配置、目录、依赖等都一样,唯一不同的是不会有被测试的Apk生成,只有一个测试Apk生成,我们库项目中的代码被作为一个依赖库添加到测试Apk中,库的AndroidManifest文件中的配置也会被合并到测试Apk的AndroidManifest中,有没有发现,其实一个Application项目引用库项目是一样的。运行测试方面也是一样的,执行命令行执行命令即可。


12.2 本地单元测试


今天到这里, .......


本文属自学历程, 仅供参考

详情请支持原书 Android Gradle权威指南



目录
相关文章
|
25天前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
23天前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
28天前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
58 0
玩转安卓之配置gradle-8.2.1
|
2月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
137 4
Android性能测试——发现和定位内存泄露和卡顿
|
2月前
|
测试技术 Shell Android开发
Android 性能测试初探 (六)
本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了。
51 6
|
2月前
|
JavaScript 测试技术 Android开发
Android 性能测试初探 (四)
本文介绍了GPU在移动端性能测试中的重要性,并详细解释了过度绘制、帧率和帧方差的概念。针对GPU测试,文章列举了三项主要测试内容:界面过度绘制、屏幕滑动帧速率和平滑度。其中,过度绘制测试需遵循特定标准,而帧速率和平滑度测试则可通过软件或硬件方法实现。在软件测试中,使用Systrace插件和高速相机是两种常用手段。对于不同机型,帧率及帧方差的测试标准也需相应调整。
46 5
|
2月前
|
测试技术 Shell Android开发
Android 性能测试初探 (三)
本文承接《Android性能测试初探(二)》,深入探讨CPU与内存测试。介绍了移动端内存测试的重要性及其测试目标,并详细列举了不同状态下应用内存消耗情况的测试项目。此外,还提供了多种内存测试方法,包括使用`procrank`等工具的具体操作步骤。最后,文章也简要提及了CPU测试的相关内容,帮助读者更好地理解Android性能测试的关键要素。
48 5
|
2月前
|
测试技术 Shell 定位技术
Android 性能测试初探 (五)
聊聊大家不常关注的测试项- 功耗
44 3
|
2月前
|
算法 测试技术 Android开发
Android 性能测试初探 (二)
上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试)
45 4
|
2月前
|
测试技术 API Android开发
Android 性能测试初探 (一)
Android 性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试;一类为应用的性能测试。
49 3