UI自动化框架appium工作原理
一、框架组成
Appium由三个主要模块构成:Client端、Server端和移动端。
- Client端:就是发起command的一端,狭义可以理解为java/python编写的自动化测试脚本或者自动化测试脚本执行的机器。
- Server端:即启动的appium进程。
- Server端作为信息中转站,接收Client端发送的请求,并根据请求类型和目标平台,将相应的控制命令转发到被测应用的移动端上。Server端启动时会创建一个HTTP服务,监听特定端口(如默认的4723端口)。
- 移动端:
- 移动端是真正执行自动化测试的地方。在Android设备上,通常有一个名为
bootstrap.jar的中间件;在iOS设备上,则是一个名为bootstrap.js的脚本。这些中间件负责监听来自Appium Server的命令,并在移动设备上执行相应的UI自动化操作。
- 移动端是真正执行自动化测试的地方。在Android设备上,通常有一个名为
核心思想:WebDriver 协议 + 客户端-服务器架构
Appium 的核心设计哲学非常巧妙,可以概括为两点:
遵循 WebDriver 协议:Appium 没有自己创造一套新的标准,而是扩展了Selenium WebDriver 用于自动化浏览器的协议(称为 JSON Wire Protocol 及其后继者 W3C WebDriver)。这意味着任何兼容 WebDriver 的客户端库(如 Java、Python、JavaScript、Ruby 等)都可以直接用来写 Appium 脚本。
客户端-服务器架构:Appium进程是一个 HTTP Server。测试脚本(客户端)通过 HTTP 请求向 Appium Server 发送命令(如“点击”、“查找元素”),Appium Server 接收到命令后,负责将其翻译成移动设备(iOS/Android)能够理解的原生指令并执行。
二、appium的几个重要概念
- client:就是发起command的一端,狭义可以理解为java/python编写的自动化测试代码或者自动化测试代码执行的机器。
- appium server:即启动的appium进程,专门用于监听来自client端的请求,转发请求并转为移动端能识别的command(WebDriver协议),然后发送给移动端设备进行操作,等待操作结果,将操作结果发送给client端。
- 默认开启并监听
4723端口。 - Appium通过HTTP协议进行Client与Server之间的通信。Client端发送请求到Appium Server的特定端口,并使用JSON格式的数据交换测试信息和执行结果。
- 在移动设备端,中间件(如bootstrap.jar或bootstrap.js)通过socket连接与Appium Server进行通信。中间件接收来自Appium Server的命令,并在移动设备上执行相应的操作,然后将执行结果反馈回Appium Server。
- WebDriver协议在Appium中起到了桥梁的作用,使得Client端能够与移动设备进行交互,实现自动化测试。
- 默认开启并监听
- Desired Capabilities:这是启动 Appium 会话的“配置清单”,是一个 JSON 对象,用于告诉 Appium Server 你希望如何启动和执行会话。例如:启动浏览器还是移动设备?启动Android还是iOS?启动Android时,app的包名是什么;app的activity是什么。
- session:session就是一个会话,在appium中,所有工作都是在session start后才可以进行。启动session需要传入
Desired Capabilities获取一个全局唯一的session id,这个id指定了执行自动化测试的浏览器或者移动设备。
三、appium工作流程

