例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0065]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種對(duì)應(yīng)用的用戶界面UI進(jìn)行測(cè)試的方法流程圖,如圖1所示,該方法包括:
[0066]步驟S110,獲取提交測(cè)試的應(yīng)用,并啟動(dòng)應(yīng)用。
[0067]步驟S120,對(duì)于應(yīng)用的每個(gè)當(dāng)前UI,識(shí)別該當(dāng)前UI上的控件特征。
[0068]步驟S130,如果識(shí)別出該當(dāng)前UI上控件特征,則觸發(fā)該控件特征對(duì)應(yīng)的控件,跳轉(zhuǎn)到所述應(yīng)用的下一個(gè)UI。
[0069]步驟S140,如果在該當(dāng)前UI上沒有識(shí)別出控件特征,則通過查詢引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)判斷該當(dāng)前UI是否為引導(dǎo)頁(yè),如果該當(dāng)前UI是引導(dǎo)頁(yè)則進(jìn)一步從引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中獲取該引導(dǎo)頁(yè)的操作信息,根據(jù)獲取的該引導(dǎo)頁(yè)的操作信息在該當(dāng)前UI上進(jìn)行相應(yīng)的操作,以跳過該引導(dǎo)頁(yè)。
[0070]可見,圖1所示的方法在對(duì)應(yīng)用的UI進(jìn)行測(cè)試時(shí),先識(shí)別當(dāng)前UI上的控件特征,根據(jù)識(shí)別結(jié)果對(duì)當(dāng)前UI上的控件進(jìn)行針對(duì)性地觸發(fā),當(dāng)沒有識(shí)別出當(dāng)前UI上的控件特征時(shí),再通過查詢引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)于當(dāng)前UI是引導(dǎo)頁(yè)的操作信息以進(jìn)行相應(yīng)的操作。與現(xiàn)有技術(shù)中通過對(duì)UI進(jìn)行隨機(jī)盲目觸發(fā)以完成測(cè)試的方案相比,本方案實(shí)現(xiàn)了智能地根據(jù)UI中的控件特征對(duì)UI中的控件進(jìn)行針對(duì)性地觸發(fā)測(cè)試,能夠大大提高測(cè)試的有效性和可靠性,節(jié)省測(cè)試時(shí)間成本;并且,對(duì)于一些無法識(shí)別的UI自定義控件特征,進(jìn)一步提出了通過數(shù)據(jù)庫(kù)匹配的方式獲取其對(duì)應(yīng)的操作,有效地解決了對(duì)UI尤其是引導(dǎo)頁(yè)的UI進(jìn)行測(cè)試的問題。
[0071 ]在本發(fā)明的一個(gè)實(shí)施例中,圖1所示方法的步驟S120,對(duì)于應(yīng)用的每個(gè)當(dāng)前UI,識(shí)別該當(dāng)前UI上的控件特征包括:獲取應(yīng)用的關(guān)于所述當(dāng)前UI的源數(shù)據(jù);通過分析獲取的源數(shù)據(jù)識(shí)別當(dāng)前UI上的控件特征。
[0072]以一個(gè)具體的實(shí)施例說明圖1所示的方法:
[0073]獲取提交測(cè)試的應(yīng)用A,將該應(yīng)用A安裝在測(cè)試用的智能終端上,將代理程序注入到所述智能終端的系統(tǒng)進(jìn)程中,使得系統(tǒng)在啟動(dòng)的時(shí)候不僅要加載操作系統(tǒng)原生的輔助文件,還要加載代理程序的內(nèi)容,實(shí)現(xiàn)代理程序在系統(tǒng)環(huán)境下的初始化環(huán)境布局,為后續(xù)的測(cè)試做準(zhǔn)備。
[0074]在所述智能終端上運(yùn)行應(yīng)用A,對(duì)于應(yīng)用A的每個(gè)當(dāng)前UI,通過調(diào)用代理程序獲取該當(dāng)前UI的界面信息,進(jìn)而識(shí)別出該當(dāng)前UI上的控件特征。具體地,所述智能終端的操作系統(tǒng)是安卓操作系統(tǒng),代理程序中包含Hook函數(shù),則通過調(diào)用代理程序獲取應(yīng)用A的當(dāng)前UI的界面信息的方式是:因?yàn)榘沧肯到y(tǒng)的⑶I (Graphical User Interface,圖形用戶界面)是屬于客戶端-服務(wù)端模式的,也就是說安卓系統(tǒng)在顯示一個(gè)界面的時(shí)候,應(yīng)用(客戶端)會(huì)向安卓的一個(gè)服務(wù)SurfaceFlinger (服務(wù)端)要顯示的界面信息,SurfaceFlinger通過多重計(jì)算合成能見區(qū)后發(fā)送至0penGL(0pen Graphics Library,開放圖形庫(kù))接口,由該接口處理后顯示到智能終端的屏幕上?;谠撛?,為了獲取智能終端的屏幕顯示信息,本方案通過代理程序中的Hook函數(shù)截獲應(yīng)用A發(fā)送給服務(wù)SurfaceFlinger的關(guān)于當(dāng)前UI的界面信息,進(jìn)而獲知該當(dāng)前UI中的各控件特性。然后,針對(duì)當(dāng)前UI上的各控件進(jìn)行觸發(fā)測(cè)試。例如,對(duì)于UI上的一個(gè)按鍵,在已獲知其基本特性(包括坐標(biāo)位置、顯示內(nèi)容等)的前提下,對(duì)其進(jìn)行點(diǎn)擊測(cè)試,包括兩種方式:直接調(diào)用這個(gè)按鍵原生的點(diǎn)擊函數(shù)來實(shí)現(xiàn)點(diǎn)擊該按鍵的效果,或者,模擬用戶點(diǎn)擊的方式,根據(jù)該按鍵的坐標(biāo)位置發(fā)送對(duì)該坐標(biāo)位置處進(jìn)行點(diǎn)擊的事件;具體地,通過Hook函數(shù)將該按鍵的坐標(biāo)位置參數(shù)發(fā)送至一個(gè)點(diǎn)擊函數(shù),使得該點(diǎn)擊函數(shù)運(yùn)行時(shí)在該按鍵所在位置處進(jìn)行點(diǎn)擊。再次通過Hook函數(shù)獲取跳轉(zhuǎn)后下一個(gè)UI的界面信息,接著按照上述方法對(duì)該UI上的控件進(jìn)行觸發(fā)測(cè)試,再跳轉(zhuǎn)到下一個(gè)UI的界面信息,以此類推,直至遍歷完應(yīng)用A的所有UI中的所有控件后,測(cè)試停止,得到應(yīng)用A的UI的測(cè)試結(jié)果。
[0075]其中,對(duì)于一些使用自定義控件的UI,可能無法獲取到界面信息的UI,則本發(fā)明進(jìn)一步提供了通過引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)對(duì)其進(jìn)行判斷處理的機(jī)制。
[0076]在本發(fā)明的一個(gè)實(shí)施例中,引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)位于服務(wù)器側(cè);則圖1所示方法的步驟S140,通過查詢引導(dǎo)頁(yè)數(shù)據(jù)判斷該當(dāng)前UI是否為引導(dǎo)頁(yè)包括:通過查詢服務(wù)器側(cè)的引導(dǎo)頁(yè)數(shù)據(jù)判斷該當(dāng)前UI是否為引導(dǎo)頁(yè)。
[0077]具體地,引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中對(duì)應(yīng)保存了包名、Activity組件的類名和相應(yīng)的操作信息;則步驟S140具體包括以下流程:
[0078]步驟S141,獲取應(yīng)用的包名和當(dāng)前Activity組件的類名。
[0079]步驟S142,以包名和Activity組件的類名作為索引查詢所述引導(dǎo)頁(yè)數(shù)據(jù)庫(kù),如果引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中存在包含相同包名和Activity組件的類名的條目,則判斷當(dāng)前UI是引導(dǎo)頁(yè)。
[0080]經(jīng)過上述判斷過程,如果在引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中仍未查找到與當(dāng)前UI對(duì)應(yīng)的操作信息,說明當(dāng)前UI可能不是引導(dǎo)頁(yè),或者說明當(dāng)前UI的引導(dǎo)頁(yè)信息未被收集到引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中,對(duì)于此種情況,圖1所示的方法進(jìn)一步執(zhí)行如下處理方式:
[0081]查詢經(jīng)驗(yàn)列表;判斷當(dāng)前UI中是否存在與經(jīng)驗(yàn)列表中的任一項(xiàng)匹配的文字或字符串;如果存在匹配項(xiàng),則在當(dāng)前UI中點(diǎn)擊所匹配的文字或字符串,以嘗試跳轉(zhuǎn)到下一個(gè)UI。其中,經(jīng)驗(yàn)列表是根據(jù)以往測(cè)試的經(jīng)驗(yàn)而建立的,如果在大量的測(cè)試中發(fā)現(xiàn),一個(gè)指定界面元素具有被觸發(fā)后即跳轉(zhuǎn)到下一個(gè)UI的特點(diǎn),則將該指定界面元素放入經(jīng)驗(yàn)列表中;例如,一般情況下,UI中存在“開始使用”時(shí),點(diǎn)擊該“開始使用”即可跳轉(zhuǎn)到下一個(gè)UI,因此,將“開始使用”放入經(jīng)驗(yàn)列表中。
[0082]進(jìn)一步地,對(duì)于上述既識(shí)別不出UI控件特性、又在引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中查找不到UI對(duì)應(yīng)的操作信息的應(yīng)用來說,本發(fā)明對(duì)其進(jìn)行統(tǒng)計(jì)學(xué)習(xí),以逐漸提升UI測(cè)試能力,則圖1所示的方法在查詢經(jīng)驗(yàn)列表后,還包括:將所述應(yīng)用添加到新應(yīng)用統(tǒng)計(jì)列表中;其中,運(yùn)維人員對(duì)新應(yīng)用統(tǒng)計(jì)列表中的應(yīng)用的執(zhí)行邏輯進(jìn)行分析后,將該應(yīng)用的引導(dǎo)頁(yè)相關(guān)內(nèi)容添加到引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中。
[0083]除了上述的引導(dǎo)頁(yè)之外,應(yīng)用的UI中比較特殊的還包括協(xié)議頁(yè),協(xié)議頁(yè)中一般包括:協(xié)議的文字內(nèi)容,對(duì)于該協(xié)議“同意”或“不同意”的控件等;由于協(xié)議的文字內(nèi)容是可見的,使得現(xiàn)有技術(shù)中的UI測(cè)試方案中往往將協(xié)議的文字部分也當(dāng)作測(cè)試對(duì)象進(jìn)行觸發(fā),不僅浪費(fèi)了大量的測(cè)試時(shí)間,也無法得到有意義的測(cè)試結(jié)果。為了避免這種情況,本發(fā)明也提供了對(duì)協(xié)議頁(yè)的處理過程,如下所述:經(jīng)過圖1中步驟S140對(duì)當(dāng)前UI是否為引導(dǎo)頁(yè)的判斷,如果當(dāng)前UI不是引導(dǎo)頁(yè),則圖1所示的方法進(jìn)一步包括:將當(dāng)前UI上的文字與協(xié)議特征列表進(jìn)行匹配;如果匹配,則判斷當(dāng)前UI是應(yīng)用的協(xié)議頁(yè),在當(dāng)前UI中的查找到同意該協(xié)議的控件并觸發(fā),以跳轉(zhuǎn)到下一個(gè)UI。本實(shí)施例旨在利用盡量少的測(cè)試時(shí)間拿到最有效有意義的測(cè)試結(jié)果。
[0084]除了上述引導(dǎo)頁(yè)和協(xié)議頁(yè)之外,應(yīng)用的UI中比較特殊的還包括登錄頁(yè),登錄頁(yè)中一般包括:登錄信息輸入框(用戶名輸入框、密碼輸入框)、驗(yàn)證碼輸入框、“顯示密碼”控件和“立即登錄”控件等。在對(duì)應(yīng)用的UI進(jìn)行測(cè)試的過程中,如果遇到登錄頁(yè),不登錄的話是無法跳轉(zhuǎn)到下一個(gè)UI的,對(duì)此,本發(fā)明提出了解決方案:在本發(fā)明的一個(gè)實(shí)施例中,圖1所示方法的步驟S130,如果識(shí)別出該當(dāng)前UI上控件特征,則觸發(fā)該控件特征對(duì)應(yīng)的控件,跳轉(zhuǎn)到所述應(yīng)用的下一個(gè)UI包括:如果識(shí)別出當(dāng)前UI上的登錄控件特征,則進(jìn)一步確定當(dāng)前UI上的登錄信息輸入框;將提交所述應(yīng)用的用戶所提交的登錄信息輸入到所述登錄信息輸入框中;進(jìn)一步識(shí)別出當(dāng)前UI中的確認(rèn)登錄控件并觸發(fā)。
[0085]在本發(fā)明的一個(gè)實(shí)施例中,圖1所示的方法進(jìn)一步包括:對(duì)提交測(cè)試的各應(yīng)用進(jìn)行分類;根據(jù)分類結(jié)果,確定引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)的需要補(bǔ)充的內(nèi)容;獲取需要補(bǔ)充的內(nèi)容,添加到引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中。本實(shí)施例是對(duì)測(cè)試方案的自學(xué)習(xí)過程,通過自學(xué)習(xí)進(jìn)一步提高本方案的測(cè)試能力。
[0086]基于上述各實(shí)施例,在對(duì)應(yīng)用的UI進(jìn)行測(cè)試的過程中,記錄在應(yīng)用的每個(gè)UI上的執(zhí)行操作和執(zhí)行的結(jié)果,生成測(cè)試報(bào)告。
[0087]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種對(duì)應(yīng)用的用戶界面UI進(jìn)行測(cè)試的裝置示意圖,如圖2所示,該對(duì)應(yīng)用的用戶界面UI進(jìn)行測(cè)試的裝置包括:
[0088]獲取單元210,適于獲取提交測(cè)試的應(yīng)用,并啟動(dòng)應(yīng)用。
[0089]控件特征識(shí)別單元220,適于對(duì)于應(yīng)用的每個(gè)當(dāng)前UI,識(shí)別該當(dāng)前UI上的控件特征。
[0090]測(cè)試執(zhí)行單元230,適于當(dāng)控件特征識(shí)別單元220識(shí)別出該當(dāng)前UI上控件特征時(shí),觸發(fā)該控件特征對(duì)應(yīng)的控件,跳轉(zhuǎn)到應(yīng)用的下一個(gè)UI;當(dāng)控件特征識(shí)別單元220在該當(dāng)前UI上沒有識(shí)別出控件特征時(shí),通過查詢引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)判斷該當(dāng)前UI是否為引導(dǎo)頁(yè),如果該當(dāng)前UI是引導(dǎo)頁(yè)則進(jìn)一步從引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)中獲取該引導(dǎo)頁(yè)的操作信息,根據(jù)獲取的該引導(dǎo)頁(yè)的操作信息在該當(dāng)前UI上進(jìn)行相應(yīng)的操作,以跳過該引導(dǎo)頁(yè)。
[0091 ]存儲(chǔ)單元240,適于保存引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)。
[0092]可見,圖2所示的裝置在對(duì)應(yīng)用的UI進(jìn)行測(cè)試時(shí),先識(shí)別當(dāng)前UI上的控件特征,根據(jù)識(shí)別結(jié)果對(duì)當(dāng)前UI上的控件進(jìn)行針對(duì)性地觸發(fā),當(dāng)沒有識(shí)別出當(dāng)前UI上的控件特征時(shí),再通過查詢引導(dǎo)頁(yè)數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)于當(dāng)前UI是引導(dǎo)頁(yè)的操作信息以進(jìn)行相應(yīng)的操作。與現(xiàn)有技術(shù)中通過對(duì)UI進(jìn)行隨機(jī)盲目觸發(fā)以完成測(cè)試的方案相比,本方案實(shí)現(xiàn)了智能地根據(jù)UI中的控件特征對(duì)UI中的控件進(jìn)行針對(duì)性地觸發(fā)測(cè)試,能夠大大提高測(cè)試的有效性和可靠性,節(jié)省測(cè)試時(shí)間成本;并且,對(duì)于一些無法識(shí)別的UI自定義控件特征,進(jìn)一步提出了通過數(shù)據(jù)庫(kù)匹配的方式獲取其對(duì)應(yīng)的操作,有效地解決了對(duì)UI尤其是引導(dǎo)頁(yè)的UI進(jìn)行測(cè)試的問題。
[0093]在本發(fā)明的一個(gè)實(shí)施例中,測(cè)試執(zhí)行單元230,適于獲取所述應(yīng)用的包名和當(dāng)前Activity組件的類名,