Appium原理之Appium in Android

简述

Appium本身是基于c/s架构的,原理整体说起来较为简单:执行测试脚本时,基于WebDriver的每行脚本都会转换成Appium的指令发送给Appium服务器,而Appium服务器将测试指令交给代理程序(Android端是Bootstrap.jar,iOS端是Bootstrap.js),将由代理程序执行测试。如脚本上的一个简单点击操作,在Appium服务器上都是touch指令,当指令发送到Android系统上时,Android系统上的Bootstrap.jar将调用UIAutomator的方法实现点击操作;当指令发送到iOS系统上时,iOS系统上的Bootstrap.js将调用UIAutomation的方法实现点击操作。也正因如此,Appium才能跨实线跨平台操作的。

Android总体架构

先看一下这张图:
在这里插入图片描述
由图可看出,Appium主要由Appium Client和Appium Server组成。说明一下含义:
Appium Server:是基于Node.js实现的服务器,主要是接受Appium Client端发起的连接,监听从Appium Client发送来的指令,然后发送到Bootstrap.jar(iOS是Bootstrap.js)执行,并将执行的结果反馈给Appium Client。
Appium Client:是指实现了Appium功能的WebDriver协议的客户端Library,主要是与Appium Server连接,并将测试脚本发送到Appium Server。
Bootstrap.jar:是push到Android手机上的一个应用程序,主要是接受Appium Server的执行并运行这些测试指令。而指令的执行正是通过UIAutomator来驱动的。
看到这里,不知道大家有没有深入去想:Appium是如何打通主机和Android设备之间的通道的呢?相信如果有了解过UIAutomator的同学肯定会第一时间想到adb,是的,当测试脚本的Capabilities里的automationName参数设置为Android时,Appium Server就会初始化UIAutomator运行环境,并通过Bootstrap.jar来执行测试指令,具体步骤如下:
1)使用abd -s deviceIP:5555 forward tcp:4724 将端口映射到主机
2)将AppiumBootstrap.jar这个jar包通过adb命令push到设备中去
3)通过adb -s 设备IP:设备端口 shell uiautomator runtest AppiumBootstrap.jar -c io.Appium.android.bootstrap.Bootstrap -e pkg io.Appium.android.apis -e disbleAndroidWatchers false启动SocketServer
通过以上步骤,appium就打通了主机和设备之间的通道。

脚本在执行时,Appium Client通过http协议将命令发送给Appium Server。Appium Server将命令写入监听在4724端口的Socket服务,手机端的Bootstrap.jar一直在监听着4724端口的动向,感知到命令后,获取到指令并执行处理,最后把结果通过Socket传回Appium Server。Appium Server再通过Http Response返回给测试脚本。这就是整体的一个流程。

猜你喜欢

转载自blog.csdn.net/lks1139230294/article/details/84579780