Appium 介绍
- Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。「原生应用」指那些用 iOS、 Android 或者 Windows SDKs 编写的应用。「移动 Web 应用」是用移动端浏览器访问的应用( Appium 支持 iOS 上的 Safari 、Chrome 和 Android 上的内置浏览器)。「混合应用」带有一个「webview」的包装器——用来和 Web 内容交互的原生控件,类似于 Apache Cordova 或 Phonegap 项目,创建一个混合应用使得用 Web 技术开发然后打包进原生包装器创建一个混合应用变得容易了
支持的平台
-
Appium 支持多种平台以及各种测试方式(native,hybrid,web,真机,模拟器,等等…)。这份文档的设计初衷就是为了搞清楚所支持平台的版本,以及所需的条件
-
iOS 平台支持
-
- 版本:9.0 及以上版本
-
- 设备:iPhone 模拟器,iPad 模拟器,以及 iPhone 和 iPad 的真机
-
- 是否支持 Native 应用:支持。如在模拟器执行,需要 debug 版本的 .app 包,在真机上运行则需要已签名的 .ipa 包。底层的框架是由苹果的 XCUITest (或 UIAutomation 支持更旧的版本) 所提供支持
-
- 是否支持移动端浏览器:支持。我们通过移动端的 Safari 进行自动化测试。对于真机,ios-webkit-remote-debugger 工具是必须的。可惜的是对于 Safari 的 native 部分的自动化目前还不支持。更多介绍请查看 mobile web doc(English)。
-
- 是否支持 Hybrid 应用:支持。如使用真机,ios-webkit-remote-debugger 工具也是必须的。更多介绍请查看 hybrid doc。
-
- 是否支持在一个 session 中多个应用的自动化:不支持
-
- 是否支持多设备同时执行自动化:不支持
-
- 是否支持第三方应用的自动化:仅支持在模拟器上仅有的第三方应用(设置,地图,等等…)。若在 iOS 10 及以上的版本,你同样可以在 home 界面做自动化。
-
- 是否支持自定义的、非标准的 UI 控件的自动化:只支持小部分。你需要在控件设置可识别的信息,从而对一些元素进行一些基础的自动化操作。
-
Android 平台支持
-
- 版本:4.3 及以上版本
-
- 4.3 以及更高的版本是通过 Appium 自己的 UiAutomator 库实现。这是默认的自动化后台。
-
- 设备:Android 模拟器以及 Android 真机
-
- 是否支持 Native 应用:支持
-
- 是否支持移动端浏览器:支持(除了使用 Selendroid 后台的时候)。Appium 绑定了一个 Chromedriver 服务,使用这个代理服务进行自动化测试。在 4.2 和 4.3 版本,只能在官方的 Chrome 浏览器或者 Chromium 执行自动化测试。在 4.4 及更高版本,可以在内置的 “浏览器” 应用上进行自动化了。更多介绍请查看 mobile web doc(English)。
-
- 是否支持 Hybrid 应用:支持。更多介绍请查阅 hybrid doc。
-
- 默认的 Appium 自动化后台:支持 4.4 以及更高版本
-
- Selendroid 自动化后台:支持 2.3 以及更高版本
是否支持多个 app 在同一个 session 中自动化:支持(除了使用 Selendroid 后台的时候)
- Selendroid 自动化后台:支持 2.3 以及更高版本
-
- 是否支持多个设备同时进行自动化:支持,即使 Appium 在开始的时候,使用不同的端口号作为服务器参数,–port, --bootstrap-port (或者 --selendroid-port) 还有 --chromedriver-port. 更多介绍请查看 server args doc。
-
- 支持第三方引用:支持(除了使用 Selendroid 后台的时候)
-
- 支持自定义的、非标准的 UI 控件的自动化:不支持
-
Windows 桌面支持
-
- Windows App Testing(English)
Appium 的理念
Appium 旨在满足移动端自动化需求的理念,概述为以下四个原则:
1.不应该为了自动化而重新编译你的应用或以任何方式修改它。
2.不应该被限制在特定的语言或框架上来编写运行测试。
3.移动端自动化框架不应该在自动化接口方面重造轮子。
4.移动端自动化框架应该开源,在精神、实践以及名义上都该如此。
Appium 的设计
那么 Appium 项目的架构是如何实现这些理念的呢?为了实现理念#1,使用了系统自带的自动化框架。这样,不需要把 Appium 特定的或者第三方的代码编译进你的应用,这意味着测试使用的应用与最终发布的应用并无二致。使用以下系统自带的自动化框架:
- iOS 9.3 及以上: 苹果的 XCUITest
- iOS 9.3 及以下: 苹果的 UIAutomation
- Android 4.3+: 谷歌的 UiAutomator / UiAutomator2
- Android 2.3+: 谷歌的 Instrumentation. (通过绑定独立的项目—— Selendroid 提供对 Instrumentation 的支持)
- Windows: 微软的 WinAppDriver
Appium 的概念
- 客户端 / 服务器架构
Appium 的核心一个是暴露 REST API 的 WEB 服务器。它接受来自客户端的连接,监听命令并在移动设备上执行,答复 HTTP 响应来描述执行结果。实际上客户端 / 服务器架构给予了我们许多可能性:我们可以使用任何有 http 客户端 API 的语言编写我们的测试代码,不过选一个 Appium 客户端程序库 用起来更为容易。我们可以把服务器放在另一台机器上,而不是执行测试的机器。我们可以编写测试代码,并依靠类似 Sauce Labs 的云服务接收和解释命令 - 会话(Session)
自动化始终在一个会话的上下文中执行,这些客户端程序库以各自的方式发起与服务器的会话,但最终都会发给服务器一个 POST /session 请求,请求中包含一个被称作「预期能力(Desired Capabilities)」的 JSON 对象。这时服务器就会开启这个自动化会话,并返回一个用于发送后续命令的会话 ID - 预期能力(Desired Capabilities)
预期能力(Desired Capabilities)是一些发送给 Appium 服务器的键值对集合(比如 map 或 hash),它告诉服务器我们想要启动什么类型的自动化会话。也有许多能力(Capabilities)可以修改服务器在自动化过程中行为。例如,我们可以将 platformName 能力设置为 iOS,以告诉 Appium 我们想要 iOS 会话,而不是 Android 或者 Windows 会话。或者我们也可以设置 safariAllowPopups 能力为 true ,确保我们在 Safari 自动化会话期间可以使用 JavaScript 打开新窗口。有关 Appium 能力的完整列表,请参阅 能力文档 - Appium 服务器
Appium 是一个用 Node.js 写的服务器。可以从源码构建安装或者从 NPM 直接安装:
$ npm install -g appium
$ appium
Appium 的 beta 版本可以通过 NPM 使用 npm install -g appium@beta 指令进行安装。它是开发版本,所以可能存在破坏性的变更。在安装新版本请卸载 appium@beta (npm uninstall -g appium@beta)以获得一组干净的依赖
- Appium 客户端
有一些客户端程序库(分别在 Java、Ruby、Python、PHP、JavaScript 和 C# 中实现),它们支持 Appium 对 WebDriver 协议的扩展。你需要用这些客户端程序库代替常规的 WebDriver 客户端。你可以在这里浏览所有程序库的列表 - Appium Desktop
这有一个 Appium 服务器的图形界面封装可以下载,它适用于任何平台。它打包了 Appium 服务器运行需要的所有东西,所以你不需要为 Node 而烦恼。它们还提供一个 Inspector 使你可以查看应用程序的层级结构。这在写测试时可以派上用场
搭建依赖
- Python
- Node.js
- Appium
- JDK
- Android SDK
- Appium-doctor
- Appium-desktop
- Appium server(2016停止更新,win2015,可以不用)