工作流程的几个关键步骤:
启动会话 (Session):你的测试脚本(客户端)通过向 Appium Server 发送一个包含
Desired Capabilities(设备名、应用路径、自动化引擎等)的 HTTP 请求来启动一个会话。Appium 会根据这些配置初始化对应的自动化框架(如 UiAutomator2/XCUITest),并在设备上安装一个特殊的“服务器代理”(Android 上是bootstrap.jar,iOS 上是WebDriverAgent)。执行命令:
- 自动化脚本(client)发送一个命令(如 find_element 查找元素)。
- Appium Server 接收到这个标准的 WebDriver 命令。
- Appium Server 通过之前建立的连接,将这个命令转发给设备上正在运行的“服务器代理”(Bootstrap/WebDriverAgent)。
- 这个“服务器代理”负责调用平台原生的自动化框架(UiAutomator2/XCUITest)。
- 原生框架最终在设备的 UI 层级中执行真正的操作(如查找、点击、滑动)。
返回响应:操作执行后的结果(成功或失败信息)会沿着原路返回,最终以 HTTP 响应的形式送达你的测试脚本。
四、核心原理:“不重新编译”与“跨平台”
Appium 官方口号是 "Cross-platform, don't recompile your app"。它通过以下两个关键技术点实现了这一目标:
1. 不重新编译你的应用
传统自动化框架(如 Apple 的 UIAutomation)需要将自动化库编译到待测应用中。
Appium 不需要对被测应用做任何修改或重新编译。它利用了各平台官方提供的底层自动化框架来驱动应用:
Android
- 对于 4.2+ 版本:使用 UiAutomator2(目前主流)。UiAutomator2 是 Google 提供的官方测试框架,可以获取屏幕内容并执行操作。
- 对于更老版本:使用 Selendroid(基于 Instrumentation)。
iOS
- 对于 9.3+ 版本:使用 XCUITest(目前主流)。XCUITest 是 Apple 提供的官方 UI 测试框架。
- 对于更老版本:使用 UIAutomation(已废弃)。
简单来说,Appium 就像一个“翻译官”和“中间商”。它接收标准的 WebDriver 命令,然后“调用”设备上这些官方的自动化框架来执行实际的操作。因为使用的是官方框架,所以不需要修改应用本身。
2. 跨平台
- 由于 Appium 在服务器层为 iOS 和 Android 提供了不同的“翻译”实现(即不同的“驱动”,如 XCUITestDriver 和 UiAutomator2Driver),但对客户端暴露的是同一套 WebDriver API。这意味着可以用同一套编程语言、几乎相同的代码结构来为 iOS 和 Android 编写自动化测试,大大提高了代码的复用性。
五、总结
Appium 的原理可以精炼为:
- 协议标准化:采用并扩展 WebDriver 协议,使客户端编写标准化。
- 架构清晰:采用 C/S 架构,职责分离,客户端只需关注业务逻辑,服务器负责翻译和执行。
- 借力官方:不造轮子,直接调用各平台官方的底层自动化框架(UiAutomator2/XCUITest)来驱动设备,因此无需修改被测应用。
- 跨平台统一:通过在服务器端为不同平台提供不同的“驱动”实现,对上层提供统一的 API,从而实现真正的跨平台自动化。
六、附录
1.在Android设备的详细工作过程:
- Appium server将监听到的4723端口的指令,转发给中间件Bootstrap.jar,Bootstrap.jar是用Java编写的,安装在Android手机上;
- Bootstrap监听4724端口并接收Appium server的指令;
- Bootstrap再通过调用UIautomator的命令来实现具体的command操作。
- 最后Bootstrap将执行的结果返回给Appium server。
2.参考资料
appium工作原理
APP自动化测试系列之Appium介绍及运行原理
UI自动化框架appium工作原理的更多相关文章
- [转载]Appium工作原理
[Appium]Appium工作原理 2017-09-13 15:28 sophia194910 阅读(7658) 评论(0) 编辑 收藏 参考:http://www.cnblogs.com/zhjs ...
- Appium 工作原理及 Desired Capabilities
一.Appium工作原理 脚本请求 --> 4723端口appium server --> 解析参数给PC端4724端口 --> 发送给设备4724端口 --> 通过设备472 ...
- ui自动化笔记 selenium_webdriver,ui自动化框架(web)
Selenium学习笔记 selenium webdriver是业界公认ui自动化测试的标准,其封装的api可以对浏览器的任何地方进行操作 selenium2.0和selenium3.0的区别? 3. ...
- 《HiWind企业快速开发框架实战》(1)框架的工作原理
<HiWind企业快速开发框架实战>(1)框架的工作原理 1.HiWind架构 HiWind的基本架构如下: 持久层部分:同时为框架本身的业务服务,也为开发人员的自定义业务服务. 逻辑层: ...
- php面试专题---21、MVC框架基本工作原理考察点
php面试专题---21.MVC框架基本工作原理考察点 一.总结 一句话总结: 会的东西快速过,不要浪费时间,生命有限,都是一些很简单的东西. 1.mvc框架单一入口的 优势 是什么? 可以进行统一的 ...
- 基于PO和单例设计模式用python+selenium进行ui自动化框架设计
一)框架目录的结构 二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备然后目前的配置文件大都会用yaml,ini,excel,还有.py也 ...
- 多测师讲解ui自动化框架设计思想_高级讲师肖sir
UI自动化框架:UI自动化框架可以分为8个模块,conf.data.public.pageobject.testcase.runner.report.log.conf是用来储存系统环境.数据库.邮件的 ...
- UI自动化框架搭建之Python3
UI自动化框架搭建--unittest 使用的代码是Python3版本,与时俱进哈哈 解释一下我的框架目录接口(每个人框架的目录接口不一样,根据实际要求) common目录:公共模块,这个地方可以存放 ...
- appium工作原理
Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬.大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220 ...
- 【Appium】Appium工作原理(2)
Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬. 大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/6922 ...
随机推荐
- Java源码分析系列笔记-14.ThreadPool
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. set方法 3.3.1. 先获取Thread对应的ThreadLocalMap 3.3.2. 有的话 ...
- AI应用实战课学习总结(1)必备AI基础理论
大家好,我是Edison. 由于公司的愿景逐渐调整为ONE Tech Company,公司的IT战略也逐渐地朝着Data & AI Driven发展,因此近半年来我一直在学习大模型相关的东西, ...
- stm32有前途吗?前景怎么样?
STM32有前途吗?前景怎么样?一个十年老兵的深度剖析 写在前面:一个改变命运的芯片 每次有人问我"STM32有前途吗"这个问题,我都会想起十年前那个炎热的夏天. 2014年7月, ...
- 实现对C语言类学生管理系统文件存储的两种方法
学习javascript的时候曾经想做一个留言板的应用,但是却由于不知道如何存储失败了,由于做这个留言板的思路类似于C语言的学生管理系统,故此这次经历让我重新审视自己去学懂C语言的文件操作. 我重新用 ...
- java日常问题和技巧2
整理到一个工具类里面,用到了spring和alibaba.fastjson package common; import java.text.ParseException; import java.t ...
- paddle训练安装
这里共有三个模块安装部署与训练.版面区域检测.文本检测.文本识别. 一.版面区域检测模块训练 说明:训练这里只需要用到paddlepaddle.paddlex.所以ocr这里不安装. 以下为CPU安装 ...
- IE兼容性踩坑
IE8-时间格式问题 new Date()不支持传入中划线格式的字符 跟小程序一样的bug,如下就会报错 new Date('2020-01-01') 解决办法,替换成2020/01/01的形式就好了 ...
- CF1875C Jellyfish and Green Apple 题解
CF1875C Jellyfish and Green Apple 我们首先把整块的分完,然后处理剩余的分数块数. 由于我们只能劈成两半,所以约分之后分数的分母只能为 \(2\) 的幂,不能包含其他质 ...
- terminal 终端 linux 快捷键 很有用
转载:http://xace.iteye.com/blog/481074 今天才发现Linux下的终端有这么多好用的快捷键. Shift+Ctrl+T:新建标签页 Shift+Ctrl+W:关闭标签页 ...
- opengl 学习 之 11 lesson
opengl 学习 之 11 lesson 简介 2D纹理.简单来说就是用一个四边形的小框框,UV映射图片. 这里用了多个shader,一个是关于模型的,一个是关于图片的. link http://w ...