[TOC] # [1:Appium 介绍]() ## **官网介绍:** Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、</p>移动 Web 和混合应用。**原生应用**指那些用 iOS、 Android 或者 Windows SDKs 编写的应用。<p> **移动 Web 应用**是用移动端浏览器访问的应用( Appium 支持 iOS 上的 Safari 、Chrome 和 Android 上的内置浏览器)。**混合应用**带有一个「webview」的包装器——用来和 Web 内容交互的原生控件。类似于[Apache Cordova](https://cordova.apache.org/)或[Phonegap](http://phonegap.com/)项目,<p>创建一个混合应用使得用 Web 技术开发然后打包进原生包装器创建一个混合应用变得容易了。 重要的是,Appium 是跨平台的:它允许你用同样的 API 对多平台(iOS、Android、Windows)写测试。做到在 iOS、Android 和 Windows 测试套件之间复用代码。 了解 Appium “支持”这些平台意味着什么、有哪些自动化方式的详细信息,请参见[Appium 支持的平台](http://appium.io/docs/cn/about-appium/platform-support/index.html)。 <br> <br> ### [2::Appium 的理念]() Appium 旨在满足移动端自动化需求的理念,概述为以下四个原则: 1. 你不应该为了自动化而重新编译你的应用或以任何方式修改它。 2. 你不应该被限制在特定的语言或框架上来编写运行测试。 3. 移动端自动化框架不应该在自动化接口方面重造轮子。 4. 移动端自动化框架应该开源,在精神、实践以及名义上都该如此。 <br> <br> ### [3:Appium 的概念]() **客户端 / 服务器架构** Appium 的核心一个是暴露 REST API 的 WEB 服务器。它接受来自客户端的连接,监听命令并在移动设备上执行,答复 HTTP 响应来描述执行结果。实际上客户端 / 服务器架构给予了我们许多可能性:我们可以使用任何有 http 客户端 API 的语言编写我们的测试代码,不过选一个[Appium 客户端程序库](http://appium.io/downloads)用起来更为容易。我们可以把服务器放在另一台机器上,而不是执行测试的机器。我们可以编写测试代码,并依靠类似[Sauce Labs](https://saucelabs.com/products/mobile-app-testing)的云服务接收和解释命令。 **会话(Session)** 自动化始终在一个会话的上下文中执行,这些客户端程序库以各自的方式发起与服务器的会话,但最终都会发给服务器一个`POST /session`请求,请求中包含一个被称作「预期能力(Desired Capabilities)」的 JSON 对象。这时服务器就会开启这个自动化会话,并返回一个用于发送后续命令的会话 ID。 **预期能力(Desired Capabilities)** 预期能力(Desired Capabilities)是一些发送给 Appium 服务器的键值对集合(比如 map 或 hash),它告诉服务器我们想要启动什么类型的自动化会话。也有许多能力(Capabiliti es)可以修改服务器在自动化过程中行为。例如,我们可以将`platformName`能力设置为`iOS`,以告诉 Appium 我们想要 iOS 会话,而不是 Android 或者 Windows 会话。或者我们也可以设置`safariAllowPopups`能力为`true`,确保我们在 Safari 自动化会话期间可以使用 JavaScript 打开新窗口。有关 Appium 能力的完整列表,请参阅[能力文档](http://appium.io/docs/cn/writing-running-appium/caps/index.html)。 **Appium 服务器** Appium 是一个用 Node.js 写的服务器。可以从[源码](https://github.com/appium/appium/blob/master/docs/cn/contributing-to-appium/appium-from-source.md)构建安装或者从[NPM](https://www.npmjs.com/package/appium)直接安装: ``` $ npm install -g appium $ appium ``` Appium 的`beta`版本可以通过 NPM 使用`npm install -gappium@beta`指令进行安装。它是开发版本,所以可能存在破坏性的变更。在安装新版本请卸载`appium@beta`(`npm uninstall -gappium@beta`)以获得一组干净的依赖。 **Appium 客户端** 有一些客户端程序库(分别在 Java、Ruby、Python、PHP、JavaScript 和 C# 中实现),它们支持 Appium 对 WebDriver 协议的扩展。你需要用这些客户端程序库代替常规的 WebDriver 客户端。你可以在[这里](http://appium.io/docs/cn/about-appium/appium-clients/index.html)浏览所有程序库的列表。 **[Appium Desktop](https://github.com/appium/appium-desktop)** 这有一个 Appium 服务器的图形界面封装可以下载,它适用于任何平台。它打包了 Appium 服务器运行需要的所有东西,所以你不需要为 Node 而烦恼。它们还提供一个 Inspector 使你可以查看应用程序的层级结构。这在写测试时可以派上用场。 ### 入门指南 [入门指南](http://appium.io/docs/en/about-appium/getting-started/index.html)(English) 了解更多详细的要求和指南呢? # 2:appium运行原理(精简介绍) ## 1:Appium运行原理 Appium是一个开源的自动化框架,可用于测试**原生APP**,**混合型APP**和**WEB APP**。它通过**WebDriver协议**驱动iOS,Android和Windows系统app。 重要的是Appium是**跨平台**的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。 ![](https://img.kancloud.cn/b7/fa/b7fa48502b7cc9e217015207d586d57e_849x321.png) 如图所示,appium主要分为三个点:**client端**,**server端**,及**移动设备** * client端:用各类语言写的测试脚本 * server端:我们安装appium工具的那部分,专门用来监听并接收来自client端的请求,转发请求并控制移动设备执行测试,默认开启并监听4723接口 * 移动设备:支持三类设备,我们的最终目的:在设备上自动执行指定的操作 **整个执行过程包括**: 1. 在某台服务器上安装appium工具(server端),开启进程(默认4723端口)监听; 2. 编写测试脚本,放置到服务器上,执行该测试脚本(相当于发送命令给server端); 3. 移动设备接收到server端发送过来的命令,执行指定的操作。 ## 2:Appium 在 Android 上的架构 ![](https://img.kancloud.cn/d1/12/d11266d08bc2e509ad02bb9a2c7a6d3b_697x366.png) 通过架构图,我们可以知道appium是基于WebDriver协议的,它利用Bootstrap调用google公布的android自动化测试框架UIautomator的命令来实现app自动化。