Android自动化测试工具调研

原文地址:Android自动化测试工具调研 - Stars-One的杂货小窝
Android测试按测试方式分类,可分为两种:一种是传统逻辑单元测试(Junit),另外一种则是UI交互页面测试 。
这里详细讲解第二种测试 。
UI交互页面测试如果是人工进行,会消耗人力,且不一定按质量进行测试,测试不全面,不到位 , 于是发展了通过写测试代码来进行测试 。
Monkey首先,介绍一下Monkey这个测试框架

命名为猴子,意思的是像猴子一样没有规则的顺便乱点操作
Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出 。
实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性 。
使用的话则是通过adb shell命令来执行的,如下面例子:
//(此时指定软件会被打开并开始乱点乱按) adb shell monkey-pcom.tencent.news-v -v -v100MonkeyRunnerMonkeyRunner也是Android SDK内置的一个工具,但与Monkey没有太大的联系,Monkey是通过adb命令下发相关事件指令来进行测试,而MonkeyRunner采取客户端/服务端的方式来下发相关指令
其文件位于AndroidSDK目录/tools/bin/monkeyrunner.bat.bat
本质上,MonkeyRunner是个工具集API(JPythod),通过让Pythod代码可以实现模拟操作手机APP的操作,具体可参考此文monkeyrunner自动化工具详解 - 习久性成 - 博客园
编写测试脚本(Pythod)来自定义数据、事件 。Monkeyrunner 足够强大了,但是录制的脚本是以坐标轴来作为定位方式,而安卓设备类型众多 , 各种分辨率 , 所以移植性不好
Espresso此方案 , 目前主要用户让Android开发人员进行自测使用,测试脚本代码为Java/Kotlin
Android官方代码中,默认引用这个测试框架库,在我们新建项目的时候就可以看到,app代码目录下有以下三个文件夹
  • androidTest UI的单元测试代码
  • main 主代码
  • test 逻辑测试代码

Android自动化测试工具调研

文章插图
其中,androidTest就是所说到的UI的单元测试代码 , 对应的测试框架为Espresso,基于Instrumentation进行改造而成,测试的主要流程就是找到对应控件Id,然后进行对应的断言判断
这种方法的缺点是需要懂Android开发的相关知识才能进行测试代码的编写
如果单纯编写确实有些难度,之后与Android SDK里的UiAutomator工具联用,UiAutomator工具文件是在AndroidSDK目录/tools/bin/uiautomatorviewer.bat
UiAutomator工具 , 主要功能就是会将当前的APP页面进行截图,然后分析View的层次结构,并展示View的相关属性信息 , 如控件ID,margin,text等
实际上,UiAutomator底层使用的无障碍服务(AccessibilityService)那套API,唯一有所区别的是 , UiAutomator是shell环境才能使用,而AccessibilityService可以在APP使用(需要用户手动开启权限)
可以通过Android Studio中的run->Record Espresso Test,打开一个对话框,通过此对话框,可以进行相关流程的测试,之后完成后自动生成对应的测试代码
详情过程可参考这篇文章Android Espresso使用 - 爱码网
Instrumentation框架是Android测试环境的核心,很多测试框架都是基于其实现 。Instrumentation其实是Android Framework中的一个类,它的作用简单来说就是能够监控Android系统和Application之间的交互 。因此实现了测试应用程序对应用程序的控制 。
Instrumentation`会在App启动阶段被初始化,然后作为一个实例变量保存到ActivityThread对象中 。Application的创建,Activity生命周期方法的回调等其他操作 , 都会经过Instrumentation来完成,会先调用Instrumentation的相应方法 。
Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能 。可以把Instrumentation理解为没有界面的activity,它具有启动能力和监控能力 。
Appium在说这个之前,先说下Selenium,Selenium是用来进行Web测试的框架,
selenium 本身是一套web自动化测试工具 , 但其经常被用于爬虫,解决一些复杂爬虫的问题 。
selenium 用于爬虫时,相当于模拟人操作浏览器,之后由此框架发展出了其他的框架

推荐阅读