[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來編寫測試用例。

如圖所示,appium主要分為三個點:**client端**,**server端**,及**移動設備**
* client端:用各類語言寫的測試腳本
* server端:我們安裝appium工具的那部分,專門用來監聽并接收來自client端的請求,轉發請求并控制移動設備執行測試,默認開啟并監聽4723接口
* 移動設備:支持三類設備,我們的最終目的:在設備上自動執行指定的操作
**整個執行過程包括**:
1. 在某臺服務器上安裝appium工具(server端),開啟進程(默認4723端口)監聽;
2. 編寫測試腳本,放置到服務器上,執行該測試腳本(相當于發送命令給server端);
3. 移動設備接收到server端發送過來的命令,執行指定的操作。
## 2:Appium 在 Android 上的架構

通過架構圖,我們可以知道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