專利名稱:一種Android設(shè)備軟件自動(dòng)測(cè)試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件黑盒測(cè)試技術(shù),具體涉及一種安卓(Android)設(shè)備軟件自動(dòng)測(cè)試方法,尤其應(yīng)用于智能手機(jī)。
背景技術(shù):
現(xiàn)有,Android系統(tǒng)軟件自動(dòng)化測(cè)試工具中大致分為三種,其一是由測(cè)試開發(fā)者為某個(gè)程序的某個(gè)測(cè)試路徑預(yù)先設(shè)計(jì)好測(cè)試工具(比如目前流行的Juit (java單元測(cè)試)和Robotium ( 一種基于Android的黑盒自動(dòng)化測(cè)試框架),再用來自動(dòng)化測(cè)試,這樣的好處是省去了測(cè)試員的工作量,但卻大大地增加了測(cè)試開發(fā)者的工作量,首先一個(gè)程序是存在多條測(cè)試路徑的,測(cè)試開發(fā)者就必須得根據(jù)不同的測(cè)試路徑來設(shè)計(jì)測(cè)試工具,若不這樣也就做不到程序測(cè)試的全面性。所以做不好上述問題也就做不好自動(dòng)化測(cè)試,同時(shí)也會(huì)導(dǎo)致產(chǎn)品存在嚴(yán)重的風(fēng)險(xiǎn)與缺陷?;蛟S你可以說采用人工的方式進(jìn)行測(cè)試!這樣確實(shí)可以解決自 動(dòng)化測(cè)試的問題,但傳統(tǒng)的人工測(cè)試覆蓋面窄,周期長(zhǎng),人工成本高等問題又是各廠商所不能接受的。其二是采用計(jì)算機(jī)(pc)連接Android終端的方式,其實(shí)現(xiàn)是通過在pc機(jī)上裝有Android自帶的安卓驅(qū)動(dòng)(ADB)工具或是通過通用串行總線(USB)實(shí)現(xiàn)與外圍設(shè)備連接并配置好套接字(Socket)通訊參數(shù),在界面上通過標(biāo)準(zhǔn)小窗口工具箱(swt)/jface工具展示出來,在底層則通過殼(shell)命令來獲取設(shè)備被測(cè)程序的信息來生成相應(yīng)測(cè)試腳本,這樣雖能解決上述問題,但它脫離不了電腦,做不到隨時(shí)隨地自動(dòng)化測(cè)試,工具的便捷性與實(shí)用性非常差,比如申請(qǐng)?zhí)枮?201110446674. O的專利。其三是通過開放設(shè)備的最高管理權(quán)限,通過獲得該設(shè)備的最高使用權(quán)限時(shí)才能使用的shell命令來獲取設(shè)備被測(cè)程序的信息來生成相應(yīng)測(cè)試腳本,該方式與Android系統(tǒng)底層連接緊密,不利于Android設(shè)備的安全,易成為黑客入侵的工具/技術(shù),比如申請(qǐng)?zhí)枮?01010616361. O的專利的安全問題就令人擔(dān)憂。所以說在現(xiàn)行的測(cè)試技術(shù)亦中都不足以做好Android系統(tǒng)的自動(dòng)化測(cè)試,亟待改進(jìn)。
發(fā)明內(nèi)容
本發(fā)明需要解決的技術(shù)問題是,如何提供一種Android設(shè)備軟件自動(dòng)測(cè)試方法,無須使用shell命令和高性能pc進(jìn)行自動(dòng)化測(cè)試,從而提升測(cè)試安全、可靠、廣泛和易實(shí)施性。本發(fā)明的上述技術(shù)問題這樣解決構(gòu)建一種Android設(shè)備軟件自動(dòng)測(cè)試方法,包括以下自動(dòng)腳本錄制步驟101)啟動(dòng)被測(cè)程序,并創(chuàng)建一層透明可視(View)層;所述View層是android.view. View 的子類;102)按測(cè)試要求操作屏幕或按鍵;
在操作過程中,所述透明View層截取記錄對(duì)應(yīng)觸控/按鍵事件,再通過向被測(cè)程序發(fā)送對(duì)應(yīng)一致的模擬觸控/按鍵事件傳遞操作指令;被測(cè)程序執(zhí)行所述操作指令。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,步驟102)中通過回調(diào)函數(shù)HandleEvent和自動(dòng)測(cè)試框架Instrumention向被測(cè)程序發(fā)送模擬觸控/按鍵事件。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,步驟102)中被測(cè)程序執(zhí)行所述操作指令包括更新屏幕界面。按照本發(fā)明提供的Android設(shè)備軟件 自動(dòng)測(cè)試方法,當(dāng)透明View監(jiān)聽到有UP動(dòng)作時(shí)先暫時(shí)移除本身并傳遞錄制信息到回調(diào)函數(shù)HandleEvent中,而回調(diào)函數(shù)HandleEvent則根據(jù)錄制的信息結(jié)合自動(dòng)化測(cè)試框架Instrumention發(fā)送模擬觸控/按鍵事件來更新被測(cè)程序界面,步驟102)中截取記錄包括記錄對(duì)應(yīng)屏幕界面。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,所述自動(dòng)腳本錄制步驟包括跨進(jìn)程錄制,這在基于shell和pc的方式中無法做到。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,所述錄制步驟還包括通過預(yù)先定義的交互方式通知透明View層結(jié)束錄制,生成錄制腳本,具體是所述錄制步驟還包括當(dāng)透明View監(jiān)聽到有結(jié)束錄制請(qǐng)求后結(jié)束錄制并通知后臺(tái)服務(wù)RecordService提取錄制信息,生成錄制腳本。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,該自動(dòng)測(cè)試方法還包括腳本回放步驟根據(jù)錄制腳本向被測(cè)程序發(fā)送與錄制腳本對(duì)應(yīng)的一系列模擬觸控/按鍵事件。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,所述腳本回放步驟多次重復(fù)。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,所述回放步驟還包括腳本解析和有效性檢測(cè)子步驟。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,該自動(dòng)測(cè)試方法還包括結(jié)果驗(yàn)證步驟。按照本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,結(jié)果驗(yàn)證步驟包括但不限制于以下方式(一 )所述結(jié)果驗(yàn)證步驟包括截取被測(cè)程序屏幕輸出和自動(dòng)/人工圖像比對(duì);( 二)所述結(jié)果驗(yàn)證步驟包括記錄被測(cè)程序數(shù)據(jù)輸出和自動(dòng)數(shù)值比對(duì)。本發(fā)明提供的Android設(shè)備軟件自動(dòng)測(cè)試方法,尤其應(yīng)用于智能手機(jī),較現(xiàn)有技術(shù)具有以下優(yōu)點(diǎn)I、被測(cè)程序可以通過本發(fā)明來錄制不同測(cè)試路徑的測(cè)試腳本,并且不需要編寫任何代碼或修改測(cè)試腳本,避免手動(dòng)錄制不同測(cè)試路徑的腳本來解決程序測(cè)試路徑多樣性與測(cè)試工具開發(fā)者設(shè)計(jì)工具困難、工作量大的問題;2、不需要借助pc機(jī)來實(shí)現(xiàn)自動(dòng)錄制,且不需要Android設(shè)備的最高管理權(quán)限;利用技術(shù)完全模擬人機(jī)交互功能,可以錄制90%以上的程序測(cè)試路徑多樣性的測(cè)試腳本,從而減少自動(dòng)化測(cè)試工具的開發(fā)量以及人力資本的投入,大大地提高了自動(dòng)化測(cè)試效率;3、通過采集元素坐標(biāo)進(jìn)行自動(dòng)化測(cè)試的,由于錄制時(shí)只會(huì)根據(jù)界面的切換而進(jìn)行錄制測(cè)試腳本,故而能進(jìn)行跨進(jìn)程的腳本錄制與腳本回放測(cè)試;4、可用于回歸測(cè)試,冒煙測(cè)試以及功能測(cè)試,更實(shí)用、更安全、更便捷和更可靠。
下面結(jié)合附圖和具體實(shí)施例進(jìn)一步對(duì)本發(fā)明進(jìn)行詳細(xì)說明圖I為本發(fā)明優(yōu)選具體實(shí)施例觸摸屏智能手機(jī)上的自動(dòng)化測(cè)試軟件的程序流程示意圖。
具體實(shí)施例方式首先,說明本發(fā)明基礎(chǔ)和關(guān)鍵(一)基本思想在錄制過程中,當(dāng)被測(cè)程序啟動(dòng)時(shí)同時(shí)創(chuàng)建一層透明的View放置于被測(cè)程序上。當(dāng)有事件發(fā)生時(shí),該View所實(shí)現(xiàn)的監(jiān)聽方法會(huì)記錄動(dòng)作被測(cè)程序所點(diǎn)觸元素所在的坐標(biāo)或者該設(shè)備的按鍵值并生成測(cè)試腳本保存于手機(jī)存儲(chǔ)卡上。回放時(shí),再根據(jù)對(duì)應(yīng)腳本解析 算法結(jié)合Instrumentation (Android平臺(tái)的一種自動(dòng)化測(cè)試框架)實(shí)現(xiàn)跨進(jìn)程的回放測(cè)試。(二)自定義 View 層該自定義的透明View繼承自android, view. View,通過復(fù)寫它的按鍵事件onKeyDown O、onKeyUp O、onKeyLong O 以及觸控事件的 onTouchEvent O 以上的幾個(gè)方法來監(jiān)聽設(shè)備動(dòng)作事件,同時(shí)該步驟還會(huì)在啟動(dòng)該被測(cè)程序時(shí)把被測(cè)程序的TargetPackage、Activity Name (被測(cè)程序的包名與主類名)與當(dāng)前設(shè)備的信息(自定義代號(hào)為0)封裝成一條特殊的字符串(格式為"自定義代號(hào)"+"," +" TargetPackage" +","
+ " Activity Name" +" ," +" XX")添加到 StringBuffer (java 中一個(gè)類似于 String的字符串緩沖區(qū))中)。第二,結(jié)合優(yōu)選實(shí)施例詳細(xì)說明本發(fā)明具體實(shí)現(xiàn)如圖I所示,本發(fā)明優(yōu)選具體實(shí)施例觸摸屏智能手機(jī)上的自動(dòng)化測(cè)試軟件程序具體包括以下步驟301)啟動(dòng)程序,選擇開始錄制(該步驟的實(shí)現(xiàn)是獲取當(dāng)前設(shè)備的所有可見可操作的程序并羅列出來顯示在屏幕上,單擊選擇某項(xiàng)后會(huì)啟動(dòng)該程序,同時(shí)也會(huì)創(chuàng)建一層自定義的透明View覆蓋其上;啟動(dòng)被測(cè)程序時(shí)把被測(cè)程序的Target Package, Activity Name與當(dāng)前設(shè)備的信息封裝成一條特殊的字符串添加到StringBuffer中;302)在錄制中,隨意點(diǎn)觸屏幕(該步驟的實(shí)現(xiàn)是通過監(jiān)聽到當(dāng)前測(cè)試員對(duì)該透明View的一些模擬鍵盤/觸屏事件后,規(guī)則如下如果是按鍵事件則取事件的代號(hào)(自定義代號(hào)為I)跟動(dòng)作類型(類型分為UP (彈起),D0WN(按下),LONG(長(zhǎng)按))和按鍵值(比如設(shè)備的"返回鍵"的鍵值為4)。如果是觸控事件則取事件代號(hào)(自定義代號(hào)為2)跟動(dòng)作類型(類型分為UP (彈起),D0WN(按下),MOVE(移動(dòng)))以及該界面控件元素所處的X軸Y軸的坐標(biāo)(注一個(gè)單擊的動(dòng)作由一個(gè)DOWN跟一個(gè)UP兩個(gè)動(dòng)作組成;而一個(gè)移動(dòng)的動(dòng)作由一個(gè)DOWN跟多個(gè)MOVE及一個(gè)UP動(dòng)作組成)并把其值封裝成一條特殊的字符串(其一格式為"自定義代號(hào)"+"," +"動(dòng)作類型"+"," +" X軸坐標(biāo)"+"," +" Y軸坐標(biāo)")分別添加到StringBuffer和List集合(java中一種有序的序列)中,同時(shí)對(duì)該事件的動(dòng)作類型進(jìn)行判斷,規(guī)則如下如果動(dòng)作類型是up類型的話則暫時(shí)移除該透明view,然后從List集合中循環(huán)取出每條字符串時(shí)經(jīng)轉(zhuǎn)換成字符串?dāng)?shù)組后判斷該字符串?dāng)?shù)組首個(gè)元素的值,如果值為“1”,則取其后的所有元素的值并結(jié)合Instrumentation的sendKeySync O方法發(fā)送模擬鍵盤事件。如果值為“2”,則取其后的所有元素的值并結(jié)合Instrumentation的sendPointerSync O方法發(fā)送觸控事件。并由此實(shí)現(xiàn)了在透明view上的觸摸動(dòng)作/點(diǎn)按設(shè)備按鍵的各種動(dòng)作事件(比如在透明的view下我們是看得到被測(cè)程序界面上的某些控件的,當(dāng)你點(diǎn)擊(該動(dòng)作由down跟up類型組成,也就是說該動(dòng)作是先按下再松開)某個(gè)控件時(shí)它是沒反應(yīng)的,因?yàn)辄c(diǎn)擊的對(duì)象是透明的view,當(dāng)后臺(tái)程序監(jiān)測(cè)到剛才點(diǎn)擊動(dòng)作中包含有UP動(dòng)作類型時(shí),程序會(huì)暫時(shí)的移除該透明view,然后取出剛剛保存到List集合中的事件信息,經(jīng)解析后結(jié)合InstrumentationO的sendPointerSync O方法發(fā)送點(diǎn)擊動(dòng)作,故此就實(shí)現(xiàn)界面的跳轉(zhuǎn)或更新),當(dāng)該動(dòng)作完后又把該透明view覆蓋其上并清空List類的所有值,故而通過這樣周而復(fù)始的方式才實(shí)現(xiàn)了腳步的錄制,直至程序監(jiān)聽到退出命令);303)退出錄制時(shí)點(diǎn)擊屏幕下方的X監(jiān)聽圖標(biāo)(該步驟的實(shí)現(xiàn)是把保存在公用臨時(shí) 區(qū)信息寫入到本地存儲(chǔ)卡上,經(jīng)此自動(dòng)化測(cè)試腳本也就錄制好了);304)當(dāng)步驟303)完成后程序會(huì)返回到主界面,這時(shí)選擇開始測(cè)試(該步驟的機(jī)制是通過實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件管理器,其目的是用來管理本發(fā)明錄制的測(cè)試腳本);305)找到剛錄制的腳本并點(diǎn)擊,程序自動(dòng)開始檢測(cè)(該步驟的實(shí)現(xiàn)是通過找到測(cè)試腳本文件后,進(jìn)而檢測(cè)測(cè)試腳本是否有效,如果有效則直接進(jìn)入步驟307);306)若檢測(cè)到測(cè)試腳本無效時(shí),程序會(huì)提示測(cè)試員是重新錄制還是取消(該步驟的實(shí)現(xiàn)是如果測(cè)試員選擇了重新錄制則直接進(jìn)入步驟302),反之則取消);307)程序進(jìn)入解析階段,解析完后提示測(cè)試員設(shè)置測(cè)試次數(shù)和測(cè)試延時(shí)或者點(diǎn)擊"取消"(該步驟的實(shí)現(xiàn)是若是由步驟305)跳轉(zhuǎn)的則直接解析該測(cè)試腳本文件并把每條解析出來的字符串添加到List集合中);308)設(shè)置好后,點(diǎn)擊“確定”后程序會(huì)根據(jù)設(shè)置的信息進(jìn)行自動(dòng)化測(cè)試(該步驟的實(shí)現(xiàn)是取得步驟307)中解析后List類后,通過循環(huán)取值的方法來取出每一條帶有事件信息的字符串并通過String的spit (",")方法轉(zhuǎn)換成一個(gè)字符串?dāng)?shù)組并根據(jù)該字符串的首個(gè)元素的值來進(jìn)行判斷,規(guī)則如下如果值為“0”,則取其第二個(gè)元素跟第三個(gè)元素的值來啟動(dòng)被測(cè)程序;如果值為“ I ”,則取其后的所有元素的值并結(jié)合Instrumentation的sendKeySync ()方法發(fā)送模擬鍵盤事件;如果值為“2”,則取其后的所有元素的值并結(jié)合Instrumentation的sendPointerSync O方法發(fā)送觸控事件;309)在自動(dòng)化測(cè)試時(shí),程序會(huì)在屏幕上顯示測(cè)試進(jìn)度,中途也可手動(dòng)停止測(cè)試;310)當(dāng)測(cè)試執(zhí)行完畢后,程序會(huì)彈出對(duì)話框詢問測(cè)試員是否繼續(xù);311)若點(diǎn)擊繼續(xù),則自動(dòng)化測(cè)試重新開始,若點(diǎn)擊停止,自動(dòng)化測(cè)試則退出;312)結(jié)束。最后,以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明權(quán)利要求范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明權(quán)利要求的涵蓋范圍。
權(quán)利要求
1.一種Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,包括以下自動(dòng)腳本錄制步驟 101)啟動(dòng)被測(cè)程序,并創(chuàng)建一層覆蓋在被測(cè)程序上的透明View層;所述View層是android, view. View 的子類; 102)按測(cè)試要求操作屏幕或按鍵; 在操作過程中,所述透明View層截取記錄對(duì)應(yīng)觸控/按鍵事件,再通過向被測(cè)程序發(fā)送對(duì)應(yīng)一致的模擬觸控/按鍵事件傳遞操作指令;被測(cè)程序執(zhí)行所述操作指令。
2.根據(jù)權(quán)利要求I所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,步驟102)中通過解析錄制的測(cè)試腳本結(jié)合自動(dòng)測(cè)試框架向被測(cè)程序發(fā)送模擬觸控/按鍵事件。
3.根據(jù)權(quán)利要求2所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,當(dāng)透明View監(jiān)聽到有UP動(dòng)作時(shí)先暫時(shí)移除本身并傳遞錄制信息到回調(diào)函數(shù)HandleEvent中,而回調(diào)函數(shù)HandleEvent則根據(jù)錄制的信息結(jié)合自動(dòng)化測(cè)試框架Instrumention發(fā)送模擬觸控/按鍵事件來更新被測(cè)程序界面,步驟102)中截取記錄包括記錄對(duì)應(yīng)屏幕界面。
4.根據(jù)權(quán)利要求3所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,自動(dòng)腳本錄制步驟包括跨進(jìn)程錄制。
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,所述錄制步驟還包括當(dāng)透明View監(jiān)聽到有結(jié)束錄制請(qǐng)求后結(jié)束錄制并通知后臺(tái)服務(wù)RecordService提取錄制信息,生成錄制腳本。
6.根據(jù)權(quán)利要求5所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,該自動(dòng)測(cè)試方法還包括腳本回放步驟根據(jù)錄制腳本向被測(cè)程序發(fā)送與錄制腳本對(duì)應(yīng)的一系列模擬觸控/按鍵事件。
7.根據(jù)權(quán)利要求6所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,所述回放步驟還包括腳本解析和有效性檢測(cè)子步驟。
8.根據(jù)權(quán)利要求6所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,該自動(dòng)測(cè)試方法還包括結(jié)果驗(yàn)證步驟,所述結(jié)果驗(yàn)證步驟包括截取被測(cè)程序屏幕輸出和自動(dòng)/人工圖像比對(duì)。
9.根據(jù)權(quán)利要求6所述Android設(shè)備軟件自動(dòng)測(cè)試方法,其特征在于,該自動(dòng)測(cè)試方法還包括結(jié)果驗(yàn)證步驟,所述結(jié)果驗(yàn)證步驟包括記錄被測(cè)程序數(shù)據(jù)輸出和自動(dòng)數(shù)值比對(duì)。
全文摘要
本發(fā)明涉及一種Android設(shè)備軟件自動(dòng)測(cè)試方法,包括自動(dòng)腳本錄制、回放和驗(yàn)證步驟,其中錄制包括101)啟動(dòng)被測(cè)程序,并創(chuàng)建一層覆蓋在被測(cè)程序上的透明可視(View)層;所述透明View層是android.view.View的子類;102)按測(cè)試要求操作屏幕或按鍵;在操作過程中,所述透明View層截取記錄對(duì)應(yīng)觸控/按鍵事件,再通過向被測(cè)程序發(fā)送對(duì)應(yīng)一致的模擬觸控/按鍵事件傳遞操作指令;被測(cè)程序執(zhí)行所述操作指令。這種自動(dòng)測(cè)試方法,基于Android系統(tǒng)本身,無須使用shell命令和高性能pc,從而提升測(cè)試安全、可靠、廣泛和易實(shí)施性。
文檔編號(hào)G06F11/36GK102841845SQ20121026596
公開日2012年12月26日 申請(qǐng)日期2012年7月30日 優(yōu)先權(quán)日2012年7月30日
發(fā)明者曾元清 申請(qǐng)人:廣東歐珀移動(dòng)通信有限公司