姚炯
摘要摘要:隨著智能手機(jī)應(yīng)用的深入,智能手機(jī)應(yīng)用程序也逐步從輕量級應(yīng)用向更復(fù)雜的應(yīng)用演化,應(yīng)用端的自動化測試顯得日益重要?,F(xiàn)階段手機(jī)應(yīng)用測試都會遇到平臺兼容性不佳和測試效率較低等問題,選擇和搭建一個基于手機(jī)應(yīng)用測試的自動化測試框架十分必要。選用時下兼容性和穩(wěn)定性都較強(qiáng)的自動化測試框架Appium,通過研究其主要特性和工作原理,搭建了一個跨平臺的手機(jī)自動化測試框架,解決了一些手機(jī)自動化測試難點(diǎn),實現(xiàn)了一個具有高兼容性和易用性的跨平臺自動化測試項目,通過比較評估了實際測試效果。
關(guān)鍵詞關(guān)鍵詞:Appium;手機(jī)自動化測試;測試框架
DOIDOI:10.11907/rjdk.162237
中圖分類號:TP319文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2017)001012904
引言
自動化測試是隨軟件開發(fā)技術(shù)一并發(fā)展的一種測試技術(shù)。軟件測試包括白盒測試與黑盒測試,而自動化測試最早使用白盒測試中的單元測試。這種測試方式較為高效,易于實現(xiàn)。黑盒自動化測試興起稍晚,但目前應(yīng)用也非常廣泛。黑盒自動化測試原理是用程序和腳本模擬用戶的操作行為,通過智能方式驗證軟件的關(guān)鍵檢查點(diǎn)。在桌面軟件和Web技術(shù)興盛時代,涌現(xiàn)出大量優(yōu)秀的自動化測試工具如QTP和webdriver[1],這些工具經(jīng)過不斷完善已經(jīng)逐步成熟,能夠較好地滿足傳統(tǒng)應(yīng)用的自動化測試需求。
智能手機(jī)的應(yīng)用帶來軟件測試技術(shù)新的革命,相比于傳統(tǒng)測試,手機(jī)測試在硬件上脫離了PC的傳統(tǒng)架構(gòu),和用戶的交互方式存在很大區(qū)別。手機(jī)軟件在使用上具有獨(dú)特的操作方式,比如用戶的滑動、觸摸和點(diǎn)擊等操作,如何實現(xiàn)手機(jī)客戶端上的自動化腳本執(zhí)行[2]成為這類測試的難點(diǎn)。又由于IOS和Android兩大平臺的市場格局,大部分手機(jī)應(yīng)用都需要支持多個平臺,它們的基礎(chǔ)架構(gòu)不盡相同,使得手機(jī)自動化測試框架對兼容性有了更高要求。要做好手機(jī)客戶端的自動化測試,首先要解決測試腳本的健壯性和平臺的兼容性問題。
近幾年手機(jī)客戶端自動化工具發(fā)展較快,出現(xiàn)了不少自動化框架,比如基于Android平臺的UiAutomator和Robotium,IOS自帶的Instrument等,但是這些工具都沒有有效解決平臺兼容性問題,無法用一個統(tǒng)一的框架驅(qū)動不同平臺測試,而且在識別客戶端內(nèi)容和元素時也存在偏差,測試腳本不夠穩(wěn)定健壯。目前具有良好兼容性且框架成熟穩(wěn)定的工具是Appium。Appium是一個開源的、跨多平臺多語言的測試框架,相比于其它框架,它編寫測試腳本和運(yùn)行測試時不需要對源碼重新編譯,在腳本的編寫和實現(xiàn)上也對編程語言沒有太多要求,測試更輕量靈活。此外,Appium采用了C/S架構(gòu),提供了一個統(tǒng)一的對外服務(wù)接口,使得客戶端或模擬器的交互和控制透明化。本文對Appium的主要特點(diǎn)和功能進(jìn)行了分析和介紹,闡述了在手機(jī)測試過程中如何應(yīng)用Appium提高手機(jī)測試工作效率問題[3]。
1手機(jī)自動化測試工具
1.1Appium簡介
Appium主要包含:Appium Server、Appium GUI和Appium Client。
(1)Appium Server。Appium Server是用Node.js 實現(xiàn)的一套遵循restful框架的服務(wù),可以直接通過NPM安裝,它是面向Appium腳本開發(fā)人員的統(tǒng)一服務(wù)接口,是客戶端控制與測試腳本之間的橋梁。
(2)Appium GUI。它是基于MAC和Windows環(huán)境的一個Appium控制臺,整合了Appium的所有核心功能,具有強(qiáng)大的跨平臺驅(qū)動能力,可應(yīng)用于IOS和Android的基礎(chǔ)驅(qū)動,檢測和定位客戶端元素,對當(dāng)前運(yùn)行環(huán)境進(jìn)行診斷。
(3)Appium Client。Appium Client是一個包含多種編程語言實現(xiàn)的Appium API,其中包括Ruby、Java等。它實現(xiàn)了Mobile JSON Wire 的標(biāo)準(zhǔn)化協(xié)議,為測試腳本開發(fā)者提供了靈活多變同時又非常強(qiáng)大的程序接口。1.2Appium基本工作原理
Appium框架其實是IOS和Android系統(tǒng)自動化庫的封裝,采用C/S架構(gòu),Appium Server在運(yùn)行時會時刻監(jiān)聽Client端發(fā)送的操作請求,服務(wù)端和客戶端的交互遵循JSON Wire協(xié)議,并通過它所實現(xiàn)的翻譯器將任何編程語言所實現(xiàn)的測試腳本請求發(fā)送給模擬器或者移動終端,通過這種機(jī)制實現(xiàn)手機(jī)模擬器和真機(jī)的自動化操作[4],見圖1。
圖1Appium工作原理
1.3Appium特性
(1)跨平臺。平臺兼容性是Appium最為強(qiáng)大的特性,Appium用一種統(tǒng)一的協(xié)議實現(xiàn)了自動化測試平臺的兼容。操作IOS設(shè)備時它會調(diào)用IOS的instrument框架,而在Android平臺中則封裝了UIautomator框架。另外,Appium不單單支持客戶端兼容,在Appium的Server端,同樣支持包括OSX、Windows和Linux平臺,這就使得Appium的環(huán)境搭建更具擴(kuò)展性。根據(jù)測試需求,Appium甚至可以搭建在云端服務(wù)器。另外在實現(xiàn)語言方面,Appium提供了Java、Ruby、Python等多語言接口,給測試程序設(shè)計者帶來極大的選擇空間。
(2)無源代碼依賴。手機(jī)客戶端測試框架運(yùn)行一般都需要在客戶端的源碼環(huán)境下進(jìn)行,而且在自動化腳本的執(zhí)行之前都需要對手機(jī)App源碼重新編譯,這種機(jī)制導(dǎo)致自動化執(zhí)行效率較低。Appium隔離了手機(jī)開發(fā)的源碼環(huán)境和自動化腳本開發(fā)環(huán)境,使自動化測試從手機(jī)開發(fā)流程中獨(dú)立出來,單獨(dú)運(yùn)行,自動化測試更輕量,提高了測試效率。2手機(jī)測試框架搭建
Appium的設(shè)計理念和幾大組件可統(tǒng)一Android和IOS的自動化測試,下面通過部署和搭建一個跨平臺的Appium測試框架來介紹其特點(diǎn)。2.1系統(tǒng)環(huán)境準(zhǔn)備
跨平臺的手機(jī)測試首先需要在PC平臺上建立不同的模擬器。由于IOS平臺的封閉性,不能搭建于Windows平臺,因此本文的框架需要OSX操作系統(tǒng)支持。OSX系統(tǒng)自帶IOS開發(fā)環(huán)境和IOS模擬器,因此Appium可以直接關(guān)聯(lián)并啟動相應(yīng)的IOS模擬器。而對于Android則首先需要下載和安裝Android的SDK開發(fā)環(huán)境,并手工創(chuàng)建相應(yīng)版本的模擬器。2.2Appium環(huán)境搭建
Appium主要組件由Appium Server和Appium Client 組成,而Appium GUI包括了Appium Server的全部功能,因此搭建Appium 環(huán)境僅需要搭建Appium GUI 和Appium Cient即可。
(1)Appium GUI。由于Appium GUI提供了Windows和OSX雙平臺支持,因此僅需要在其官方網(wǎng)站上下載指定版本并安裝即可。
(2)Appium Client??蛻舳说拇罱ㄒ卜浅:唵危疚氖褂肦uby開發(fā)語言實現(xiàn)自動化測試,因此需要下載Appium 的Ruby API,并將這些API導(dǎo)入RubyMine項目。
2.3Cucumber測試框架搭建
Cucumber是運(yùn)行Appium測試的一種上層驅(qū)動框架,是一種基于行為的測試編寫和管理平臺。Cucumber通過一種類似自然語言的編寫接口,讓不熟悉軟件開發(fā)語言的測試者可以用直觀易懂的接口去組織和運(yùn)行自動化測試。Cucumber還能與RubyMine開發(fā)環(huán)境完美集成。
3項目測試實現(xiàn)
通過一系列相關(guān)組件的安裝和搭建,完成了Appium跨平臺集成開發(fā)和測試環(huán)境。本文通過實現(xiàn)一個跨平臺自動化測試項目來展現(xiàn)本文自動化測試框架的特點(diǎn)和優(yōu)勢。
自動化測試項目實現(xiàn)過程:①底層操作行為封裝;②用戶操作抽象;③檢查點(diǎn)邏輯封裝;④Cucumber測試用例的實現(xiàn)和運(yùn)行。
3.1底層操作行為封裝
4測試難點(diǎn)解決方案
智能手機(jī)和傳統(tǒng)PC平臺操作方式有很大區(qū)別,大部分用戶輸入都是通過各種手勢操作實現(xiàn)的,比如滑動、長按和點(diǎn)擊等操作。在一條相對復(fù)雜的測試用例編寫中,需要完整而穩(wěn)定地模擬出一系列用戶的操作組合。而基于不同的架構(gòu)平臺,用戶的操作方式也會不同。本文針對手機(jī)測試中的一些難點(diǎn),提出結(jié)合Appium框架的解決方案。4.1系統(tǒng)級控件操作
目前手機(jī)操作系統(tǒng)都有許多系統(tǒng)級別的控件,比如系統(tǒng)提示和系統(tǒng)信息,這些組件原本不屬于手機(jī)的應(yīng)用程序,但是很多情況下都會與系統(tǒng)消息或系統(tǒng)提示交互[5],影響手機(jī)自動化測試的流暢性。由于這些控件并不屬于應(yīng)用程序本身,因此難以定位也難以抽象成操作對象。要讓自動化腳本流暢運(yùn)行,首先需要解決系統(tǒng)控件交互的問題。圖2是一個系統(tǒng)級別通知消息的例子。
圖2系統(tǒng)級操作控件
對于這些系統(tǒng)級別操作,Appium框架通過一些通用的平臺驅(qū)動予以解決,比如在IOS平臺中,Appium首先通過檢查和定位系統(tǒng)級別的通知欄目,然后使用相應(yīng)的接口,用獨(dú)立于測試目標(biāo)應(yīng)用之外的動作去點(diǎn)擊和關(guān)閉這些系統(tǒng)級提示,示例代碼如下:
當(dāng)下的自動化測試框架都有平臺的局限性,一般來說都是一個工具對應(yīng)一個平臺,因而要實現(xiàn)不同平臺的自動化測試,就需要對IOS和Android系統(tǒng)開發(fā)不同的測試應(yīng)用,而由于測試對于框架和項目源碼的依賴性很高[7],不同平臺之間的測試腳本基本沒有關(guān)聯(lián)性,也不能重復(fù)利用,因此要實現(xiàn)不同平臺的自動化測試成本會較高。本文實現(xiàn)的框架一大特點(diǎn)是基于不同的平臺,可以利用同一套測試腳本測試,對測試編寫人員來說,平臺的兼容性變得透明,只需要編寫出一個統(tǒng)一的測試腳本就可以運(yùn)行在不同的平臺上。這種方式將極大提高自動化測試腳本的使用率,節(jié)省編寫和調(diào)試測試腳本的時間。5.2近似于自然語言的測試用例
自動化測試腳本一般來說都由高級語言編寫,其語法和開發(fā)代碼是相同的。由高級語言組織成的測試用例不太容易讓閱讀者理解。要理解一個測試腳本的測試邏輯,首先要能讀懂測試代碼,而有時候測試人員可能不太精通高級語言,編寫自動化腳本較困難。為了解決這個問題,本文使用了Cucumber框架與Appium結(jié)合,通過層級封裝方式,實現(xiàn)了近似于自然語言的、能夠自動化運(yùn)行的測試用例。這種測試用例易于理解,易于編寫,測試人員可快速熟悉。5.3解決了系統(tǒng)級彈出框?qū)y試運(yùn)行的影響
當(dāng)下大部分自動化測試都會與項目源碼綁定,在腳本運(yùn)行前一般都需要項目的整體編譯,較耗費(fèi)時間[8]。另外,測試在運(yùn)行過程中會受到不少系統(tǒng)彈出框的干擾。由于測試項目與源碼綁定,導(dǎo)致要識別和處理系統(tǒng)級彈出框十分困難。本文通過實現(xiàn)Appium提供的平臺驅(qū)動,將測試項目與開發(fā)項目相隔離,使自動化測試獨(dú)立運(yùn)行。同時,通過特定的程序接口,識別并處理系統(tǒng)級的彈出窗和系統(tǒng)消息,使得測試腳本更健壯,運(yùn)行更流暢。6結(jié)語
本文介紹了手機(jī)測試的基本情況,分析了跨平臺手機(jī)測試難點(diǎn),通過對當(dāng)下一些手機(jī)測試工具調(diào)研,選擇成熟的Appium作為跨平臺測試工具。結(jié)合自動化測試框架組件和要素,設(shè)計和實現(xiàn)了接近自然語言、易于理解且能夠跨平臺運(yùn)行的手機(jī)自動化測試腳本。參考文獻(xiàn):
[1]PAREEK,PEEYUSH,RAJNEESH. A comparative study of mobile application testing frameworks[J].Expansion, Impact and Challenges of IT & CS,2015(2): 8384.
[2]王益芝. 淺析智能手機(jī)的自動化測試[J].現(xiàn)代電信科技,2012(12):2325.
[3]SHAH, GAURANG, PRAYAG SHAH, et al. Software testing automation using appium[J]. International Journal of Current Engineering and Technology,2014(3):152156.
[4]SINGH, SHIWANGI, RUCHA GADGIL,et al. Automated testing of mobile applications using scripting technique: a study on appium[J]. International Journal of Current Engineering and Technology,2014(5):1116.
[5]徐騁. Android應(yīng)用軟件自動化測試框架的研究[D].大連:大連海事大學(xué),2015.
[6]鄭婷婷,黃英持. Android應(yīng)用的多設(shè)備自動化測試實現(xiàn)[J].軟件導(dǎo)刊,2016,15(4):9697.
[7]牛璐. 手機(jī)軟件自動化測試方法研究與應(yīng)用[D].鄭州:中國人民解放軍信息工程大學(xué),2012.
[8]張舜堯. 手機(jī)自動化測試系統(tǒng)設(shè)計淺析[J].開發(fā)研究與設(shè)計技術(shù),2007(20):412413.
責(zé)任編輯(責(zé)任編輯:杜能鋼)
第1期 周甄珍,王浩宇:基于GJB5000A三級過程域的軟件開發(fā)管理探討軟 件 導(dǎo) 刊2017年標(biāo)題