小編說(shuō):Appium 是一個(gè)移動(dòng)端自動(dòng)化測(cè)試開(kāi)源工具,可以針對(duì)不同的平臺(tái)用一套API 來(lái)編寫(xiě)測(cè)試用例。本文對(duì)Appium自動(dòng)化測(cè)試框架的功能進(jìn)行了概括。
本文選自《軟件自動(dòng)化測(cè)試開(kāi)發(fā)》,了解本書(shū)詳情請(qǐng)點(diǎn)擊閱讀原文。
Appium 框架的功能
(1)支持iOS、Android,可在多臺(tái)機(jī)器上并行App 自動(dòng)化,測(cè)試機(jī)型適配。
(2)代碼實(shí)現(xiàn)關(guān)鍵字驅(qū)動(dòng):
測(cè)試集:關(guān)聯(lián)Excel 測(cè)試用例和腳本配置。
測(cè)試數(shù)據(jù):Excel 存儲(chǔ)輸入數(shù)據(jù)、控件元素、測(cè)試結(jié)果。
測(cè)試腳本:由Java 和TestNG 編寫(xiě),分層結(jié)構(gòu)有case、log、config、report 以及data 等。
(3)自動(dòng)測(cè)試用例執(zhí)行:
從功能測(cè)試用例中抽取需重復(fù)執(zhí)行的、主要的功能進(jìn)行用例覆蓋。
支持用例failed(失?。r(shí)自動(dòng)截屏。
failed(失敗)用例自動(dòng)重復(fù)執(zhí)行數(shù)遍。
(4)持續(xù)集成環(huán)境Jenkins,定時(shí)自動(dòng)構(gòu)建和執(zhí)行測(cè)試任務(wù)。
測(cè)試結(jié)果報(bào)告展示,自動(dòng)郵件展示。
Appium 自動(dòng)化測(cè)試一個(gè)App 的基本過(guò)程如下:
測(cè)試App 的基本過(guò)程
基于Appium 自動(dòng)化測(cè)試框架,我們要進(jìn)行的是連接電腦、連接手機(jī)、解鎖、安裝App、卸載App、啟動(dòng)App、元素定位、元素的操作、屏幕的操作、頁(yè)面等待、異常處理截圖、數(shù)據(jù)校驗(yàn)、日志、報(bào)告等一系列自動(dòng)化測(cè)試執(zhí)行的詳細(xì)過(guò)程。
Appium 自動(dòng)化框架元素控件的捕獲,根據(jù)捕獲到的元素控件進(jìn)行相應(yīng)的操作。
Appium 元素控件有多種定位方法,最常用的是元素的ID(即By.id)和元素的值(即By.name)。還可以通過(guò)元素類(lèi)型TagName、元素的位置XPath、手機(jī)設(shè)備的坐標(biāo)等進(jìn)行定位操作。安卓的元素控件可以通過(guò)SDK 中的uiautomatorviewer.bat 文件進(jìn)行錄制和捕獲定位,如下圖所示。
上圖中,Node Detail 下面的resource-id com.test.seller:id/phone_edit1 對(duì)應(yīng)Excel 和代碼中的定位方法By.id,控件元素?cái)?shù)據(jù)text 13798359580 對(duì)應(yīng)Excel 和代碼中的操作方法sendkeys(),控件元素賦值數(shù)據(jù)為13798359580。
可以這樣理解:首先找到這個(gè)文本框,接著給這個(gè)文本框輸入數(shù)據(jù)。即通過(guò)ID屬性值com.test.seller:id/phone_edit1,找到此用戶名文本框的控件元素,然后通過(guò)sendkeys()方法輸入用戶名數(shù)據(jù)13798359580 到此用戶名文本。其他自動(dòng)化測(cè)試步驟的定位方法、控件元素以及操作方法也都與此類(lèi)似。實(shí)際上,自動(dòng)化測(cè)試就是通過(guò)程序代碼來(lái)實(shí)現(xiàn)模擬手動(dòng)測(cè)試去操作一遍的過(guò)程。
上面介紹了用戶名文本框輸入用sendkeys()方法,那么其他元素的操作方法有哪些呢?元素操作方法大致有單擊(click)、輸入(sendkeys)、元素滑動(dòng) 、頁(yè)面滑動(dòng)、長(zhǎng)按、下拉、彈出、屏幕放大縮小等,最常用的就是單擊和輸入。
數(shù)據(jù)校驗(yàn)。其實(shí)元素本身就是數(shù)據(jù)校驗(yàn),當(dāng)程序找不到元素時(shí),用例就會(huì)失敗。
另外,測(cè)試用例時(shí)可以加入一個(gè)或多個(gè)斷言進(jìn)行驗(yàn)證數(shù)據(jù),還可設(shè)置步驟等待延遲時(shí)間。
測(cè)試結(jié)果。測(cè)試用例中記錄了運(yùn)行后的測(cè)試結(jié)果,如pass、failed 或是skip。
(此部分會(huì)在《軟件自動(dòng)化測(cè)試開(kāi)發(fā)》第4章中進(jìn)行詳細(xì)講解)
Appium 介紹(參考Appium 官方資料)
Appium 是一個(gè)移動(dòng)端自動(dòng)化測(cè)試開(kāi)源工具,支持iOS 和Android 平臺(tái),支持Python、Java 等語(yǔ)言,即同一套Java 或Python 腳本可以同時(shí)運(yùn)行在iOS 和Android平臺(tái)。
Appium 是跨平臺(tái)的,即可以針對(duì)不同的平臺(tái)用一套API 來(lái)編寫(xiě)測(cè)試用例。
Appium 是一個(gè)C/S 架構(gòu),核心是一個(gè) Web 服務(wù)器,它提供了一套 REST 的接口。當(dāng)收到客戶端的連接后,就會(huì)監(jiān)聽(tīng)到命令,然后在移動(dòng)設(shè)備上執(zhí)行這些命令,最后將執(zhí)行結(jié)果放在 HTTP 響應(yīng)中返還給客戶端。
Session
自動(dòng)化始終圍繞一個(gè)Session(會(huì)話)進(jìn)行??蛻舳顺跏蓟粋€(gè)Session 來(lái)與服務(wù)端交互,不同的語(yǔ)言有不同的實(shí)現(xiàn)方式,但是它們最終都是發(fā)送一個(gè)POST 請(qǐng)求給服務(wù)端,請(qǐng)求中包含一個(gè)JSON 對(duì)象,其被稱(chēng)作“Desired Capabilities”。此時(shí),服務(wù)端就會(huì)開(kāi)啟一個(gè)自動(dòng)化的 Session,然后返回一個(gè)Session ID,Session ID 將會(huì)被用戶發(fā)送后續(xù)的命令。
Desired Capabilities
Desired Capabilities 是一些鍵值對(duì)的集合(比如一個(gè) map 或者 hash)??蛻舳藢⑦@些鍵值對(duì)發(fā)送給服務(wù)端,告訴服務(wù)端我們想要怎樣測(cè)試。比如,我們可以把platformName capability 設(shè)置為 iOS,告訴Appium 服務(wù)端,我們想要一個(gè)iOS 的session,而不是一個(gè) Android 的session。
Appium Server 服務(wù)端
Appium Server 是用 Node.js 寫(xiě)的,我們既可以用源碼編譯,也可以從 NPM 直接安裝。
Appium 服務(wù)端有很多語(yǔ)言庫(kù),如 Java、Ruby、Python、PHP、JavaScript 以及C#等,這些庫(kù)都實(shí)現(xiàn)了 Appium 對(duì) WebDriver 協(xié)議的擴(kuò)展。當(dāng)使用 Appium 的時(shí)候,你只需使用這些庫(kù)代替常規(guī)的 WebDriver 庫(kù)就可以了。
Appium Clients 客戶端
此客戶端的概念不是我們傳統(tǒng)意義上的客戶端,更好的理解方式是一個(gè)擴(kuò)展的WebDriver 協(xié)議庫(kù),當(dāng)你用自己喜歡的語(yǔ)言寫(xiě)case 時(shí),會(huì)將該語(yǔ)言擴(kuò)展的WebDrvier庫(kù)添加到自己的環(huán)境中,這時(shí)你可以把它理解為這就是個(gè)客戶端。
Appium Clients 客戶端的安裝包如下。
Mac 機(jī)器上直接運(yùn)行Appium.dmg;Windows 機(jī)器上運(yùn)行Appium.exe。
Appium Android/iOS 工作原理
API 接口調(diào)用Selenium 的接口,Appium Server 接收WebDriver 標(biāo)準(zhǔn)請(qǐng)求,解析請(qǐng)求內(nèi)容,調(diào)用對(duì)應(yīng)的框架響應(yīng)操作。代碼將DesiredCapability 中的鍵值對(duì)組合成一個(gè)JSON,然后通過(guò)HTTP 協(xié)議發(fā)送到Appium服務(wù)器創(chuàng)建一個(gè)session。代碼與Appium的所有交互都是圍繞著這個(gè)session 進(jìn)行的。session 創(chuàng)建成功后,Appium 再通過(guò)USB接口與手機(jī)之間創(chuàng)建TCP 連接,先安裝一些服務(wù)端App,比如Android API 4.2+是uiautomator,Android 2.3+是Instrumentation;如果是iOS,則是UiAutomation。手機(jī)的操作都是由Appium 發(fā)送指令到uiautomator,然后再由uiautomator 進(jìn)行控制的。
Appium 原理圖如下。
Appium 的核心是一個(gè)遵守REST 設(shè)計(jì)風(fēng)格的Web 服務(wù)器,它接收客戶端的連接和命令,在手機(jī)設(shè)備上執(zhí)行命令,然后通過(guò)HTTP 的響應(yīng)收集命令執(zhí)行的結(jié)果。這種架構(gòu)給我們提供了很好的開(kāi)放特性:只要某種語(yǔ)言有HTTP 客戶端的API,我們就可以通過(guò)這個(gè)語(yǔ)言寫(xiě)自己的測(cè)試代碼。
-----------------------------------------------------------
博文視點(diǎn)
您閱讀的專(zhuān)業(yè)智庫(kù)
喜歡請(qǐng)分享至朋友圈
了解更多圖書(shū)詳情請(qǐng)點(diǎn)擊閱讀原文 如下鏈接:
《軟件自動(dòng)化測(cè)試開(kāi)發(fā)》
長(zhǎng)按二維碼輕松關(guān)注

