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