1. Appium介绍

Appium是由nodejs的express框架写的Http Server。Appium不是它自己创建一套新的测试框架,是将现有的优秀的框架进行了集成,以Selenium WebDriver的协议(JsonWireProtocol/Restful web service)统一起来. 使得这个框架满足很多的需求。Appium启动自动化测试后,在被测设备上启动一个server,监听来自Appium server的指令。不同的平台(如IOS,Android)采用不同的运行和交换方式。Appium将某个桩程序“侵入”平台,用于接受指令,来完成测试脚本的运行。

2. 特性:

1) 跨平台, native hybrid webview(H5)

2) 跨设备, android iOS

3) 跨app,可以在多个app之间交互

4) 不依赖APP开源代码( Android 对H5的支持需要代码支持,这里不细说)

5) 支持Selenium WebDriver / Selenium Grid

6) 跨语言, java python ruby nodejs

7) Open Source

3. appium加载的过程图解:

4. Appium的加载过程说明

1) 调用Android adb完成基本的系统操作

2) 向Android上部署bootstrap.jar

3) bootstrap.jar Forward Android的端口到PC机器上

4) PC上监听端口接收请求,使用webdriver协议

5) 分析命令并通过forward 端口发给bootstrap.jar

6) bootstrap.jar接收请求并把命令发给uiautomator

7) ui automator执行命令

5. 初步认识appium工作过程

1) appium有C/S模式

2) appium是基于webdriver协议对移动设备自动化api扩展而成的,所有具有和webdriver一样的特性,比如多语言支持。

3) webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息。

4) 对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务。

5) 客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的。

6) appium服务端是node.js写的,所以安装那个平台都是先安装node,然后npm install -g appium(需要FQ)。

6. bootstrap介绍、

1) bootstrap的作用

bootstrap是Appium运行在安卓测试机的一个UIAutomator测试脚本,该脚本的唯一功能就是在目标机器开启一个socket服务器来把一个session中Appium从PC端过来的命令发送给UiAutoamtor来执行处理。它会监听4724端口获得命令,然后交给UiAutomator来处理。

2) Bootstrap

首先,bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase,所以Uiautomator可以正常运行它,它也可以正常使用uiautomator的方法,这是就是appium的命令可以转换成uiautomator的关键;
其次,bootstrap是一个socket服务器,专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;
最后,bootstrap处理的是从PC端传过来的命令,而非一个文件。

7. 所使用的技术

1) Android上使用了instrumentation和uiautomator两套技术
ios使用uiautomation

2) 同时支持Firefox,并可扩展其他平台。

3) 默认开启4723端口接收webdriver请求可,4723是appium服务,专门和脚本打交道;

4) 默认开启4724,用于和Android设备通讯,新版本的appium Android增加了UIautoamator2的支持,iOS换成了XCUItest

8. capabilities

capabilities是一些键值对的集合。客户端将键值对发送给appium服务端,用来告诉服务端怎样开始测试。

9. 工作原理

1) 启动方式:Appium启动时会创建一个http://127.0.0.1:4723/wd/hub服务端(相当于一个中转站),脚本会告诉服务器我要做什么,服务端再去跟设备打交道。

2) 整体架构:

Appium的整体架构是C/S模式,整体流程(返回顺序为逆向):脚本请求 ——> 4723端口appium server ——> 解析参数给PC端4724端口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar ——> Bootstrap.jar把命令发给uiautomator

3) 原理图

4) session

Session在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息,对应到这里其实就是desiredCapabilities中的配置信息参数。脚本通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了,由于这是第一次请求创建session,所有并没有一个已创建的session id,所以appium server会调用android driver(appium升级到2.0.0后,原有的AppiumDriver函数变成抽象函数了,需更改为AndroidDriver)为client生成一个session并且生成一个与此session相关联的session id,这个 session id将被在本次响应中返回给客户端保存,当下次脚本发出操作请求时就会自带session id为唯一标识,代表所打开的设备,Appium server会按照此session id把这个session检索出来使用,脚本向appium server发送的请求即是存在于创建的session中的。

Session 的作用就是它在appium服务上保持设备的状态信息,供在任何时间进行访问,在多次的操作行为中,存储在 Session对象中的配置信息将不会丢失,而是在整个用户会话中一直存在下去,整个测试进程中设备与程序的联系不会断开,也不需要每次都发送带配置信息的请求,程序都知道对哪个设备进行测试操作。当测试结束后,需关闭webdriver,driver.quit()会关闭所有关联窗口和session,并且也会把进程也关闭。

