Appium详细介绍(一)

一、Appium 核心定位与核心优势
多应用类型全覆盖:支持三大类移动端应用的自动化测试,无需切换框架即可满足不同应用形态的测试需求:
-
原生应用:直接基于 Android 或 iOS 系统原生开发语言编写的应用(如 Android 中的 Java/Kotlin 应用、iOS 中的 Objective-C/Swift 应用),无网页内容嵌套;
-
移动网页应用:运行在移动端浏览器(如 iOS Safari、Android Chrome 等)中的网页应用,本质是移动端适配的网页;
-
混合应用:包裹了 WebView 组件的原生应用,兼具原生应用的外壳和网页应用的内容交互性,原生控件与网页内容共存(如很多电商、社交类 App)。
跨平台特性突出:支持 iOS 和 Android 两大主流移动端操作系统,更可延伸至 Mac、Windows 桌面系统。其核心亮点是 **「一套 API 编写的自动化脚本,可直接在不同平台复用」**,无需针对 iOS 和 Android 分别编写差异化脚本,大幅降低跨平台测试的学习成本和维护成本。
二、Appium 底层工作引擎(驱动)
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、Appium 核心设计理念
基于 WebDriver 协议的移动端 API 扩展(对应 b、c)
-
基础支撑:WebDriver 是一套标准化的 UI 自动化协议,其核心特性是基于 HTTP 协议进行通讯,首次建立连接时会创建一个唯一的 Session 会话,客户端通过 POST 请求向服务端发送 JSON 格式的配置信息(如测试设备型号、应用包名、启动参数等),用于初始化测试环境。
-
扩展升级:Appium 并非从零构建,而是在 WebDriver 协议的基础上,扩展了针对移动端设备和应用的专属自动化 API(如滑动屏幕、操作手机键盘、获取手机状态栏、操作 WebView 等),弥补了 WebDriver 协议在移动端场景的不足,同时保留了协议的标准化优势。
Client/Server(C/S)设计模式(对应 a、e)
这是 Appium 的核心架构模式,将自动化测试拆分为 “客户端” 和 “服务端” 两部分,各司其职:
-
客户端:负责编写自动化测试脚本,支持 Java、Python、JavaScript、Ruby 等多种主流编程语言(多语言支持)。客户端无需关注底层驱动的实现细节,只需通过发送标准 HTTP 请求与服务端通讯,即可下发测试指令(如点击控件、输入文本)并接收执行结果。
-
服务端:核心是基于 Node.js 开发的 HTTP 服务(纠正:并非客户端基于 Node.js,而是服务端),负责接收、解析客户端的 HTTP 请求,然后调用对应平台的底层工作引擎(如 iOS 的 XCUITest、Android 的 UiAutomator2)执行具体的自动化操作,最后将执行结果(成功 / 失败、控件信息等)反馈给客户端。
该模式的优势:客户端与服务端解耦,服务端可部署在任意设备 / 服务器上(本地电脑、远程云服务器等),无需与客户端同机,提升了测试的灵活性。
无侵入性与跨环境兼容
-
无侵入性:测试过程中无需对被测应用进行修改(如植入测试代码),也无需重新打包,贴近真实用户的使用场景。
-
跨环境兼容:服务端无绑定特定部署环境的限制,可适配单机测试、分布式测试、云测平台集成等多种测试场景,满足不同规模的测试需求。
四、Appium 核心工作原理
1. Android 端工作原理
-
客户端编写好自动化脚本,启动测试后,向 Appium 服务端发送 HTTP POST 请求,携带 JSON 格式的配置信息(如设备 UDID、应用包名、启动 Activity 等),请求创建 Session 会话。
-
Appium 服务端解析配置信息,初始化测试环境,然后启动并连接运行在 Android 设备 / 模拟器上的Bootstrap.jar(中间件,运行在设备的 Android 系统中)。
-
Appium 服务端将解析后的测试指令(如 “点击登录按钮”)发送给 Bootstrap.jar,Bootstrap.jar 作为 “桥梁”,将这些指令转化为 Android 原生 UiAutomator 框架可识别的命令。
-
UiAutomator 框架(Android SDK 自带的原生 UI 自动化 Java 库)接收命令,执行具体的自动化操作(查找控件、触发点击 / 输入等事件),完成后将执行结果返回给 Bootstrap.jar。
-
Bootstrap.jar 将执行结果回传给 Appium 服务端。
-
Appium 服务端将结果封装为 HTTP 响应,返回给客户端,客户端脚本接收结果并继续执行后续步骤。
-
补充:针对 H5 页面(WebView 组件),由于 UiAutomator 对 H5 控件的定位和操作支持有限,Appium 会额外引入ChromeDriver,专门驱动 WebView 组件,实现 H5 页面的自动化测试,满足混合应用、移动网页应用的测试需求。
2. iOS 端核心工作原理(补充)
-
客户端同样发送 HTTP 请求与 Appium 服务端建立 Session,传递配置信息。
-
Appium 服务端解析后,调用XCUITest 驱动(主流),而 XCUITest 驱动的执行依赖WDA(WebDriverAgent)(Facebook 开源,运行在 iOS 设备上的中间件)。
-
WDA 与 iOS 系统底层交互,将 Appium 的自动化指令转化为 iOS 系统可执行的操作,完成后将结果逐层反馈给客户端。
-
针对 iOS 端的 H5 页面,Appium 引入 SafariDriver 实现 WebView 组件的自动化。
总结
-
Appium 是一款跨平台、多应用类型支持的移动端自动化测试框架,核心优势是 “一套 API 跨 iOS/Android 平台复用”。
-
底层依赖不同的工作引擎适配不同平台 / 系统版本,架构采用 C/S 模式,基于 WebDriver 协议进行扩展。
-
工作原理的核心是 “客户端下发指令 – 服务端解析转发 – 底层引擎 / 中间件执行 – 结果逐层反馈”,通过解耦的架构实现了灵活性和易用性的统一,成为移动端自动化测试的主流选择。
夜雨聆风