[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自动化。
- 自动化测试之程
- 第一章:adb——小识
- 一:adb介绍
- 二:adb安装与卸载
- 三:adb获取包名
- 四:adb获取日志
- 五:其他常用命令
- 第二章:LIunx
- 一:Liunx:简介
- 二:Liunx:常用命令
- 第三章:测试常见面试题
- 一:HTTP与HTTPS
- 二:token-cookie-session
- 三:定位以及数据分离
- 四:接口测试面试题
- 五:Python面试题
- 数据类型
- 1:python面试题
- 六:selenium面试题
- 七:liunx面试题
- 1:liunx查看日志
- 二:文件操作
- 八:WebSocket
- 九:腾讯面试题
- 十:关于adb的面试题
- 小结:不常见的面试题
- 模拟面试
- 第四章:selenium自动化
- 一:selenium介绍以及环境搭建
- 二:selenium项目目录解析
- 三:selenium项目方法实现
- 四:八大定位方法
- 五:selenium基本操作
- 六:selenium显示等待和隐式等待
- 七:selenium键盘操作
- 八:获取断言信息
- 九:selenium窗口操作
- 十:selenium-cookie操作
- 十二:selenium截图操作
- 第五章:Appium-Python篇
- 一:Appium介绍
- 二:windows搭建Appium
- 三:Mac版Appium搭建IOS
- 四:Appium初次启动
- 五:Capsbility详解
- 六:定位元素以及工具介绍
- 七:Appium代码实现
- 八:Capability配置数据与定位参数分离
- 九:定位方法以及元素等待
- 十:页面滑动
- 十一:appium截图
- 十二:Automator简介
- 十三:uiautomator定位方式
- 十四:Monkey介绍
- 十五:Monkey命令解析
- 十六:Monkey查看日志
- 第六章:接口自动化测试
- 一:什么是接口自动化
- 二:HTTP协议
- 三:Request接口访问
- 四:unittest使用
- 五:获取cookie以及请求处理
- 六:接口异常处理
- 七:接口测试框架设计到开发
- 八:接口测试之数据库操作
- 九:定时任务
- 第七章:Python负载工具Locust
- 一:Locust介绍
- 第八章:搭建测试环境
- 一:安装java的jdk
- 二:安装tomcat
- 三:Mysql安装
- 第九章:ios自动化系列
- 一:ios自动化介绍
- 二:ios自动化环境搭建
- 三:ios常用命令
- 第十章:测试工具系列
- 一:postman系列
- 1:postman介绍
- 2:postman界面介绍
- 3:postman请求实例
- 4:postman高阶应用
- 5:collection用例集
- 6:postman上传图片
- 7:postman上传文件
- 8:postman使用Headers
- 二:jmeter
- 三:charles