原文地址:Android自动化测试工具调研 - Stars-One的杂货小窝
Android测试按测试方式分类,可分为两种:一种是传统逻辑单元测试(Junit),另外一种则是UI交互页面测试 。
这里详细讲解第二种测试 。
UI交互页面测试如果是人工进行,会消耗人力,且不一定按质量进行测试,测试不全面,不到位 , 于是发展了通过写测试代码来进行测试 。
Monkey首先,介绍一下Monkey这个测试框架
命名为猴子,意思的是像猴子一样没有规则的顺便乱点操作实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性 。
Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出 。
使用的话则是通过adb shell命令来执行的,如下面例子:
//(此时指定软件会被打开并开始乱点乱按) adb shell monkey-pcom.tencent.news-v -v -v100
MonkeyRunnerMonkeyRunner也是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 逻辑测试代码
文章插图
其中,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 用于爬虫时,相当于模拟人操作浏览器,之后由此框架发展出了其他的框架
推荐阅读
- 28 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-下篇
- 五 微软出品自动化神器【Playwright+Java】系列 之常见点击事件操作
- [Android开发学iOS系列] 快速上手UIKit
- [Android开发学iOS系列] ViewController
- [Android开发学iOS系列] iOS写UI的几种方式
- GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署
- 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04
- Playwright+Java 微软出品自动化神器Playwright系列(四)之浏览器操作
- Android类加载流程
- androidmanifest.xml 反编译