5) 数据传递过程

解析参数给PC端4724端口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar ——> Bootstrap.jar把命令发给uiautomator:

创建session成功之前,就已将bootstrap.jar放入手机中,并开启设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。

Appium server将脚本的请求解析后给到4724端口,通过设备的4724端口转发解析后的请求, 此时,对于socket服务来说,appium server就充当了client的角色,appium server通过4724端口主动去请求设备上的socket服务,即向socket服务发送请求,即bootstrap.jar,Bootstrap.jar再把Appium的命令转换成uiautomator的命令来让uiautomator进行处理。有请求就有返回,socket接收到请求后会做出响应,原路返回给脚本,然后脚本再进行下一次的请求。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。appium和手机的通信过程,主要是数据交换的一个过程,socket的作用是就是为了实现双向通信,它需要一对端口号,对应到这里就是4724,手机端的bootstrap就是socket-server端,appium server就是socket-client端。

关于socket的通信原理,先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

socket通信原理_Appium原理相关推荐

  1. Socket 通信原理(Android客户端和服务器以TCPUDP方式互通)

     ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是So ...

  2. Socket通信原理

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP? 2.         Soc ...

  3. recv原理、高阶版黏包解决方案、基于UDP的socket通信

    recv原理.高阶版黏包解决方案.基于UDP的socket通信 recv原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自soc ...

  4. Java——Socket通信原理

    * Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...

  5. Socket通信学习(一):Socket通信原理

    Socket通信学习(一):Socket通信原理 HoloLens的开发最近需要用到Socket通信,所以创建本系列进行记录,欢迎大家批评指正! 前言 应用Socket进行设备通信,首先需要了解Soc ...

  6. QT中使用C++ socket通信,socket通信原理三次握手和四次握手详解、客户端与服务端实例详解

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP? 2.         Soc ...

  7. Socket 通信原理

    整理和总结了一下大家常遇到的问题: 1. 客户端socket发送消息后,为什么服务端socket没有收到?2. 使用while 循环实现连续输入,是不是就是多线程模式?3. 对多线程处理机制不是很明白 ...

  8. TCP及socket通信原理详解

    TCP/IP原型 DARPA一个项目,逐渐演变而来的. 端口号 0~1023:管理员才有权限使用,永久地分配给某应用使用: 注册端口: 1024~41951:只有一部分被注册,分配原则上非特别严格: ...

  9. AF_INET域与AF_UNIX域socket通信原理对比

    1. AF_INET域socket通信过程 典型的TCP/IP四层模型的通信过程. 发送方.接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口 ...

  10. python通信原理实验报告_【Python之旅】第五篇(一):Python Socket通信原理-阿里云开发者社区...

    只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理. 1.Socket socket也称作"套接字",用于描述IP地 ...

最新文章

  1. HTML与CSS(图解4):表格
  2. [iOS]图片高清度太高, 导致内存过大Crash
  3. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)...
  4. 文件操作相关的系统函数
  5. 12名高校教师被降级!打破职称终身制,山东在行动!
  6. 玩转linux文件描述符和重定向,玩转Linux文件描述符和重定向
  7. org.apache.hadoop.security.AccessControlException: Permission denied: user=anonymous, access=EXECUTE
  8. java读取excel数据的方法是_java怎么读取excel文件里的数据
  9. 怎样避免MYSQLD被OOM-KILLER杀死?
  10. imread函数_不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?
  11. JS 数组(遍历 二维数组)
  12. 在ubuntu16.04下安装opencv3.4.5(超详细)
  13. Redis 对象系统
  14. linux i350网卡,intel I350 网卡驱动安装方法
  15. excel转置怎么操作_技能篇:Excel数据处理小技巧
  16. 2020 年 Python 知识清单(数据分析)
  17. 科学的研究方法——笛卡尔
  18. 美团 python_Python | 美团差评数据分析
  19. visio拉动线条总是保持直线状态
  20. 华氏温度转换成摄氏温度

热门文章

  1. 测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本
  2. 安全合规/等级保护--13--我们通过了等级保护三级认证
  3. 分享一套基于HTML5的网络拓扑图组件 Qunee下载
  4. Java基础入门第二版 课后答案
  5. 谷歌浏览器和对应驱动器的安装、配置(附有安装包)
  6. 华为hcna认证考完多久考hcip?华为认证的发展就业前景怎么样?
  7. HCNA华为认证网络工程师视频教程
  8. chrome弱网_弱网测试参考
  9. nginx HTML网页乱码
  10. asc和desc全称_MySQL数据排序asc、desc