Appium移動自動化框架

引言:Appium 是一個移動端自動化測試開源工具,可以針對不同的平臺用一套API來編寫測試用例。本文對Appium自動化測試框架的功能進行了概括。 本文選自《軟件自動化測試開發》。

Appium 框架的功能

(1)支持iOS、Android,可在多臺機器上並行App 自動化,測試機型適配。 
(2)代碼實現關鍵字驅動:

  • 測試集:關聯Excel 測試用例和腳本配置。
  • 測試數據:Excel 存儲輸入數據、控件元素、測試結果。
  • 測試腳本:由Java 和TestNG 編寫,分層結構有case、log、config、report 以及data 等。

(3)自動測試用例執行:

  • 從功能測試用例中抽取需重複執行的、主要的功能進行用例覆蓋。
  • 支持用例failed(失敗)時自動截屏。
  • failed(失敗)用例自動重複執行數遍。

(4)持續集成環境Jenkins,定時自動構建和執行測試任務。

  • 測試結果報告展示,自動郵件展示。

Appium 自動化測試一個App 的基本過程如下:

測試App 的基本過程

  基於Appium 自動化測試框架,我們要進行的是連接電腦、連接手機、解鎖、安裝App、卸載App、啓動App、元素定位、元素的操作、屏幕的操作、頁面等待、異常處理截圖、數據校驗、日誌、報告等一系列自動化測試執行的詳細過程。 
Appium 自動化框架元素控件的捕獲,根據捕獲到的元素控件進行相應的操作。 
  Appium 元素控件有多種定位方法,最常用的是元素的ID(即By.id)和元素的值(即By.name)。還可以通過元素類型TagName、元素的位置XPath、手機設備的座標等進行定位操作。安卓的元素控件可以通過SDK 中的uiautomatorviewer.bat 文件進行錄製和捕獲定位,如下圖所示。 
圖片描述
圖片描述
圖片描述
  上圖中,Node Detail 下面的resource-id com.test.seller:id/phone_edit1 對應Excel 和代碼中的定位方法By.id,控件元素數據text 13798359580 對應Excel 和代碼中的操作方法sendkeys(),控件元素賦值數據爲13798359580。 
  可以這樣理解:首先找到這個文本框,接着給這個文本框輸入數據。即通過ID屬性值com.test.seller:id/phone_edit1,找到此用戶名文本框的控件元素,然後通過sendkeys()方法輸入用戶名數據13798359580 到此用戶名文本。其他自動化測試步驟的定位方法、控件元素以及操作方法也都與此類似。實際上,自動化測試就是通過程序代碼來實現模擬手動測試去操作一遍的過程。 
  上面介紹了用戶名文本框輸入用sendkeys()方法,那麼其他元素的操作方法有哪些呢?元素操作方法大致有單擊(click)、輸入(sendkeys)、元素滑動 、頁面滑動、長按、下拉、彈出、屏幕放大縮小等,最常用的就是單擊和輸入。 
  數據校驗。其實元素本身就是數據校驗,當程序找不到元素時,用例就會失敗。 
  另外,測試用例時可以加入一個或多個斷言進行驗證數據,還可設置步驟等待延遲時間。 
  測試結果。測試用例中記錄了運行後的測試結果,如pass、failed 或是skip。(此部分會在《軟件自動化測試開發》第4章中進行詳細講解)

Appium 介紹(參考Appium 官方資料)

  Appium 是一個移動端自動化測試開源工具,支持iOS 和Android 平臺,支持Python、Java 等語言,即同一套Java 或Python 腳本可以同時運行在iOS 和Android平臺。 
  Appium 是跨平臺的,即可以針對不同的平臺用一套API 來編寫測試用例。 
  Appium 是一個C/S 架構,核心是一個 Web 服務器,它提供了一套 REST 的接口。當收到客戶端的連接後,就會監聽到命令,然後在移動設備上執行這些命令,最後將執行結果放在 HTTP 響應中返還給客戶端。

Session

  自動化始終圍繞一個Session(會話)進行。客戶端初始化一個Session 來與服務端交互,不同的語言有不同的實現方式,但是它們最終都是發送一個POST 請求給服務端,請求中包含一個JSON 對象,其被稱作“Desired Capabilities”。此時,服務端就會開啓一個自動化的 Session,然後返回一個Session ID,Session ID 將會被用戶發送後續的命令。

Desired Capabilities

  Desired Capabilities 是一些鍵值對的集合(比如一個 map 或者 hash)。客戶端將這些鍵值對發送給服務端,告訴服務端我們想要怎樣測試。比如,我們可以把platformName capability 設置爲 iOS,告訴Appium 服務端,我們想要一個iOS 的session,而不是一個 Android 的session。

Appium Server 服務端

  Appium Server 是用 Node.js 寫的,我們既可以用源碼編譯,也可以從 NPM 直接安裝。 
  Appium 服務端有很多語言庫,如 Java、Ruby、Python、PHP、JavaScript 以及C#等,這些庫都實現了 Appium 對 WebDriver 協議的擴展。當使用 Appium 的時候,你只需使用這些庫代替常規的 WebDriver 庫就可以了。

Appium Clients 客戶端

  此客戶端的概念不是我們傳統意義上的客戶端,更好的理解方式是一個擴展的WebDriver 協議庫,當你用自己喜歡的語言寫case 時,會將該語言擴展的WebDrvier庫添加到自己的環境中,這時你可以把它理解爲這就是個客戶端。 
  Appium Clients 客戶端的安裝包如下。 
  Mac 機器上直接運行Appium.dmg;Windows 機器上運行Appium.exe。

Appium Android/iOS 工作原理

  API 接口調用Selenium 的接口,Appium Server 接收WebDriver 標準請求,解析請求內容,調用對應的框架響應操作。代碼將DesiredCapability 中的鍵值對組合成一個JSON,然後通過HTTP 協議發送到Appium服務器創建一個session。代碼與Appium的所有交互都是圍繞着這個session 進行的。session 創建成功後,Appium 再通過USB接口與手機之間創建TCP 連接,先安裝一些服務端App,比如Android API 4.2+是uiautomator,Android 2.3+是Instrumentation;如果是iOS,則是UiAutomation。手機的操作都是由Appium 發送指令到uiautomator,然後再由uiautomator 進行控制的。 
  Appium 原理圖如下。 
圖片描述
  Appium 的核心是一個遵守REST 設計風格的Web 服務器,它接收客戶端的連接和命令,在手機設備上執行命令,然後通過HTTP 的響應收集命令執行的結果。這種架構給我們提供了很好的開放特性:只要某種語言有HTTP 客戶端的API,我們就可以通過這個語言寫自己的測試代碼。 
  本文選自《軟件自動化測試開發》,點此鏈接可在博文視點官網查看。 
  圖片描述

發佈了187 篇原創文章 · 獲贊 0 · 訪問量 8388
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章