[四]Android App自動化測試 - Appium教學 - Appium 介紹

#本文部分翻譯/摘錄自 Appium 官方文件

Appium 介紹
Appium 是一套開源的應用程式自動化測試工具,支援 iOS 平台和 Android 平台上的原生應用(Native)Mobile web 應用和混合應用(Hybrid)三種不同類型的應用程式上進行自動測試。
l   原生(Native) 指的是以 iOSAndroid Windows 提供的 SDK 工具所撰寫的 Apps。例如手機內建的電話 App
l   混合(Hybrid) 涵蓋所有主要以 webview 包裝層、再以原生控制項與 web 內容互動的 App,例如所有以 PhoneGap 技術封裝的專案。可以幫助開發者使用網頁技術開發應用,然後用原生代碼封裝,這些就是混合應用。
l   Mobile Web 基本上則是透過手機內瀏覽器呈現的 Web AppAppium 支援以 Safari/Chrome 或是封裝好的 built-in Browser App 進行自動化測試。
最重要的是,Appium 是跨平台的測試工具:它允許你針對多個平台(iOS / Android / Windows)使用相同的 API 撰寫測試;換句話說,平台間的測試組合能夠有效地重用。
Appium 的理念
為了滿足移動自動化需求,Appium 的自動化設計可以被概括成以下四條原則:
l   你無需為了自動化,而重新編譯或者修改你的應用。
l   你不應該被鎖定在特定語言或框架之下撰寫、及進行測試。
l   自動化測試框架的不應該在 APIs 重造輪子,重複已經有的東西。
l   無論是精神上,還是名義上,都必須開源。
Appium 設計
基於原則 #1Appium 實際上使用平台(Android / iOS / Windows)原先就提供的自動化框架進行操作,所以我們不需要把加入某種 Appium 專用的 lib、程式碼,或是任何第三方的框架之類的東西到 App 裡。
基於原則 #2Appium 使用 WebDriver APIaka 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 IDsession 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 模擬器)。

相關 capabilities ,請參考 capabilities doc
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工具,可以幫助你檢查應用的界面層級,這樣寫測試用例時更方便。

留言

這個網誌中的熱門文章

[九]Android App自動化測試 - Appium教學 - 使用adb 連接手機

[一] Android App自動化測試 - Appium教學 - 基本概念與安裝各種組件