Appium框架原理和工作流程

一、Appium的框架原理

Appium是在手机操作系统自带的测试框架基础上实现的,Android和iOS的系统上使用的工具是:

Android4.2以后是基于UIAutomator框架实现查找注入事件,iOS是UIAutomation

Appium的架构原理如图,由客户端和服务器两部分组成,客户端与服务器通过 JSON Wire协议进行通信:

Appium 在Android上基于UIAutomator实现了测试代理程序(Bootstrap.jar),在iOS上基于UIAutomation实现了测试的代理程序(Bootstrap.js)。

当测试脚本运行时,每行webDriver的脚本都将转换成Appium的指令发送给Appium服务器,而Appium服务器将测试指令交给代理程序,由代理程序负责执行测试。比如脚本上的一个点击操作,在Appium服务器上都是touch指令,当指令发送到android系统上时,Android系统上的Bootstrap.jar会调用UIAutomator的方法实现点击操作;而当指令发送到iOS系统上时,iOS的Bootstrap.js将调用UIAutomation的方法实现点击操作。正因如此,同样的测试脚本可以实现夸平台运行。

二、Appium的工作流程

1、Appium-Android工作流

在Android端,Appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤用UiAutomator的命令,实现App的自动化测试

1.Appium客户端是我们写的webdriver测试脚本。

2.中间是Appium的服务,Appium在服务端启动一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调用对应的框架响应操作。

3.Appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.Bootstrap监听4724端口并接收Appium 的命令,最终通过调用UiAutomator的命令来实现。

4.最后Bootstrap将执行的结果返回给Appium server。

5.Appium server再将结果返回给 Appium client

2、Appium-iOS工作流

在iOS端,Appium同样使⽤WebDriver的一套协议。与Android端测试框架不同的是Appium ios封装了apple的 Instruments框架,主要用了Instrument的UIAutomation(Apple的自动化测试框架),然后在设备中注入bootstrap.js进行监听。

1.Appium客户端是我们写的webdriver测试脚本。

2.中间是Appium的服务,Appium在服务端启动一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调用对应的框架响应操作。

3.Appium server调用instruments.js 启动一个socket server,同时分出一个子进程运⾏instruments.app,将bootstrap.js(UIAutomation脚本)注入到device⽤于和外界进行交互。

4.最后Bootstrap.js将执行的结果返回给Appium server。

5.Appium server再将结果返回给 Appium client。

三、重要概念

(1)Appium服务器:Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端。

(2)Bootstrap.jar:Bootstrap.jar是在Android手机上运行的一个应用程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap. jar建立TCP通信,并把命令发送给Bootstrap.jar; Bootstrap.jar负责运行测试命令。

(3)Appium客户端:它主要是指实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。现有的客户端Library有多种语言的实现,包括Ruby、Python、Java、JavaScript(Node. js)、Object C、PHP和C#。Appium的测试是在这些Library的基础上进行开发的。

(4)Session:Appium的客户端和服务端之间进行通信都必须在一个Session的上下文中进行。客户端在发起通信的时候首先会发送一个叫作“Desired Capabilities”的JSON对象给服务器。服务器收到该数据后,会创建一个session并将session的ID返回到客户端。之后客户端可以用该session的ID发送后续的命令。

(5)Desired Capabilities:Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值。Desired Capabilities主要用于通知Appium服务器建立需要的Session,其中一些设置可以在Appium运行过程中改变Appium服务器的运行行为。

猜你喜欢

转载自blog.csdn.net/yuan_ahui/article/details/127327520