对于一个技术了解其原理,可以更加靠近它。出现问题,也不会摸不着头脑,稍微有一点眉目,有一些分析思路。所以整理了一下。

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原理图.png

Appium的加载流程
1)调用Andorid adb完成基本的系统操作
2)向Andriod上部署bootstrap.jar包并启动
3)Forward Android 的端口到PC的机器上
4)PC上监听端口接受请求,使用webdriver协议
5)分析命令并转通过forward的端口发给bootstrap.jar包
6)bootstrap接受请求并把命令发给UiAutomator或插桩体系

WX20190218-185813@2x.png

其他相关概念
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 操作手机进行自动化。

Appium原理总结相关推荐

  1. Appium原理初步--Android自动化测试学习历程

    章节:自动化基础篇--Appium原理初步(第七讲) 本期关键词: Appium.跨语言跨平台.Bootstrap 主要讲解内容及笔记: 一.what is appium 一种封装了uiautomat ...

  2. Python自动化-APPium原理解析与实际测试案例分享

    目录结构 一.Appium概述 Appium架构原理 运行原理 1)Appium服务器 2)Bootstrap.jar 3)Appium客户端 二.Appium组件 三.Appium环境搭建 Node ...

  3. 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析

    想要使用 Appium 进行测试,那么就一定要先了解Appium的原理.Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为 ...

  4. Appium原理学习笔记

    一.Appium 概念 appium 是一个移动端自动化测试开源工具,跨平台.支持android,ios原生应用,web应用和混合应用. 特点:appium类库封装了标志的Selenium客户端类库. ...

  5. Appium原理-20190831

    Appium介绍 Appium是由nodejs的express框架写的Http Server.Appium不是它自己创建一套新的测试框架,是将现有的优秀的框架进行了集成,以Selenium WebDr ...

  6. appium 原理解析

    Appium是 c/s模式的 appium是基于 webdriver 协议添加对移动设备自化api扩展而成的 webdriver 是基于 http协议的,第一连接会建立个 session 会话,并通过 ...

  7. appium原理及api

    appium 测试移动端UI自动化 appium 哲学 移动端自动化测试而单独开发一套api接口 appium是基于selenium做的二次扩展 android uiautomator IOS uia ...

  8. appium底层实现原理解析

    appium原理 转自  木木L玲 一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台 ...

  9. App自动化测试-原理与安装-Appium+Python+网易mumu模拟器

    App自动化测试(学习笔记一)--Appium原理与安装 APP自动化初始 Appium原理 Appium安装 Java jdk 1.8版本 Android sdk appium desktop ap ...

  10. APP自动化测试-12.Appium日志分析(原理)

    APP自动化测试-12.Appium日志分析 文章目录 APP自动化测试-12.Appium日志分析 前言 一.应用启动 二.元素定位与操作 总结 前言 以Android原生应用为例,记录使用appi ...

最新文章

  1. ssh 远程登陆异常SSH_EXCHANGE_IDENTIFICATION及解决过程
  2. String类中toCharArray()方法的用法
  3. 优秀平面设计师必须拥有的设计思维
  4. linux三剑客试题,linux三剑客-awk
  5. 编程基础python学习2完结
  6. Mac技巧:如何使用macOS Big Sur中“通知中心”的小组件?
  7. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_19-页面查询服务端开发-创建CMS服务工程-CMS工程结构...
  8. java毕业设计户籍管理系统(附源码、数据库)
  9. 2017最新xcode打包APP详细图文
  10. 首次适应算法的模拟C++实现(没有)
  11. css text-transform实现英文字母或拼音大小写转换
  12. 根据个人情况以及Java程序员面试宝典总结的需要复习的知识点
  13. 使用地图编辑器构建游戏场景
  14. android高德地图 画质,高德导航地图端口和分辨率修改
  15. 数组unshift_数组unshift()方法以及JavaScript中的示例
  16. SpringBoot整合Shiro学习(上)
  17. English——slang about body
  18. 计算机房的正常温度和湿度,机房适宜的湿度和温度是多少?
  19. unity3d实现飞行模拟
  20. 如何简单计算patch代码变化量?

热门文章

  1. sap linux系统安装教程,SAP系统安装步骤 --- 46C OR 4.7
  2. Android - singleTask启动模式详解
  3. python安装opencv出现错误_通过pip安装opencv时出错
  4. HTML 做个漂亮的表格
  5. 关于2020年全国大学生数学建模竞赛——我的感想
  6. eclipse下载哪个版本开发java_官网上有很多版本的eclipse,下载哪个版本比较合适?...
  7. matlab2018A配置cuda,使用教程 | matlab 2018a + cuda 10.1 + vs 2017
  8. Java写的答题助手项目分析与总结(二)
  9. OkHttp中的设计模式之一:Builder模式
  10. 《小功能》python实现文本中的小写数字转大写