对于一个技术了解其原理,可以更加靠近它。出现问题,也不会摸不着头脑,稍微有一点眉目,有一些分析思路。所以整理了一下。
- Appium框架原理
- Appium的加载流程
- 其他相关概念
- 遗留问题
Appium框架原理
Appium是在手机操作系统自带的测试框架基础上实现的,IOSios9.3以前使用的是UIAutomation,ios9.3以后使用XCUITest ,Android4.0以下使用基于Android Instrumentation框架实现的Selendroid,Android4.0以上使用UIAutomator。
Appium包括Appium客户端和Appium服务端。Appium客户端和Appium服务端之间采用JSON wire protocol (JSONWP)协议通信,Appium客户端将操作命令例如点击某个按钮发送给Appium服务端,Appium服务端转发给设备上的bootstrap.jar,bootstrap.jar在手机上将命令发送给设备对应的测试框架,在手机上的测试app上执行点击某个按钮的操作,bootstrap.jar再将结果返回给Appium服务端,再返回给Appium客户端。
Appium客户端: 可以理解为测试脚本。
Appium服务端:使用node.js编写的HTTP服务器,当我们执行测试脚本时,脚本会转换成对应的JSON数据,通过HTTP请求发送给Appium服务器,Appium服务器默认开启4723端口,将接收到的Appium客户端的请求转发给设备上的bootstrap.jar,并将设备的结果通过HTTP应答反馈给Appium客户端。
bootstrap.jar :在设备上运行的应用程序,它在手机上扮演TCP服务器的角色,监听设备的4724端口上Appium服务端发来的请求,将请求发送给安卓的UIAutomator(或者IOSXCUITest)可以识别的命令。
Appium的加载流程
1)调用Andorid adb完成基本的系统操作
2)向Andriod上部署bootstrap.jar包并启动
3)Forward Android 的端口到PC的机器上
4)PC上监听端口接受请求,使用webdriver协议
5)分析命令并转通过forward的端口发给bootstrap.jar包
6)bootstrap接受请求并把命令发给UiAutomator或插桩体系
其他相关概念
C/S 架构
Client/Server,即客户端/服务器端架构,一种典型的两层架构。客户端包含一个或多个在用户的电脑上运行的程序。服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
B/S 结构
B/S是Browser/Server,即浏览器/服务器架构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成所谓的三层架构。B/S架构的系统无须特别安装,只有Web浏览器即可。Appium就是这种架构。
TCP服务器
TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。
WebDriver JSONWireProtocol
JSON wire protocol (JSONWP)是一种数据传输的协议。该协议是一系列特定的,预定义好的标准化的RESTful API节点,主要是为了web的自动化测试设计的。Appium实现了移动端的JSONWP,扩展了Selenium JSONWP,用来控制不同的移动设备的交互操作。
Seesion
Appium的客户端和服务端之间进行通信必须在一个session的上下文中进行。客户端发起通信的时候会首先发送一个叫做“Desired Capabilities”的JSON对象给服务端。服务端接收到该数据后,会创建一个session并将session的ID返回给客户端,之后客户端会用该session的ID发送后续的命令。
Desired Capalities
Desired Capalities是一组设置的键值对,用于通知Appium服务端建立需要的session,其中一些设置可以改变Appium的运行行为。
WebDriverAgent
简称WDA。它是由Facebook推出的一款移动端测试框架。它是在iOS客户端实现了一个WebDriver的Server,借助这个server,我们可以远程控制iOS设备进行测试。据官方介绍,它是通过链接XCTest.framework和调用苹果的API直接在设备上执行命令。
遗留问题:
在ios自动化测试中,在测试用例执行前会在ios设备上安装并启动WebDriverAgent这个app,WebDriverAgent和XCUITest是什么关系,是用来驱动ios上的XCUITest吗。
找到一个答案:
之前 Server 是和 bootstrap.jar 通信,这里 WebDriverAgent 提供了 WebDriverAgentRunner (类似 bootstrap.jar 的功能),WebDriverAgent与之通信;
WebDriverAgentRunner 是一个应用,Client 和 server 运行了之后,WebDriverAgentRunner 会被装到手机上,这个应用会接收来自 Server 的指令,并连接底层的 XCTest.framwork,并告诉 XCTest.framwork 操作手机进行自动化。
参考:
https://blog.csdn.net/qq_24373725/article/details/79850490
https://www.jianshu.com/p/5d11299f674b
https://www.cnblogs.com/wangcp-2014/p/6060019.html
https://www.cnblogs.com/feifei-cyj/p/7905798.html
https://testerhome.com/topics/4904
https://blog.csdn.net/ouyanggengcheng/article/details/85205585
https://testerhome.com/topics/10068