天天看點

Appium移動自動化架構Appium 介紹(參考Appium 官方資料)

appium 架構的功能

(1)支援ios、android,可在多台機器上并行app 自動化,測試機型适配。 

(2)代碼實作關鍵字驅動:

測試集:關聯excel 測試用例和腳本配置。

測試資料:excel 存儲輸入資料、控件元素、測試結果。

測試腳本:由java 和testng 編寫,分層結構有case、log、config、report 以及data 等。

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

從功能測試用例中抽取需重複執行的、主要的功能進行用例覆寫。

支援用例failed(失敗)時自動截屏。

failed(失敗)用例自動重複執行數遍。

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

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

appium 自動化測試一個app 的基本過程如下:

  基于appium 自動化測試架構,我們要進行的是連接配接電腦、連接配接手機、解鎖、安裝app、解除安裝app、啟動app、元素定位、元素的操作、螢幕的操作、頁面等待、異常處理截圖、資料校驗、日志、報告等一系列自動化測試執行的詳細過程。 

appium 自動化架構元素控件的捕獲,根據捕獲到的元素控件進行相應的操作。 

appium 元素控件有多種定位方法,最常用的是元素的id(即by.id)和元素的值(即by.name)。還可以通過元素類型tagname、元素的位置xpath、手機裝置的坐标等進行定位操作。安卓的元素控件可以通過sdk 中的uiautomatorviewer.bat 檔案進行錄制和捕獲定位,如下圖所示。 

Appium移動自動化架構Appium 介紹(參考Appium 官方資料)
Appium移動自動化架構Appium 介紹(參考Appium 官方資料)
Appium移動自動化架構Appium 介紹(參考Appium 官方資料)

上圖中,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 是一個移動端自動化測試開源工具,支援ios 和android 平台,支援python、java 等語言,即同一套java 或python 腳本可以同時運作在ios 和android平台。 

appium 是跨平台的,即可以針對不同的平台用一套api 來編寫測試用例。 

appium 是一個c/s 架構,核心是一個 web 伺服器,它提供了一套 rest 的接口。當收到用戶端的連接配接後,就會監聽到指令,然後在移動裝置上執行這些指令,最後将執行結果放在 http 響應中返還給用戶端。

  自動化始終圍繞一個session(會話)進行。用戶端初始化一個session 來與服務端互動,不同的語言有不同的實作方式,但是它們最終都是發送一個post 請求給服務端,請求中包含一個json 對象,其被稱作“desired capabilities”。此時,服務端就會開啟一個自動化的 session,然後傳回一個session id,session id 将會被使用者發送後續的指令。

  desired capabilities 是一些鍵值對的集合(比如一個 map 或者 hash)。用戶端将這些鍵值對發送給服務端,告訴服務端我們想要怎樣測試。比如,我們可以把platformname capability 設定為 ios,告訴appium 服務端,我們想要一個ios 的session,而不是一個 android 的session。

  appium server 是用 node.js 寫的,我們既可以用源碼編譯,也可以從 npm 直接安裝。 

appium 服務端有很多語言庫,如 java、ruby、python、php、javascript 以及c#等,這些庫都實作了 appium 對 webdriver 協定的擴充。當使用 appium 的時候,你隻需使用這些庫代替正常的 webdriver 庫就可以了。

  此用戶端的概念不是我們傳統意義上的用戶端,更好的了解方式是一個擴充的webdriver 協定庫,當你用自己喜歡的語言寫case 時,會将該語言擴充的webdrvier庫添加到自己的環境中,這時你可以把它了解為這就是個用戶端。 

appium clients 用戶端的安裝包如下。 

mac 機器上直接運作appium.dmg;windows 機器上運作appium.exe。

  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移動自動化架構Appium 介紹(參考Appium 官方資料)

appium 的核心是一個遵守rest 設計風格的web 伺服器,它接收用戶端的連接配接和指令,在手機裝置上執行指令,然後通過http 的響應收集指令執行的結果。這種架構給我們提供了很好的開放特性:隻要某種語言有http 用戶端的api,我們就可以通過這個語言寫自己的測試代碼。 

Appium移動自動化架構Appium 介紹(參考Appium 官方資料)

繼續閱讀