[四]Android App自動化測試 - Appium教學 - Appium 介紹
Appium
介紹
Appium 是一套開源的應用程式自動化測試工具,支援 iOS 平台和 Android 平台上的原生應用(Native),Mobile web 應用和混合應用(Hybrid)三種不同類型的應用程式上進行自動測試。
l
原生(Native) 指的是以 iOS、Android 或 Windows 提供的 SDK 工具所撰寫的 Apps。例如手機內建的電話
App。
l
混合(Hybrid) 涵蓋所有主要以 ”webview“ 包裝層、再以原生控制項與 web 內容互動的 App,例如所有以 PhoneGap 技術封裝的專案。可以幫助開發者使用網頁技術開發應用,然後用原生代碼封裝,這些就是混合應用。
l
Mobile Web 基本上則是透過手機內瀏覽器呈現的 Web App。Appium 支援以
Safari/Chrome 或是封裝好的 built-in ‘Browser’ App 進行自動化測試。
最重要的是,Appium 是跨平台的測試工具:它允許你針對多個平台(iOS / Android / Windows)使用相同的 API 撰寫測試;換句話說,平台間的測試組合能夠有效地重用。
Appium
的理念
為了滿足移動自動化需求,Appium 的自動化設計可以被概括成以下四條原則:
l
你無需為了自動化,而重新編譯或者修改你的應用。
l
你不應該被鎖定在特定語言或框架之下撰寫、及進行測試。
l
自動化測試框架的不應該在 APIs 重造輪子,重複已經有的東西。
l
無論是精神上,還是名義上,都必須開源。
Appium
設計
基於原則 #1,Appium 實際上使用平台(Android / iOS / Windows)原先就提供的自動化框架進行操作,所以我們不需要把加入某種 Appium 專用的 lib、程式碼,或是任何第三方的框架之類的東西到 App 裡。
基於原則 #2,Appium 使用 WebDriver API(aka “Selenium WebDriver”)作為 client-server 協定,所以只要能夠發送正確 HTTP 請求的語言,通通透過 REST API 拉進來做成大雜燴!目前已經實現了大多數流行語言版本的客戶端,這意味著你可以使用任何測試套件或者測試框架。客戶端庫就是簡單的HTTP 客戶,可以以任何你喜歡的方式潛入你的代碼。Appium 和 WebDriver 客戶端不是技術意義上的“測試框架”,而是“自動化庫”。你可以在你的測試環境中隨意使用這些自動化庫!
換句話說,你可以在本機執行測試,由遠端的 Appium
Server 替你跑出結果,而且你可以用你喜歡的語言寫 test case;同時你測試的 App 就是你所發行的 App。
事實上 WebDriver 已經成為 web 瀏覽器自動化的標準,也成了 W3C 的標準 —— W3C Working Draft。我們又何必為移動做一個完全不同的呢?所以我們擴充了WebDriver 的協議,在原有的基礎上添加移動自動化相關的 API 方法,這也滿足了第三條理念。
以下粗列 Appium 所使用的自動化框架及其對應版本:
l
iOS: Apple’s UIAutomation
l
Android 4.2+: Google’s
UiAutomator
l
Android 2.3+: Google’s
Instrumentation. (Selendroid)
l
Windows: Microsoft’s
WinAppDriver (Supports UWP and Windows 10 PC).
Appium 整套架構大致如下圖:
基本上 Appium Server 就負責以下幾件事:
- 接收 Client 的連線
- 監聽指令
- 執行指令
- 回傳指令執行狀態
Appium
概念
Client / Server 架構
Appium 的核心是一個公開 REST API 的 Web Server。它負責監聽來自
Client 的連線與指令、並且把執行結果以 HTTP 狀態的方式回應。
所以我們得以使用各種不同語言撰寫測試程式 — 只要該語言擁有 HTTP Client API 即可;當然,還是用現成的 Appium
client libraries 會比較方便。
基於這樣的架構,我們也能把 Appium
Server 跟實際執行測試的環境分開,甚至把 Server 託管在類似 Sauce Labs 這樣的雲端服務上,視需要以提供更多的靈活性。
Session
自動化始終圍繞一個session進行,客戶端初始化一個seesion(會話)來與服務端交互,不同的語言有不同的實現方式,但是他們最終都是發送為一個POST請求給服務端,請求中包含一個JSON對象,被稱作“desired capabilities”。此時,當收到 JSON 之後,Server 會建立一組對應的
automation-session 並回傳一組用於發送其他指令的 session ID,session ID將會被用戶發送後續的命令。
Desired Capabilities
基本上這是一組 Key-Value 的組合值,用來告訴 Appium Server 要操作怎樣的對象。
Capabilities 會影響 Server 在自動化測試過程中的行為,例如我們可以設定 platformName的值為 iOS,告訴 Appium 我們要啟動一組 iOS 的 session。
或是,我們也能把
safariAllowPopups 設定為 true,確保在進行 Safari
automation session 的過程中能夠允許以 javascript 的方是開啟一個新的視窗。
例如,以下定義告訴 Appium 我們要使用 Appium v1.5 啟動一組操作 OS 為 Android 6.0、設備叫做 device 的 session(實際上此為 Genymoton 模擬器)。
Appium Server
Appium Server 是由 NodeJs 撰寫而成,你可以參考這份文件,自己 built && install
整個環境。或是直接經由 NPM 安裝:
$ npm install -g appium
覺得 NodeJs 麻煩嗎?你喜歡的話可以由 appium.io 下載 Appium Desktop App,基本上就是已經封裝好 Server + GUI 介面,同時送一個可以讓你檢視 App 層次結構的 Inspector。
Appium 服務端
Appium 服務端有很多語言庫 Java, Ruby, Python, PHP, JavaScript 和 C#,這些庫都實現了 Appium 對 WebDriver 協議的擴展。當使用
Appium 的時候,你只需使用這些庫代替常規的 WebDriver 庫就可以了。 你可以從這裡看到所有的庫的列表。
Appium.app, Appium.exe
我們提供了 GUI 封裝的 Appium 服務端下載,它封裝了運行 Appium服務端的所有依賴,而不需要擔心怎樣安裝Node.js。其中還包括一個Inspector工具,可以幫助你檢查應用的界面層級,這樣寫測試用例時更方便。
留言
張貼留言