很多同学经过一段时间的学习之后都明白了Appium的基本原理,但是越学习到后面发现出现的很多陌生名词无法弄清楚其具体作用,今天这篇文章的目的就是为了让大家来弄懂三个高频名词:UiAutomator、UiAutomator2、Bootstrap。
首先来说下UiAutomator和bootstrap:
UiAutomator是Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架。其最大的特点就是可以跨进程操作,我们可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。可以替代以前繁琐的手工测试。
Bootstrap是Appium在初始化的时候推送到安卓手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理。
下图为官方提供的原理图:
WebDriver script:
我们的测试脚本(java or python)
Appium:
会首先开启一个监听4723端口的server,接收测试脚本发送过来的对应请求,再讲对应的请求发送给中间件Bootstrap.jar(注意这里的请求不是整个脚本文件,而是对应的命令请求,比如:点击一个元素就是一条请求)
Bootstrap.jar:
监听4724端口由appium发送过来的相关请求,并且将请求转换成UiAutomator可以识别的命令发给UiAutomator进行处理
UiAutomator2:
说到这里相信大家已经了解了这两者的关系,那为什么还会有UiAutomator2,难道是UiAutomator的升级版本?没错!
appium在最近有加入了对UiAutomator2(也可称为UiAutomator V2)的支持实现Android端自动化,原理同之前的UiAutomator+Bootstrap有很大的不同:
为了能够支持UiAutomator2,Appium引入了appium-uiautomator2-server(类似driver与Selenium关系)
以下是其官网的wiki介绍,英文基础较好的同学可以去看看
https://github.com/appium/appium-uiautomator2-server/wiki
肯定还是有比较多同学对英文犯晕的,那我就给大家翻译翻译下:
1、Appium使用UiAutomator2的目的是为了替换掉之前的UiAutomator+Bootstrap模式
2、Bootstrap是基于UiAutomator V1(即为UiAutomator)的,但是UiAutomator很多Api基本上官方不再维护了
3、UiAutomator V2修复了UiAutomator V1中遇到的大多数问题,最重要的是实现了与Android系统更新的分离
有看到我们公开课的同学或者VIP课程的同学比较清楚:在获取到toast信息的时候需要将automationName设置成UiAutomator2,就是因为在UiAutomator2上新增了AccessibilityService服务,可以实现Toast的获取。
以下是其使用原理图:
WebDriver script:
不用多说,就是我们的执行脚本
Appium:
客户端传递desired capabilities属性配置给Appium Server来创建一个会话,Appium Server会调用appium-uiautomator2-driver,同时将UiAutomator2 server的两个apk安装到测试设备上
1、appium-uiautomator2-server-vx.x.x.APK
2、appium-uiautomator2-server-debug-androidTest.apk
UiAutomator2 server两个apk的作用:
1、UiAutomator2 驱动模块,负责创建会话,安装UiAutomator2-server.apk到设备上,开启Netty(这是一个通信框架,相当于Bootstrap使用的SocketServer升级版本)
2、UiAutomator2服务器模块,当驱动模块创初始化完毕,服务器就会监听PC端Appium发送过来的请求,将请求发送给真正底层的UiAutomator2。