[陳學(xué)亮 武娟 龐濤 錢鋒 劉曉軍]
Android應(yīng)用并行自動(dòng)化測試技術(shù)研究與實(shí)現(xiàn)
[陳學(xué)亮 武娟 龐濤 錢鋒 劉曉軍]
文章對(duì)Android平臺(tái)主流的自動(dòng)化測試技術(shù)例如Monkey、MonkeyRunner、Robotium、Appium進(jìn)行了研究與分析,基于Appium跨平臺(tái)、跨進(jìn)程、跨應(yīng)用等優(yōu)點(diǎn),提出了一套基于Appium的并行自動(dòng)化測試方案,通過集成TestNG測試框架實(shí)現(xiàn)測試腳本在多個(gè)Android設(shè)備并行運(yùn)行,實(shí)現(xiàn)了Android應(yīng)用的并行自動(dòng)化測試,能夠充分提升測試效率,彌補(bǔ)人工測試存在的缺陷。
Android 并行 自動(dòng)化 Appium TestNG
陳學(xué)亮
碩士,就職于中國電信股份有限公司廣東研究院,工程師,主要研究方向?yàn)锳ndroid自動(dòng)化測試、Android應(yīng)用技術(shù)等。
武娟
碩士,中國電信股份有限公司廣東研究院,高級(jí)工程師,主要研究方向?yàn)樵朴?jì)算、大數(shù)據(jù)技術(shù)等。
龐濤
碩士,中國電信股份有限公司廣東研究院,工程師,主要研究方向?yàn)橹悄芗揖?、新型網(wǎng)絡(luò)技術(shù)等。
錢鋒
碩士,中國電信股份有限公司廣東研究院,工程師,主要研究方向?yàn)榇髷?shù)據(jù)、云游戲、虛擬現(xiàn)實(shí)技術(shù)等。
劉曉軍
碩士,中國電信股份有限公司廣東研究院,工程師,主要研究方向?yàn)閼?yīng)用虛擬化技術(shù)、多媒體等。
隨著移動(dòng)互聯(lián)網(wǎng)行業(yè)的快速發(fā)展,近年來以Android為代表的智能手機(jī)用戶呈現(xiàn)高速增長的趨勢,根據(jù)權(quán)威機(jī)構(gòu)統(tǒng)計(jì),截止2015年底中國的智能手機(jī)用戶已超過5億。相應(yīng)的Android應(yīng)用程序也日趨豐富,目前Google的Android應(yīng)用市場已有上百萬個(gè)應(yīng)用,并且仍然保持快速增長和滾動(dòng)更新。
Android應(yīng)用的質(zhì)量(例如易用性、穩(wěn)定性、可靠性等)決定了應(yīng)用在用戶群中的口碑和體驗(yàn),因此對(duì)應(yīng)用進(jìn)行各項(xiàng)測試是應(yīng)用開發(fā)商、開發(fā)者、應(yīng)用市場提供商、終端廠商、運(yùn)營商的一項(xiàng)重要工作。由于Android系統(tǒng)存在碎片化、機(jī)型眾多的問題,每推出一款新的Android應(yīng)用,或者發(fā)布新版本,往往需要適配多個(gè)Android版本(例如4.x、5.x、6.x)和數(shù)百款機(jī)型,若采用傳統(tǒng)的人工測試需要大量的時(shí)間和人力成本,效率較低,難以滿足應(yīng)用敏捷開發(fā)、快速迭代和上線發(fā)布的要求。
本文基于現(xiàn)有的熱門開源工具和框架,研究Android應(yīng)用程序的并行自動(dòng)化測試技術(shù),目標(biāo)是實(shí)現(xiàn)應(yīng)用程序在多款手機(jī)設(shè)備上根據(jù)預(yù)先編寫的測試腳本,同時(shí)進(jìn)行自動(dòng)化測試并輸出結(jié)果,從而大幅度縮短測試時(shí)間,降低測試成本,提高測試的準(zhǔn)確性和效率。
2.1 Monkey工具
Monkey是Android SDK自帶的一個(gè)測試工具,通常用于模擬向應(yīng)用程序發(fā)送各種隨機(jī)的輸入消息(例如屏幕點(diǎn)擊、按鍵輸入、手勢輸入等),驗(yàn)證應(yīng)用在海量、長時(shí)間的隨機(jī)性輸入下是否會(huì)出現(xiàn)閃退或崩潰,主要用于應(yīng)用的壓力測試。Monkey的使用非常簡單,在PC上可通過adb命令啟動(dòng),直接在Android設(shè)備或模擬器上執(zhí)行,例如:
$adb shell monkey -p com.gstar.compare -v -v 10000
其中-p com.gstar.compare指定了Monkey需要啟動(dòng)的應(yīng)用程序包,-v –v是設(shè)置命令行輸出測試信息的級(jí)別為2(輸出最詳細(xì)的信息),10000是發(fā)送隨機(jī)消息的次數(shù),當(dāng)測試成功執(zhí)行完畢會(huì)輸出測試結(jié)果統(tǒng)計(jì)(包括事件次數(shù),事件類型,運(yùn)行時(shí)間等數(shù)據(jù)),如圖1。
圖1 Monkey測試結(jié)果統(tǒng)計(jì)
而測試遇到異常崩潰時(shí)會(huì)輸出相應(yīng)的日志信息,例如下面碰到了一個(gè)空指針的異常(包含異常方法名稱、代碼位置,便于程序員迅速定位異常原因),如圖2。
圖2 Monkey測試異常信息
2.2 MonkeyRunner工具
MonkeyRunner是Android SDK自帶的另一個(gè)測試工具,相比Monkey而言,MonkeyRunner可通過Python語言編寫測試腳本,在測試用例中通過坐標(biāo)位置、控件ID、控件名稱等方式控制應(yīng)用的界面元素,彌補(bǔ)了Monkey只有簡單命令,無法進(jìn)行復(fù)雜邏輯處理等方面的缺陷。MonkeyRunner采用了C/S架構(gòu),在PC端逐行解釋Python代碼并發(fā)送到Android設(shè)備執(zhí)行,其腳本可通過手工編寫或錄制/回放方式自動(dòng)生成。MonkeyRunner適合用于功能測試和回歸測試,它可以為一個(gè)應(yīng)用自動(dòng)貫徹一次功能測試,在腳本中設(shè)定按鍵或觸摸事件的輸入數(shù)值,觀察比對(duì)輸出結(jié)果,驗(yàn)證應(yīng)用功能的正確性。測試腳本示例如下:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice //引入monkeyrunner模塊
device = MonkeyRunner.waitForConnection() //連接并綁定Android設(shè)備
device.installPackage(“d:\ compare.apk “) //指 定APK安裝文件路徑
device.startActivity(component = “ com.gstar.compare/com.gstar.compare.main.ActivityMain “) //啟動(dòng)應(yīng)用
mr.sleep(3.0) //等待3秒
device.type(‘helloworld’) //輸入字符串helloworld
device.press(‘KEYCODE_ENTER’) //輸入回車
…………
result = device.takeSnapshot() //屏幕截圖
result.writeToFile(‘./shot1.png’,’png’) //指定路徑保存截圖
2.3 Robotium框架
Robotium是一款開源的Android自動(dòng)化測試框架,對(duì)Android原生的Instrumentation測試框架進(jìn)行了二次封裝,主要針對(duì)Android應(yīng)用進(jìn)行黑盒自動(dòng)化測試,可提供模擬各種手勢操作(點(diǎn)擊、長按、滑動(dòng)等)、查找和斷言機(jī)制的API,能夠?qū)ctivity、Dialog、Toast、Menu等各類控件進(jìn)行操作。由于基于Instrumentation的測試用例需要和被測應(yīng)用運(yùn)行在同一個(gè)進(jìn)程里,除非應(yīng)用是調(diào)試版本(與測試用例一樣使用調(diào)試版密鑰簽名),否則需要對(duì)應(yīng)用進(jìn)行重新打包簽名。重新打包簽名可使用re-sign.jar工具,首先將原APK去除簽名并重新打包為APK文件,然后用公鑰重新簽名:
keytool -genkey -v -keystoreandroid.keystore -alias android.keystore -keyalg RSA -validity 20000
jarsigner -verbose -keystoreandroid.keystore -signedjarandroid_signed.apkandroid.apkandroid.keystore
Robotium測試用例采用Java語言編寫,代碼結(jié)構(gòu)和Instrumentation類似,通過Solo對(duì)象的實(shí)例創(chuàng)建各類事件進(jìn)行測試,setUp方法用于初始化,tearDown方法用于結(jié)束測試,test方法完成測試,結(jié)構(gòu)如下:
2.4 Appium框架
Appium也是一款開源的自動(dòng)化測試框架,它采用C/ S架構(gòu),客戶端用于封裝WebDriver API,讀取用各種語言編寫的測試腳本并轉(zhuǎn)換為測試命令發(fā)給服務(wù)端,服務(wù)端使用Node.js搭建HTTP Sever接受測試指令并發(fā)送給測試目標(biāo),服務(wù)端可以部署在本地或云端。Appium在底層使用Android的自動(dòng)化測試框架進(jìn)行測試,Android 4.2.1以上版本使用UiAutomator框架,低版本使用Instrumentation以及Selendroid框架。Appium工作原理如圖3。
圖3 Appium架構(gòu)
相比Robotium,Appium框架具備以下優(yōu)點(diǎn):
(1)跨平臺(tái),支持Android、iOS、Firefox OS等平臺(tái)的應(yīng)用測試;
(2)服務(wù)端也是跨平臺(tái)的,可以部署在Windows、Linux或者M(jìn)ac OS X上;
(3)跨應(yīng)用,支持原生應(yīng)用、混合應(yīng)用、Web應(yīng)用測試;
(4)跨進(jìn)程,不受Instrumentation限制,可以在多個(gè)進(jìn)程間進(jìn)行測試,應(yīng)用無需重新簽名;
(5)跨語言,基于Appium獨(dú)特的解釋機(jī)制,可以支持Java、JS、Python、Ruby、PHP等多種語言。
由于Appium具備跨平臺(tái)、跨應(yīng)用、跨進(jìn)程等優(yōu)點(diǎn),本文主要基于Appium研究并行自動(dòng)化測試方案。Appium采用C/S架構(gòu),因此可建立多個(gè)Server對(duì)應(yīng)每臺(tái)測試設(shè)備,同時(shí)進(jìn)行測試。例如兩臺(tái)設(shè)備并行測試則啟動(dòng)2個(gè)Appium Server,分別配置好IP地址(本機(jī)則為127.0.0.1)和端口號(hào)(例如4723和4725),同時(shí)集成TestNG框架實(shí)現(xiàn)并行測試,TestNG是一個(gè)開源的測試框架,通過將測試信息添加到TestNG的xml配置文件中能夠?qū)崿F(xiàn)并行測試,關(guān)鍵步驟如下:
(1)通過adb devices命令獲取測試設(shè)備標(biāo)識(shí)符UDID
(2)項(xiàng)目路徑下新建testng.xml文件,代碼如下:
(3)執(zhí)行測試命令(需配置環(huán)境變量):
通過在TestNG的xml配置文件中寫入設(shè)備標(biāo)識(shí)UDID、Appium服務(wù)器IP地址和端口號(hào),程序會(huì)自動(dòng)在對(duì)應(yīng)的設(shè)備上運(yùn)行Appium服務(wù)器解釋后的測試代碼,實(shí)現(xiàn)多設(shè)備的并行自動(dòng)化測試,運(yùn)行結(jié)束后可在測試設(shè)備和命令窗口查看測試結(jié)果。
隨著Android系統(tǒng)版本滾動(dòng)更新,Android機(jī)型日益豐富,相應(yīng)的Android應(yīng)用也是層出不窮,對(duì)Android應(yīng)用進(jìn)行測試是一項(xiàng)不可或缺的任務(wù),而傳統(tǒng)的人工測試存在大量重復(fù)性的工作,測試效率不高并且精確性較低。本文對(duì)當(dāng)前主流的Android自動(dòng)化測試工具和框架進(jìn)行了研究與分析,提出了一套基于Appium集成TestNG測試框架的并行測試方案,通過該方法能夠?qū)崿F(xiàn)Android應(yīng)用在多臺(tái)設(shè)備并行完成自動(dòng)化測試,可以有效提高測試效率,減少人工干預(yù),測試腳本可復(fù)用,具有很強(qiáng)的實(shí)用性和指導(dǎo)意義。
1 謝紅霞,吳紅梅.基于Android的自動(dòng)化測試的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代.2012,(02):20-22
2 張立芬,周悅,郭振東.Android移動(dòng)應(yīng)用測試[J].中國新通信,2013,(03):84-86
3 陳昊.Android手機(jī)自動(dòng)化測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安電子科技大學(xué),2014
4 宋春雨.Android平臺(tái)自動(dòng)化測試的研究與實(shí)踐[D].北京郵電大學(xué),2012
5 白凱,崔冬華.基于JUnit自動(dòng)化單元測試的研究[J].計(jì)算機(jī)與數(shù)字工程,2010,(02):52-54,103
6 鄧青華.軟件自動(dòng)化測試工具研究[J].軟件導(dǎo)刊,2011,(01):57-59
10.3969/j.issn.1006-6403.2016.11.001
(2016-08-17)