《軟件自動(dòng)化測(cè)試開(kāi)發(fā)》開(kāi)放試讀文章

小編說(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)注

圖片發(fā)自簡(jiǎn)書(shū)App

圖片發(fā)自簡(jiǎn)書(shū)App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0.小目標(biāo) 關(guān)于UI自動(dòng)化的定義,我想要的是自動(dòng)地按照流程去點(diǎn)擊頁(yè)面、輸入數(shù)據(jù),不需要人去參與,節(jié)省人工時(shí)間。比如...
    孢子菌閱讀 15,818評(píng)論 10 47
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 前言 做過(guò)自動(dòng)化測(cè)試的人應(yīng)該都會(huì)有這樣一種體會(huì),要寫(xiě)個(gè)自動(dòng)化demo測(cè)試用例很容易,但是要真正將自動(dòng)化測(cè)試落地,對(duì)...
    debugtalk閱讀 1,561評(píng)論 0 5
  • 前言 做Android端功能自動(dòng)化已有2年多的時(shí)間了,使用過(guò)的功能自動(dòng)化框架有Robotium、Uiautomat...
    海波筆記閱讀 17,210評(píng)論 3 66
  • 第一次嘗試各種失敗,沒(méi)看懂代碼。仔細(xì)研讀了下,發(fā)現(xiàn)有點(diǎn)心得。一定要從網(wǎng)頁(yè)源碼開(kāi)始,很多流浪器會(huì)修飾網(wǎng)頁(yè),造成根本找...
    陸凱閱讀 427評(píng)論 0 0

友情鏈接更多精彩內(nèi)容