Appium基本概念和原理

296 阅读4分钟

一、基本概念

1 XCUITest —— Apple 官方提供的 iOS UI 自动化测试框架

    它是 Xcode 的一部分,基于 XCTest 框架开发,用来编写 UI 测试用例。

    只能使用 Swift 或 Objective-C 编写测试脚本,执行测试必须在 Xcode 环境中进行,原生、安全、稳定,缺点是:

  • 脚本开发门槛高(必须用 Xcode 和 Swift/OC)。
  • 编写脚本后不能跨平台。
  • 不提供 WebDriver 协议,无法直接用 Appium 或 Selenium 驱动。

2 WebDriverAgent(WDA) —— Facebook 开源 的一个项目,它的作用是:

  • 将 Apple 的 XCUITest 封装成 WebDriver 接口(W3C WebDriver 协议)
  • 对外暴露一个 HTTP 服务,让外部工具(比如 Appium)可以通过网络请求控制 iOS 设备。

    简单来说:WDA 是一个 “桥梁”,让 Appium 这样的自动化框架可以通过标准协议间接控制 iOS 的 UI 元素。

二、工作流

1.测试脚本(Appium Client)

         使用 Python、Java、JS 等语言编写的 Appium 脚本,调用 AppiumDriver 提供的方法,如 find_element, click, send_keys 等。

2.Appium Server(本地或远程)

  1. 监听特定端口(默认是 4723),接收测试脚本发来的 HTTP 请求(WebDriver 协议)。

  2. 根据请求的 platform(iOS / Android)选择对应的 driver:

    a.  iOS:调用 WebDriverAgent
    b.  Android:调用 UiAutomator2
    

3 . WebDriverAgent(iOS 专用 driver)

        c.被 Appium Server 控制并部署到设备上。

        d.作为 HTTP 服务运行在 iOS 设备上(默认:8100 端口,可以在启动Appium server时通过以下参数注入端口:--driver-xcuitest-webdriveragent-port 8410)。

        e.将 Appium Server 的命令转换成 XCUITest 的调用。

4 . XCUITest

        f.由 WebDriverAgent 间接调用,用于在应用上执行真实的点击、输入、滑动等操作。


三、Appium&WDA工作原理

  • Appium

Appium并不能直接控制 iOS 的 UI 元素,因为 iOS 系统不允许未签名的第三方程序直接调用 UI 元素。所以Appium 使用 WebDriverAgent 作为 iOS 平台的驱动组件,借助它来实现控制。

在安装Appium时,例如通过 npm 安装 Appium:npm install -g appium ,实际上会自动包含(或在使用时自动下载)以下内容:

  • Appium 主程序(server)
  • iOS 驱动(appium-xcuitest-driver)
  • WebDriverAgent 项目的完整源码(在 node_modules/appium-webdriveragent 目录中)

也就是说,Appium安装包 已经内置WebDriverAgent 项目代码,并且具备了 自动构建并部署 WDA 的能力,并且 Appium 的 iOS 驱动(xcuitest-driver)能够自动构建、签名、安装并启动 WebDriverAgent 到真机或模拟器上运行。

  • WebDriverAgent(WDA)

WDA最终是要 安装到 iOS 设备上运行的(WDA Runner app) ,但它的 源代码和构建逻辑都在你的电脑上,由 Appium 驱动自动执行。

  • Appium & WDA 的交互

      (1)当运行 Appium 自动化测试并连接 iOS 真机时,Appium 的工作流程为:

             1.查找或拉取 WebDriverAgent 源码

                  a.默认路径:<appium安装目录>/node_modules/appium-webdriveragent

             2.使用 xcode build 自动编译 WDA

                  a.使用提供的 开发者证书签名(需要提前配置 Xcode 的 xcodeConfig 和 teamId)

             3.把编译后的 WDA Runner app 安装到 iPhone 上

             4.在设备上启动 WDA 服务(监听 8100 端口)

             5.Appium Server 与它建立 HTTP 通信,开始转发测试命令

    (2)当执行自动化代码时,例如driver.find_element_by_accessibility_id("Login").click(),工作流为:

           1.Appium Client ⟶ Appium Server 发送 POST /element 请求

           2.Appium Server ⟶ 通过 USB 转发到设备上的 WDA(监听 8100)

           3.WDA ⟶ 使用 XCTest 查找元素并执行 .tap()

           4.WDA ⟶ 返回 JSON 格式结果

           5.Appium Server ⟶ 把结果返回给客户端脚本

总结,在整个 Appium 自动化架构中,Appium Server 是中央调度器,负责接收客户端命令并将其转发给 WebDriverAgent(iOS)或 UiAutomator2(Android)执行。

名称角色功能说明
XCUITestApple 原生 UI 测试框架控制 iOS 元素提供系统API、被 WebDriverAgent 调用、执行真实UI操作
WebDriverAgentiOS driver将 XCUITest 封装成 WebDriver 接口被 Appium 调用、运行在设备上,执行 Appium 指令
Appium跨平台自动化框架编写/执行自动化测试脚本通过 WebDriverAgent 实现对 iOS 控制
Appium Client测试脚本由开发或测试人员编写
Appium Server指挥中心负责调度设备、桥接 WebDriverAgent、接收命令,转发给 WDA

****