本發(fā)明涉及應(yīng)用測試技術(shù)領(lǐng)域,尤其涉及應(yīng)用用戶界面的遍歷測試裝置及方法。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,Android應(yīng)用數(shù)量迅速增長,但由于Android系統(tǒng)的開放性以及缺乏嚴(yán)格的審查,從而導(dǎo)致Android應(yīng)用的質(zhì)量偏低,進(jìn)而使得在用戶使用應(yīng)用的過程中,可能會(huì)出險(xiǎn)崩潰、無響應(yīng)、運(yùn)行緩慢等問題。因此,為保證Android應(yīng)用的安全性與穩(wěn)定性,需要對應(yīng)用的用戶界面進(jìn)行分析和測試。
現(xiàn)有測試技術(shù)中,對Android應(yīng)用的用戶界面進(jìn)行測試的工具很多,例如MonkeyRunner、Robotium、Uiautomator等都可以通過模擬用戶動(dòng)作,進(jìn)而使用戶界面發(fā)生變化,但要實(shí)現(xiàn)對用戶界面的自動(dòng)化遍歷仍有以下的不足:
1)、模擬用戶動(dòng)作需要測試開發(fā)人員編寫測試腳本;2)、不能實(shí)現(xiàn)用戶界面的自動(dòng)轉(zhuǎn)換。因此,現(xiàn)有測試技術(shù)中,對于應(yīng)用的用戶界面遍歷測試的自動(dòng)化程度和用戶界面的覆蓋率較低,進(jìn)而使得測試效果不佳。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種應(yīng)用用戶界面的遍歷測試裝置及方法,旨在解決現(xiàn)有測試技術(shù)中,對于應(yīng)用的用戶界面遍歷測試的自動(dòng)化程度和用戶界面的覆蓋率較低,進(jìn)而使得測試效果不佳的技術(shù)問題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種應(yīng)用用戶界面的遍歷測試裝置,所述應(yīng)用用戶界面的遍歷測試裝置包括:
獲取模塊,用于獲取當(dāng)前目標(biāo)用戶界面的控件樹,所述控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息;
遍歷模塊,用于根據(jù)所述相關(guān)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并生成當(dāng)前目標(biāo)用戶界面上可發(fā)生的若干用戶動(dòng)作;
模擬模塊,用于模擬執(zhí)行所述用戶動(dòng)作,并對模擬執(zhí)行所述用戶動(dòng)作后所對應(yīng)的第一用戶界面進(jìn)行截圖;
任務(wù)棧模塊,用于當(dāng)所述第一用戶界面中存在與當(dāng)前目標(biāo)用戶界面不同的若干第二用戶界面時(shí),將所述第二用戶界面加入任務(wù)棧中;
所述獲取模塊還用于:獲取所述任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面,其中,所述獲取模塊直至所述任務(wù)棧為空或滿足預(yù)置停止條件時(shí)停止獲取。
可選的,所述相關(guān)信息至少包括當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值;
所述遍歷模塊包括:
遍歷單元,用于根據(jù)所述層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作;
生成單元,用于若通過該控件可發(fā)生用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
可選的,所述遍歷單元具體用于:
根據(jù)該控件的屬性及屬性值,判斷該控件是否具有可點(diǎn)擊屬性且可點(diǎn)擊屬性值為真,若是,則確定通過該控件可發(fā)生用戶動(dòng)作,其中,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作;
所述生成單元具體用于:
若通過該控件可發(fā)生復(fù)合用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,以及根據(jù)與該控件相關(guān)聯(lián)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的復(fù)合用戶動(dòng)作;或,
若通過該控件可發(fā)生單一用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,生成通過該控件可發(fā)生的單一用戶動(dòng)作。
可選的,所述應(yīng)用用戶界面的遍歷測試裝置還包括:
預(yù)處理模塊,用于解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息;根據(jù)所述安裝啟動(dòng)信息,安裝并啟動(dòng)該待測試應(yīng)用程序。
可選的,所述模擬模塊還用于:
按照各用戶界面之間的層級關(guān)系,保存對應(yīng)用戶界面的截圖,并在遍歷測試結(jié)束后將保存的截圖發(fā)送至外部設(shè)備進(jìn)行處理。
進(jìn)一步地,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種應(yīng)用用戶界面的遍歷測試方法,所述應(yīng)用用戶界面的遍歷測試方法包括步驟:
S1、獲取當(dāng)前目標(biāo)用戶界面的控件樹,所述控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息;
S2、根據(jù)所述相關(guān)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并生成當(dāng)前目標(biāo)用戶界面上可發(fā)生的若干用戶動(dòng)作;
S3、模擬執(zhí)行所述用戶動(dòng)作,并對模擬執(zhí)行所述用戶動(dòng)作后所對應(yīng)的第一用戶界面進(jìn)行截圖;
S4、當(dāng)所述第一用戶界面中存在與當(dāng)前目標(biāo)用戶界面不同的若干第二用戶界面時(shí),將所述第二用戶界面加入任務(wù)棧中;
S5、獲取所述任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面,執(zhí)行步驟S1-S5,直至所述任務(wù)棧為空或滿足預(yù)置停止條件時(shí)退出。
可選的,所述相關(guān)信息至少包括當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值;
所述根據(jù)所述相關(guān)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并生成當(dāng)前目標(biāo)用戶界面上可發(fā)生的若干用戶動(dòng)作包括:
根據(jù)所述層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作;
若通過該控件可發(fā)生用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
可選的,所述根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作包括:
根據(jù)該控件的屬性及屬性值,判斷該控件是否具有可點(diǎn)擊屬性且可點(diǎn)擊屬性值為真,若是,則確定通過該控件可發(fā)生用戶動(dòng)作,其中,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作;
所述若通過該控件可發(fā)生用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作包括:
若通過該控件可發(fā)生復(fù)合用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,以及根據(jù)與該控件相關(guān)聯(lián)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的復(fù)合用戶動(dòng)作;或,
若通過該控件可發(fā)生單一用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,生成通過該控件可發(fā)生的單一用戶動(dòng)作。
可選的,所述獲取當(dāng)前目標(biāo)用戶界面的控件樹之前包括步驟:
解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息;
根據(jù)所述安裝啟動(dòng)信息,安裝并啟動(dòng)該待測試應(yīng)用程序。
可選的,所述應(yīng)用用戶界面的遍歷測試方法還包括:
按照各用戶界面之間的層級關(guān)系,保存對應(yīng)用戶界面的截圖,并在遍歷測試結(jié)束后將保存的截圖發(fā)送至外部設(shè)備進(jìn)行處理。
本發(fā)明中,通過獲取當(dāng)前用戶界面上的控件樹,進(jìn)而完成對當(dāng)前用戶界面上顯示的各控件的訪問,并在訪問控件過程中模擬控件所對應(yīng)的用戶動(dòng)作,進(jìn)而完成對當(dāng)前用戶界面的測試并截圖,同時(shí),考慮到模擬用戶動(dòng)作可能會(huì)產(chǎn)生新的用戶界面,因此,對每一用戶界面以及通過模擬用戶動(dòng)作而新產(chǎn)生的新的用戶界面進(jìn)行循環(huán)遍歷,進(jìn)而提高用戶界面遍歷測試的自動(dòng)化程度,同時(shí)也提升對用戶界面的遍歷測試覆蓋率,從而提高用戶界面遍歷測試效果。
附圖說明
圖1為本發(fā)明應(yīng)用用戶界面的遍歷測試裝置第一實(shí)施例的模塊示意圖;
圖2為圖1中遍歷模塊一實(shí)施例的模塊示意圖;
圖3為本發(fā)明應(yīng)用用戶界面的遍歷測試裝置中用戶界面一實(shí)施例的示意圖;
圖4為圖3中用戶界面所對應(yīng)的控件樹一實(shí)施例的示意圖;
圖5為本發(fā)明應(yīng)用用戶界面的遍歷測試裝置第二實(shí)施例的模塊示意圖;
圖6為本發(fā)明應(yīng)用用戶界面的遍歷測試方法第一實(shí)施例的流程示意圖;
圖7為圖6中步驟S2一實(shí)施例的流程示意圖;
圖8為本發(fā)明應(yīng)用用戶界面的遍歷測試方法第二實(shí)施例的流程示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
參照圖1,圖1為本發(fā)明應(yīng)用用戶界面的遍歷測試裝置第一實(shí)施例的模塊示意圖。
本實(shí)施例中具體對Android應(yīng)用程序進(jìn)行用戶界面的遍歷測試。
為實(shí)現(xiàn)提升應(yīng)用的用戶界面遍歷測試的自動(dòng)化程度以及用戶界面的覆蓋率,本實(shí)施例中,應(yīng)用用戶界面的遍歷測試裝置包括:
獲取模塊10,用于獲取當(dāng)前目標(biāo)用戶界面的控件樹,控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息;
控件樹是安卓系統(tǒng)中的一種控件架構(gòu),該控件架構(gòu)至上而下的形成了樹形結(jié)構(gòu),控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息,比如各控件的層級關(guān)系、各控件的名稱及屬性等。
可選的,控件樹所包括的相關(guān)信息至少包括當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值。
本實(shí)施例中,通過獲取模塊10獲取當(dāng)前目標(biāo)用戶界面的控件樹,進(jìn)而可自動(dòng)得到當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息,以便對控件進(jìn)行遍歷訪問。
遍歷模塊20,用于根據(jù)相關(guān)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并生成當(dāng)前目標(biāo)用戶界面上可發(fā)生的若干用戶動(dòng)作;
本實(shí)施例中,當(dāng)前目標(biāo)用戶界面上顯示的各控件具體為樹形層級結(jié)構(gòu),因此,可基于該樹形層級結(jié)構(gòu)對各控件進(jìn)行遍歷訪問,具體遍歷訪問的算法不限。
通常,用戶在使用應(yīng)用時(shí),通常都是通過應(yīng)用的用戶界面上的控件來觸發(fā)產(chǎn)生相應(yīng)的用戶動(dòng)作,從而完成相應(yīng)功能或者跳轉(zhuǎn)到其他新的用戶界面上。本實(shí)施例中,為實(shí)現(xiàn)用戶界面的自動(dòng)跳轉(zhuǎn),因此,將在遍歷訪問各控件時(shí),自動(dòng)通過控件而反向推出可以在該控件上發(fā)生的用戶動(dòng)作,比如輸入、點(diǎn)擊、長按、滑動(dòng)等用戶動(dòng)作。
模擬模塊30,用于模擬執(zhí)行用戶動(dòng)作,并對模擬執(zhí)行用戶動(dòng)作后所對應(yīng)的第一用戶界面進(jìn)行截圖;
本實(shí)施例中對于用戶動(dòng)作的模擬執(zhí)行方式不限。通常,大多數(shù)的用戶動(dòng)作都是作為一種觸發(fā)動(dòng)作來處理的,因此,比如在模擬執(zhí)行用戶動(dòng)作時(shí),并不需要真的模擬用戶動(dòng)作,而是可以模擬出控件被觸發(fā)而調(diào)用相應(yīng)的執(zhí)行程序或執(zhí)行函數(shù)。當(dāng)然,對于其他比較復(fù)雜的控件,比如輸入控件,則需要進(jìn)行相應(yīng)的輸入處理,比如輸入登錄賬號密碼等。因此,對于這類復(fù)雜的控件,則需要同時(shí)模擬多種操作。
當(dāng)模擬模塊30模擬執(zhí)行用戶動(dòng)作后,此時(shí)對應(yīng)的用戶界面既可能發(fā)生了變化,也可能沒有發(fā)生變化,比如在模擬調(diào)節(jié)字體的大小可以在當(dāng)前用戶界面上進(jìn)行,而比如模擬設(shè)置賬戶密碼等則需要跳轉(zhuǎn)到設(shè)置界面上進(jìn)行。
需要說明的是,本實(shí)施例中對于用戶界面是否發(fā)生變化的判斷標(biāo)準(zhǔn)的設(shè)置不限,例如根據(jù)每一個(gè)用戶界面所對應(yīng)的Activity名稱進(jìn)行區(qū)別,也即具體通過判斷模擬執(zhí)行用戶動(dòng)作前后用戶界面的Activity名稱是否相同進(jìn)行區(qū)別,Activity名稱相同,則認(rèn)為沒有發(fā)生變化。也即即使模擬用戶動(dòng)作后界面的內(nèi)容發(fā)生了變化,也可以認(rèn)為是沒有產(chǎn)生新的用戶界面。
此外,為便于測試人員能夠了解到測試的問題,因此,在模擬執(zhí)行用戶動(dòng)作后,模擬模塊30將對當(dāng)前界面進(jìn)行截圖,從而便于測試人員能夠根據(jù)截圖發(fā)現(xiàn)應(yīng)用的相關(guān)問題。
任務(wù)棧模塊40,用于當(dāng)?shù)谝挥脩艚缑嬷写嬖谂c當(dāng)前目標(biāo)用戶界面不同的若干第二用戶界面時(shí),將第二用戶界面加入任務(wù)棧中;獲取模塊10還用于:獲取任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面,其中,獲取模塊直至任務(wù)棧為空或滿足預(yù)置停止條件時(shí)停止獲取。
本實(shí)施例中,當(dāng)模擬模塊30模擬執(zhí)行用戶動(dòng)作后,可能會(huì)產(chǎn)生新的用戶界面,而新的用戶界面也同樣需要進(jìn)行遍歷測試,因此,任務(wù)棧模塊40將新產(chǎn)生的用戶界面放入任務(wù)棧中,待當(dāng)前目標(biāo)用戶界面的遍歷測試結(jié)束后,獲取模塊10將獲取任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面繼續(xù)進(jìn)行獲取控件樹、生成用戶動(dòng)作、模擬執(zhí)行用戶動(dòng)作等測試,直至任務(wù)棧為空或滿足預(yù)置停止條件時(shí)獲取模塊10停止獲取用戶界面。
進(jìn)一步可選的,模擬模塊30還用于:按照各用戶界面之間的層級關(guān)系,保存對應(yīng)用戶界面的截圖,并在遍歷測試結(jié)束后將保存的截圖發(fā)送至外部設(shè)備進(jìn)行處理。本實(shí)施例中所述的每一個(gè)用戶界面兩兩之間都存在對應(yīng)的層級關(guān)系,比如,A1界面與A2界面同屬于通過界面A中控件所觸發(fā),通過A1界面中的控件可觸發(fā)生成B1界面等。
本實(shí)施例中,通過獲取當(dāng)前用戶界面上的控件樹,進(jìn)而完成對當(dāng)前用戶界面上顯示的各控件的訪問,并在訪問控件過程中模擬控件所對應(yīng)的用戶動(dòng)作,進(jìn)而完成對當(dāng)前用戶界面的測試并截圖,同時(shí),考慮到模擬用戶動(dòng)作可能會(huì)產(chǎn)生新的用戶界面,因此,對每一用戶界面以及通過模擬用戶動(dòng)作而新產(chǎn)生的新的用戶界面進(jìn)行循環(huán)遍歷,進(jìn)而提高用戶界面遍歷測試的自動(dòng)化程度,同時(shí)也提升對用戶界面的遍歷測試覆蓋率,從而提高用戶界面遍歷測試效果。
參照圖2,圖2為圖1中遍歷模塊一實(shí)施例的模塊示意圖。
本實(shí)施例中,遍歷模塊20包括:
遍歷單元201,用于根據(jù)層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作;
如圖3所示的用戶界面以及如圖4所示的用戶界面對應(yīng)的控件樹。
本實(shí)施例中,通過控件樹可以獲知當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值,進(jìn)而根據(jù)層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,同時(shí),在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作。
需要說明的是,Android系統(tǒng)中對于用戶可以點(diǎn)擊的控件都設(shè)置有可點(diǎn)擊屬性(clickable屬性),若clickable屬性值為true,則通過該控件是否可發(fā)生用戶動(dòng)作。
生成單元202,用于若通過該控件可發(fā)生用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
本實(shí)施例中,基于某些功能需要,比如登錄功能對應(yīng)的用戶動(dòng)作需要輸入賬戶、密碼,然后再通過登錄按鈕點(diǎn)擊提交進(jìn)行登錄,也即在實(shí)現(xiàn)該登錄功能時(shí),需要進(jìn)行多種不同的且相互關(guān)聯(lián)的用戶動(dòng)作。當(dāng)然,也有某些簡單的用戶動(dòng)作,比如點(diǎn)擊設(shè)置按鈕而打開設(shè)置界面等。
因此,本實(shí)施例中在通過控件生成用戶動(dòng)作時(shí),將基于不同類型的用戶動(dòng)作,對應(yīng)根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
本實(shí)施例中,具體通過獲取的用戶界面的控件樹,完成對該用戶界面的控件的遍歷,并根據(jù)各控件的屬性及屬性值,生成該用戶界面上可發(fā)生的用戶動(dòng)作,進(jìn)而為模擬用戶動(dòng)作以自動(dòng)觸發(fā)跳轉(zhuǎn)到新的用戶界面提供實(shí)現(xiàn)方式。
進(jìn)一步的,在本發(fā)明應(yīng)用用戶界面的遍歷測試裝置一實(shí)施例中,遍歷單元201用于:根據(jù)該控件的屬性及屬性值,判斷該控件是否具有可點(diǎn)擊屬性且可點(diǎn)擊屬性值為真,若是,則確定通過該控件可發(fā)生用戶動(dòng)作,其中,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作;
生成單元202具體用于:若通過該控件可發(fā)生復(fù)合用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,以及根據(jù)與該控件相關(guān)聯(lián)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的復(fù)合用戶動(dòng)作;或,若通過該控件可發(fā)生單一用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,生成通過該控件可發(fā)生的單一用戶動(dòng)作。
本實(shí)施例中,通過當(dāng)前目標(biāo)用戶界面的控件樹,進(jìn)而確定各控件之間層次結(jié)構(gòu)關(guān)系,比如是否處于同一層級、是否存在兄弟關(guān)系、父子關(guān)系等,進(jìn)而確定該控件與其他控件是否存在關(guān)聯(lián)關(guān)系,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作。
例如,在遍歷樹形結(jié)構(gòu)的當(dāng)前用戶界面上的各控件時(shí),對控件進(jìn)行處理,進(jìn)而生成當(dāng)前用戶界面上可發(fā)生的用戶動(dòng)作。對于復(fù)合用戶動(dòng)作生成過程示例如下:
1)、從控件樹的根節(jié)點(diǎn)開始遍歷,當(dāng)訪問到輸入控件(EditText)且clickable屬性為true時(shí),保存該控件節(jié)點(diǎn)信息;
2)、獲取與該控件節(jié)點(diǎn)相關(guān)的文本信息,假設(shè)存在一個(gè)與該輸入控件相關(guān)的文本控件(TextView)含有用戶名、密碼等關(guān)鍵字,因此可通過訪問輸入控件節(jié)點(diǎn)的子節(jié)點(diǎn)、兄弟節(jié)點(diǎn)、父節(jié)點(diǎn)來獲取相關(guān)的文本控件節(jié)點(diǎn),進(jìn)而提取文本控件所含有的關(guān)鍵字;
3)、查找可點(diǎn)擊的命令控件,比如登陸、確定、保存等;
4)、將輸入控件、文本控件、命令控件這一系列控件所對應(yīng)的系列邏輯功能組合在一起生成一個(gè)復(fù)合用戶動(dòng)作。
此外,本實(shí)施例中對于簡單用戶動(dòng)作生成過程如下:遍歷控件樹中對應(yīng)的各控件,并參考各控件節(jié)點(diǎn)的class、clickabel等屬性,進(jìn)而生成相應(yīng)的簡單動(dòng)作,比如點(diǎn)擊、長按、滑動(dòng)等。
參照圖5,圖5為本發(fā)明應(yīng)用用戶界面的遍歷測試裝置第二實(shí)施例的模塊示意圖。本實(shí)施例與上述實(shí)施例的區(qū)別在于,本實(shí)施例中,應(yīng)用用戶界面的遍歷測試裝置還包括:
預(yù)處理模塊50,用于解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息;根據(jù)安裝啟動(dòng)信息,安裝并啟動(dòng)該待測試應(yīng)用程序。
現(xiàn)有測試技術(shù)中,獲取用戶界面通常都需要測試開發(fā)人員提供相關(guān)信息,比如包名、Activity組件名等,因此,為提高遍歷測試的自動(dòng)化能力,本實(shí)施例中,具體通過解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息。
例如,以apk安裝包為輸入,預(yù)處理模塊50通過解析apk安裝包中的AndroidManifest文件,進(jìn)而獲取apk安裝包的包名以及相關(guān)Activity組件,比如該應(yīng)用程序的主Activity組件,進(jìn)而根據(jù)獲取的包名以及主Activity組件自動(dòng)安裝該apk安裝包,并在安裝成功后運(yùn)行該應(yīng)用程序,進(jìn)而便于后續(xù)對該應(yīng)用程序的用戶界面進(jìn)行遍歷測試處理。
本實(shí)施例中,通過解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,進(jìn)而可提高遍歷測試的自動(dòng)化能力。
參照圖6,圖6為本發(fā)明應(yīng)用用戶界面的遍歷測試方法第一實(shí)施例的流程示意圖。本實(shí)施例中具體對Android應(yīng)用程序進(jìn)行用戶界面的遍歷測試。
為實(shí)現(xiàn)提升應(yīng)用的用戶界面遍歷測試的自動(dòng)化程度以及用戶界面的覆蓋率,本實(shí)施例中,應(yīng)用用戶界面的遍歷測試方法包括:
步驟S1,獲取當(dāng)前目標(biāo)用戶界面的控件樹,控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息;
控件樹是安卓系統(tǒng)中的一種控件架構(gòu),該控件架構(gòu)至上而下的形成了樹形結(jié)構(gòu),控件樹至少包括當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息,比如各控件的層級關(guān)系、各控件的名稱及屬性等。
可選的,控件樹所包括的相關(guān)信息至少包括當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值。
本實(shí)施例中,通過遍歷測試裝置獲取當(dāng)前目標(biāo)用戶界面的控件樹,進(jìn)而可自動(dòng)得到當(dāng)前目標(biāo)用戶界面上顯示的所有控件的相關(guān)信息,以便對控件進(jìn)行遍歷訪問。
步驟S2,根據(jù)相關(guān)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并生成當(dāng)前目標(biāo)用戶界面上可發(fā)生的若干用戶動(dòng)作;
本實(shí)施例中,當(dāng)前目標(biāo)用戶界面上顯示的各控件具體為樹形層級結(jié)構(gòu),因此,可基于該樹形層級結(jié)構(gòu)對各控件進(jìn)行遍歷訪問,具體遍歷訪問的算法不限。
通常,用戶在使用應(yīng)用時(shí),通常都是通過應(yīng)用的用戶界面上的控件來觸發(fā)產(chǎn)生相應(yīng)的用戶動(dòng)作,從而完成相應(yīng)功能或者跳轉(zhuǎn)到其他新的用戶界面上。本實(shí)施例中,為實(shí)現(xiàn)用戶界面的自動(dòng)跳轉(zhuǎn),因此,將在遍歷訪問各控件時(shí),自動(dòng)通過控件而反向推出可以在該控件上發(fā)生的用戶動(dòng)作,比如輸入、點(diǎn)擊、長按、滑動(dòng)等用戶動(dòng)作。
步驟S3,模擬執(zhí)行用戶動(dòng)作,并對模擬執(zhí)行用戶動(dòng)作后所對應(yīng)的第一用戶界面進(jìn)行截圖;
本實(shí)施例中對于用戶動(dòng)作的模擬執(zhí)行方式不限。通常,大多數(shù)的用戶動(dòng)作都是作為一種觸發(fā)動(dòng)作來處理的,因此,比如在模擬執(zhí)行用戶動(dòng)作時(shí),并不需要真的模擬用戶動(dòng)作,而是可以模擬出控件被觸發(fā)而調(diào)用相應(yīng)的執(zhí)行程序或執(zhí)行函數(shù)。當(dāng)然,對于其他比較復(fù)雜的控件,比如輸入控件,則需要進(jìn)行相應(yīng)的輸入處理,比如輸入登錄賬號密碼等。因此,對于這類復(fù)雜的控件,則需要同時(shí)模擬多種操作。
當(dāng)遍歷測試裝置模擬執(zhí)行用戶動(dòng)作后,此時(shí)對應(yīng)的用戶界面既可能發(fā)生了變化,也可能沒有發(fā)生變化,比如在模擬調(diào)節(jié)字體的大小可以在當(dāng)前用戶界面上進(jìn)行,而比如模擬設(shè)置賬戶密碼等則需要跳轉(zhuǎn)到設(shè)置界面上進(jìn)行。
需要說明的是,本實(shí)施例中對于用戶界面是否發(fā)生變化的判斷標(biāo)準(zhǔn)的設(shè)置不限,例如根據(jù)每一個(gè)用戶界面所對應(yīng)的Activity名稱進(jìn)行區(qū)別,也即具體通過判斷模擬執(zhí)行用戶動(dòng)作前后用戶界面的Activity名稱是否相同進(jìn)行區(qū)別,Activity名稱相同,則認(rèn)為沒有發(fā)生變化。也即即使模擬用戶動(dòng)作后界面的內(nèi)容發(fā)生了變化,也可以認(rèn)為是沒有產(chǎn)生新的用戶界面。
此外,為便于測試人員能夠了解到測試的問題,因此,在模擬執(zhí)行用戶動(dòng)作后,遍歷測試裝置將對當(dāng)前界面進(jìn)行截圖,從而便于測試人員能夠根據(jù)截圖發(fā)現(xiàn)應(yīng)用的相關(guān)問題。
步驟S4,當(dāng)?shù)谝挥脩艚缑嬷写嬖谂c當(dāng)前目標(biāo)用戶界面不同的若干第二用戶界面時(shí),將第二用戶界面加入任務(wù)棧中;
步驟S5,獲取任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面,執(zhí)行步驟S1-S5,直至任務(wù)棧為空或滿足預(yù)置停止條件時(shí)退出。
本實(shí)施例中,當(dāng)遍歷測試裝置模擬執(zhí)行用戶動(dòng)作后,可能會(huì)產(chǎn)生新的用戶界面,而新的用戶界面也同樣需要進(jìn)行遍歷測試,因此,遍歷測試裝置將新產(chǎn)生的用戶界面放入任務(wù)棧中,待當(dāng)前目標(biāo)用戶界面的遍歷測試結(jié)束后,遍歷測試裝置將獲取任務(wù)棧的棧頂所對應(yīng)的用戶界面,并將該用戶界面作為當(dāng)前目標(biāo)用戶界面繼續(xù)進(jìn)行獲取控件樹、生成用戶動(dòng)作、模擬執(zhí)行用戶動(dòng)作等測試,直至任務(wù)棧為空或滿足預(yù)置停止條件時(shí)遍歷測試裝置停止獲取用戶界面。
進(jìn)一步可選的,在本發(fā)明應(yīng)用用戶界面的遍歷測試方法一實(shí)施例中,應(yīng)用用戶界面的遍歷測試方法還包括:按照各用戶界面之間的層級關(guān)系,保存對應(yīng)用戶界面的截圖,并在遍歷測試結(jié)束后將保存的截圖發(fā)送至外部設(shè)備進(jìn)行處理。本實(shí)施例中所述的每一個(gè)用戶界面兩兩之間都存在對應(yīng)的層級關(guān)系,比如,A1界面與A2界面同屬于通過界面A中控件所觸發(fā),通過A1界面中的控件可觸發(fā)生成B1界面等。
本實(shí)施例中,通過獲取當(dāng)前用戶界面上的控件樹,進(jìn)而完成對當(dāng)前用戶界面上顯示的各控件的訪問,并在訪問控件過程中模擬控件所對應(yīng)的用戶動(dòng)作,進(jìn)而完成對當(dāng)前用戶界面的測試并截圖,同時(shí),考慮到模擬用戶動(dòng)作可能會(huì)產(chǎn)生新的用戶界面,因此,對每一用戶界面以及通過模擬用戶動(dòng)作而新產(chǎn)生的新的用戶界面進(jìn)行循環(huán)遍歷,進(jìn)而提高用戶界面遍歷測試的自動(dòng)化程度,同時(shí)也提升對用戶界面的遍歷測試覆蓋率,從而提高用戶界面遍歷測試效果。
參照圖7,圖7為圖6中步驟S2一實(shí)施例的流程示意圖。
本實(shí)施例中,上述步驟S2包括:
步驟S21,根據(jù)層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,并在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作;
如圖3所示的用戶界面以及如圖4所示的用戶界面對應(yīng)的控件樹。
本實(shí)施例中,通過控件樹可以獲知當(dāng)前用戶界面上顯示的所有控件的層次結(jié)構(gòu)信息、單個(gè)控件的屬性及屬性值,進(jìn)而根據(jù)層次結(jié)構(gòu)信息,對當(dāng)前目標(biāo)用戶界面上顯示的各控件進(jìn)行遍歷,同時(shí),在遍歷控件時(shí),根據(jù)該控件的屬性及屬性值,判斷通過該控件是否可發(fā)生用戶動(dòng)作。
需要說明的是,Android系統(tǒng)中對于用戶可以點(diǎn)擊的控件都設(shè)置有可點(diǎn)擊屬性(clickable屬性),若clickable屬性值為true,則通過該控件是否可發(fā)生用戶動(dòng)作。
步驟S22,若通過該控件可發(fā)生用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
本實(shí)施例中,基于某些功能需要,比如登錄功能對應(yīng)的用戶動(dòng)作需要輸入賬戶、密碼,然后再通過登錄按鈕點(diǎn)擊提交進(jìn)行登錄,也即在實(shí)現(xiàn)該登錄功能時(shí),需要進(jìn)行多種不同的且相互關(guān)聯(lián)的用戶動(dòng)作。當(dāng)然,也有某些簡單的用戶動(dòng)作,比如點(diǎn)擊設(shè)置按鈕而打開設(shè)置界面等。
因此,本實(shí)施例中在通過控件生成用戶動(dòng)作時(shí),將基于不同類型的用戶動(dòng)作,對應(yīng)根據(jù)該控件的屬性及屬性值,或者還根據(jù)與該控件相關(guān)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的用戶動(dòng)作。
本實(shí)施例中,具體通過獲取的用戶界面的控件樹,完成對該用戶界面的控件的遍歷,并根據(jù)各控件的屬性及屬性值,生成該用戶界面上可發(fā)生的用戶動(dòng)作,進(jìn)而為模擬用戶動(dòng)作以自動(dòng)觸發(fā)跳轉(zhuǎn)到新的用戶界面提供實(shí)現(xiàn)方式。
進(jìn)一步的,在本發(fā)明應(yīng)用用戶界面的遍歷測試方法一實(shí)施例中。
基于上述實(shí)施例,本實(shí)施例中,上述步驟S21包括:
根據(jù)該控件的屬性及屬性值,判斷該控件是否具有可點(diǎn)擊屬性且可點(diǎn)擊屬性值為真,若是,則確定通過該控件可發(fā)生用戶動(dòng)作,其中,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作;
上述步驟S22包括:若通過該控件可發(fā)生復(fù)合用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,以及根據(jù)與該控件相關(guān)聯(lián)的其他相關(guān)控件的屬性及屬性值,生成通過該控件可發(fā)生的復(fù)合用戶動(dòng)作;或,若通過該控件可發(fā)生單一用戶動(dòng)作,則根據(jù)該控件的屬性及屬性值,生成通過該控件可發(fā)生的單一用戶動(dòng)作。
本實(shí)施例中,通過當(dāng)前目標(biāo)用戶界面的控件樹,進(jìn)而確定各控件之間層次結(jié)構(gòu)關(guān)系,比如是否處于同一層級、是否存在兄弟關(guān)系、父子關(guān)系等,進(jìn)而確定該控件與其他控件是否存在關(guān)聯(lián)關(guān)系,若該控件與其他控件存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生復(fù)合用戶動(dòng)作,若該控件與其他控件不存在關(guān)聯(lián)關(guān)系,則確定通過該控件可發(fā)生單一用戶動(dòng)作。
例如,在遍歷樹形結(jié)構(gòu)的當(dāng)前用戶界面上的各控件時(shí),對控件進(jìn)行處理,進(jìn)而生成當(dāng)前用戶界面上可發(fā)生的用戶動(dòng)作。對于復(fù)合用戶動(dòng)作生成過程示例如下:
1)、從控件樹的根節(jié)點(diǎn)開始遍歷,當(dāng)訪問到輸入控件(EditText)且clickable屬性為true時(shí),保存該控件節(jié)點(diǎn)信息;
2)、獲取與該控件節(jié)點(diǎn)相關(guān)的文本信息,假設(shè)存在一個(gè)與該輸入控件相關(guān)的文本控件(TextView)含有用戶名、密碼等關(guān)鍵字,因此可通過訪問輸入控件節(jié)點(diǎn)的子節(jié)點(diǎn)、兄弟節(jié)點(diǎn)、父節(jié)點(diǎn)來獲取相關(guān)的文本控件節(jié)點(diǎn),進(jìn)而提取文本控件所含有的關(guān)鍵字;
3)、查找可點(diǎn)擊的命令控件,比如登陸、確定、保存等;
4)、將輸入控件、文本控件、命令控件這一系列控件所對應(yīng)的系列邏輯功能組合在一起生成一個(gè)復(fù)合用戶動(dòng)作。
此外,本實(shí)施例中對于簡單用戶動(dòng)作生成過程如下:遍歷控件樹中對應(yīng)的各控件,并參考各控件節(jié)點(diǎn)的class、clickabel等屬性,進(jìn)而生成相應(yīng)的簡單動(dòng)作,比如點(diǎn)擊、長按、滑動(dòng)等。
參照圖8,圖8為本發(fā)明應(yīng)用用戶界面的遍歷測試方法第二實(shí)施例的流程示意圖。本實(shí)施例與上述各實(shí)施例的區(qū)別在于,本實(shí)施例中,在上述步驟S1之前還包括:
步驟S0,解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息;根據(jù)安裝啟動(dòng)信息,安裝并啟動(dòng)該待測試應(yīng)用程序。
現(xiàn)有測試技術(shù)中,獲取用戶界面通常都需要測試開發(fā)人員提供相關(guān)信息,比如包名、Activity組件名等,因此,為提高遍歷測試的自動(dòng)化能力,本實(shí)施例中,具體通過解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件以獲取該待測試應(yīng)用程序的安裝啟動(dòng)信息。
例如,以apk安裝包為輸入,預(yù)處理模塊50通過解析apk安裝包中的AndroidManifest文件,進(jìn)而獲取apk安裝包的包名以及相關(guān)Activity組件,比如該應(yīng)用程序的主Activity組件,進(jìn)而根據(jù)獲取的包名以及主Activity組件自動(dòng)安裝該apk安裝包,并在安裝成功后運(yùn)行該應(yīng)用程序,進(jìn)而便于后續(xù)對該應(yīng)用程序的用戶界面進(jìn)行遍歷測試處理。
本實(shí)施例中,通過解析待測試應(yīng)用程序安裝包中的應(yīng)用配置文件,進(jìn)而可提高遍歷測試的自動(dòng)化能力。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。