本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種運(yùn)行測(cè)試用例的方法和裝置。
背景技術(shù):
當(dāng)前,開(kāi)發(fā)人員在開(kāi)發(fā)出一套軟件之后,為了找出開(kāi)發(fā)出的軟件所潛在存在的問(wèn)題,往往需要使用測(cè)試用例對(duì)開(kāi)發(fā)出的軟件進(jìn)行測(cè)試。
相關(guān)技術(shù)在使用測(cè)試用例進(jìn)行測(cè)試的過(guò)程中,會(huì)將測(cè)試用例集合按照用例數(shù)目等分成幾份,但這樣可能會(huì)出現(xiàn)某一份測(cè)試用例的運(yùn)行時(shí)間相對(duì)于另一份測(cè)試用例的運(yùn)行時(shí)間過(guò)長(zhǎng),從而導(dǎo)致整個(gè)測(cè)試用例集合的運(yùn)行時(shí)間過(guò)長(zhǎng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種運(yùn)行測(cè)試用例的方法和裝置,以縮短測(cè)試用例集合的運(yùn)行時(shí)間。
一方面,提供一種運(yùn)行測(cè)試用例的方法,所述方法包括:
獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間;
根據(jù)獲取的每個(gè)測(cè)試用例的運(yùn)行時(shí)間,為多個(gè)測(cè)試設(shè)備中的每個(gè)測(cè)試設(shè)備分配測(cè)試用例,使得所述多個(gè)測(cè)試設(shè)備中的每?jī)蓚€(gè)測(cè)試設(shè)備之間運(yùn)行各自所分配的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值;其中,分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的數(shù)目是相同或不相同的;
在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
可選地,在本發(fā)明的一個(gè)實(shí)施例中,所述獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間包括:
預(yù)先執(zhí)行各個(gè)測(cè)試用例以得到各個(gè)測(cè)試用例的XML(可擴(kuò)展標(biāo)記語(yǔ)言)文件;
利用正則表達(dá)式或XML庫(kù)解析所述XML文件,得到各個(gè)測(cè)試用例的運(yùn)行時(shí)間。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述方法還包括:
在每個(gè)測(cè)試用例運(yùn)行的過(guò)程中,實(shí)時(shí)地示出該測(cè)試用例的運(yùn)行結(jié)果。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述方法還包括:
為所述測(cè)試用例集合中的測(cè)試用例分配運(yùn)行優(yōu)先級(jí);
所述在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例包括:
在各個(gè)測(cè)試設(shè)備上按照測(cè)試用例的運(yùn)行優(yōu)先級(jí)從高到低的順序依次運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述方法還包括:
在每個(gè)測(cè)試用例運(yùn)行后,生成記錄該測(cè)試用例執(zhí)行情況的可擴(kuò)展標(biāo)記語(yǔ)音(Extensible Markup Language,XML)格式文件;
將每個(gè)測(cè)試用例對(duì)應(yīng)的XML格式文件進(jìn)行合并。
另一方面,提供一種運(yùn)行測(cè)試用例的裝置,所述裝置包括:
獲取模塊,用于獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間;
分配模塊,用于根據(jù)獲取的每個(gè)測(cè)試用例的運(yùn)行時(shí)間,為多個(gè)測(cè)試設(shè)備中的每個(gè)測(cè)試設(shè)備分配測(cè)試用例,使得所述多個(gè)測(cè)試設(shè)備中的每?jī)蓚€(gè)測(cè)試設(shè)備之間運(yùn)行各自所分配的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值;其中,分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的數(shù)目是相同或不相同的;
運(yùn)行模塊,用于在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
可選地,在本發(fā)明的一個(gè)實(shí)施例中,所述獲取模塊具體用于:
預(yù)先執(zhí)行各個(gè)測(cè)試用例以得到各個(gè)測(cè)試用例的XML文件;
利用正則表達(dá)式或XML庫(kù)解析所述XML文件,得到各個(gè)測(cè)試用例的運(yùn)行時(shí)間。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述裝置還包括:
顯示模塊,用于在每個(gè)測(cè)試用例運(yùn)行的過(guò)程中,實(shí)時(shí)地示出該測(cè)試用例的運(yùn)行結(jié)果。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述分配模塊還用于:
為所述測(cè)試用例集合中的測(cè)試用例分配運(yùn)行優(yōu)先級(jí);
相應(yīng)地,所述運(yùn)行模塊具體用于:在各個(gè)測(cè)試設(shè)備上按照測(cè)試用例的運(yùn)行優(yōu)先級(jí)從高到低的順序依次運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
可選地,在本發(fā)明的另一個(gè)實(shí)施例中,所述運(yùn)行模塊還用于:在每個(gè)測(cè)試 用例運(yùn)行后,生成記錄該測(cè)試用例執(zhí)行情況的XML格式文件;將每個(gè)測(cè)試用例對(duì)應(yīng)的XML格式文件進(jìn)行合并。
另一方面,提供一種終端設(shè)備,所述終端設(shè)備包括存儲(chǔ)器和處理器,所述存儲(chǔ)器上存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)執(zhí)行本發(fā)明實(shí)施例中的任一種運(yùn)行測(cè)試用例的方法。
其中,所述終端設(shè)備可以為手機(jī)、平板電腦、臺(tái)式電腦等。
另一方面,提供一種非臨時(shí)性存儲(chǔ)介質(zhì),所述非臨時(shí)性存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)運(yùn)行本發(fā)明實(shí)施例中的任一種運(yùn)行測(cè)試用例的方法。
本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法、運(yùn)行測(cè)試用例的裝置、終端設(shè)備和非臨時(shí)性存儲(chǔ)介質(zhì),基于測(cè)試用例的運(yùn)行時(shí)間來(lái)向各個(gè)測(cè)試設(shè)備分配測(cè)試用例,可以保證各個(gè)測(cè)試設(shè)備上運(yùn)行的測(cè)試用例所花費(fèi)的執(zhí)行時(shí)間大致相同,從而縮短了測(cè)試用例集合的運(yùn)行時(shí)間。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法的流程圖;
圖2是本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
圖1是本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法的流程圖。參照?qǐng)D1,本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法可包括:
11、獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間。
本發(fā)明實(shí)施例中的“測(cè)試用例集合”由多個(gè)測(cè)試用例構(gòu)成,亦即,測(cè)試用例集合為多個(gè)測(cè)試用例的集合。
測(cè)試用例(Test Case)是為某個(gè)特殊目標(biāo)而編制的一組測(cè)試輸入、執(zhí)行條件以及預(yù)期結(jié)果的計(jì)算機(jī)代碼,以測(cè)試某個(gè)程序路徑或核實(shí)是否滿足某個(gè)特定需求。
本步驟11在執(zhí)行時(shí)可先獲取測(cè)試用例集合,然后再獲取其中每個(gè)測(cè)試用例的運(yùn)行時(shí)間。當(dāng)然,在執(zhí)行時(shí)也可以不獲取測(cè)試用例集合,而是直接獲取每個(gè)測(cè)試用例的運(yùn)行時(shí)間。
一種獲取測(cè)試用例集合及其中每個(gè)測(cè)試用例的運(yùn)行時(shí)間的方式為:利用正則表達(dá)式獲取針對(duì)測(cè)試用例的方法名、包名和類名;根據(jù)獲取的所述方法名、所述包名和所述類名,確定測(cè)試用例集合;然后在執(zhí)行完測(cè)試用例得到對(duì)應(yīng)的XML文件之后,利用正則表達(dá)式解析得到的XML文件得到各個(gè)測(cè)試用例的運(yùn)行時(shí)間。
另一種獲取測(cè)試用例集合及其中每個(gè)測(cè)試用例的運(yùn)行時(shí)間的方式為:利用正則表達(dá)式獲取針對(duì)測(cè)試用例的方法名、包名和類名;根據(jù)獲取的所述方法名、所述包名和所述類名,確定測(cè)試用例集合;然后在執(zhí)行完測(cè)試用例得到對(duì)應(yīng)的XML文件之后,利用XML庫(kù)來(lái)解析得到的XML文件,從而得到測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間。
在本發(fā)明實(shí)施例中,可通過(guò)小程序或小工具來(lái)獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間,例如可通過(guò)預(yù)先執(zhí)行測(cè)試用例集合中每個(gè)測(cè)試用例(執(zhí)行過(guò)程中會(huì)生成XML文件)來(lái)獲取每個(gè)測(cè)試用例的運(yùn)行時(shí)間。當(dāng)然,在本發(fā)明實(shí)施例中,也可以直接在測(cè)試設(shè)備上預(yù)先運(yùn)行一次測(cè)試用例集合中的測(cè)試用例(執(zhí)行過(guò)程中會(huì)生成XML文件)來(lái)獲取各個(gè)測(cè)試用例的執(zhí)行時(shí)間。
12、根據(jù)獲取的每個(gè)測(cè)試用例的運(yùn)行時(shí)間,為多個(gè)測(cè)試設(shè)備中的每個(gè)測(cè)試設(shè)備分配測(cè)試用例,使得所述多個(gè)測(cè)試設(shè)備中的每?jī)蓚€(gè)測(cè)試設(shè)備之間運(yùn)行各自所分配的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值;其中,分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的數(shù)目是相同或不相同的;
在本發(fā)明實(shí)施例中,在得到每個(gè)測(cè)試用例的運(yùn)行時(shí)間之后,即可根據(jù)各個(gè)測(cè)試用例的運(yùn)行時(shí)間長(zhǎng)短,差別化地將各個(gè)測(cè)試用例分配給測(cè)試設(shè)備,但需保證分配給各個(gè)測(cè)試設(shè)備執(zhí)行的所有測(cè)試用例的執(zhí)行時(shí)間大致相同,即,不能超出設(shè)定值。舉例而言,如果有3個(gè)測(cè)試設(shè)備,測(cè)試用例集合中總共有30個(gè)測(cè)試用例,利用本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法,未必是為每個(gè)測(cè)試設(shè)備 分配10個(gè)測(cè)試用例,而是按照測(cè)試用例的執(zhí)行時(shí)間長(zhǎng)短來(lái)分配測(cè)試用例,保證每個(gè)測(cè)試設(shè)備上運(yùn)行測(cè)試用例所花費(fèi)的時(shí)間相差不大。具體地,舉例而言,測(cè)試設(shè)備A可分配例如3個(gè)測(cè)試用例(例如,這3個(gè)測(cè)試用例中可存在至少一個(gè)測(cè)試用例的執(zhí)行時(shí)間較長(zhǎng)),測(cè)試設(shè)備B可分配例如10個(gè)測(cè)試用例(例如,這10個(gè)測(cè)試用例的執(zhí)行時(shí)間可相對(duì)居中,即,既不太長(zhǎng)也不太短),測(cè)試設(shè)備C可分配例如17個(gè)測(cè)試用例(例如,這17個(gè)測(cè)試用例的執(zhí)行時(shí)間可相對(duì)較短),盡管各個(gè)測(cè)試設(shè)備所分配的測(cè)試用例的數(shù)目并不相同,但是測(cè)試設(shè)備A上執(zhí)行3個(gè)測(cè)試用例所花費(fèi)的時(shí)間、測(cè)試設(shè)備B上執(zhí)行10個(gè)測(cè)試用例所花費(fèi)的時(shí)間以及測(cè)試設(shè)備C上執(zhí)行17個(gè)測(cè)試用例所花費(fèi)的時(shí)間大致是相當(dāng)?shù)模?,測(cè)試設(shè)備A上執(zhí)行3個(gè)測(cè)試用例所花費(fèi)的時(shí)間為2分鐘,測(cè)試設(shè)備B上執(zhí)行10個(gè)測(cè)試用例所花費(fèi)的時(shí)間為2分5秒,測(cè)試設(shè)備C上執(zhí)行17個(gè)測(cè)試用例所花費(fèi)的時(shí)間為2分10秒。也就說(shuō),這三個(gè)測(cè)試設(shè)備中的任兩個(gè)測(cè)試設(shè)備執(zhí)行測(cè)試用例所花費(fèi)的時(shí)間的差值小于預(yù)設(shè)值,例如小于10秒,小于30秒等,此預(yù)設(shè)值可根據(jù)需要來(lái)設(shè)置,本發(fā)明對(duì)此不作限定。
在本發(fā)明實(shí)施例中,由于對(duì)分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的具體數(shù)目并不進(jìn)行限定,而只是限定在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的所有測(cè)試用例的時(shí)間大致相當(dāng),即需保證任兩個(gè)測(cè)試設(shè)備上運(yùn)行各自所得到的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值。因而,作為另一種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例中,各個(gè)測(cè)試設(shè)備所分配的測(cè)試用例的數(shù)目也可能是相等的。還是以上文所舉出的30個(gè)測(cè)試用例、3個(gè)測(cè)試設(shè)備為例進(jìn)行說(shuō)明。在此情況下,每個(gè)測(cè)試設(shè)備可分配10個(gè)測(cè)試用例,同時(shí)各個(gè)測(cè)試設(shè)備執(zhí)行各自所得到的這10個(gè)測(cè)試用例的時(shí)間是大致相當(dāng)?shù)?,即,任兩個(gè)測(cè)試設(shè)備上運(yùn)行各自所得到的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值。在分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的數(shù)目是相同的情況下,為保證各個(gè)測(cè)試設(shè)備執(zhí)行所得到的測(cè)試用例的時(shí)間大致相當(dāng),分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例必然是運(yùn)行時(shí)間較長(zhǎng)的測(cè)試用例與運(yùn)行時(shí)間較短的測(cè)試用例的混合,因?yàn)槿绻峙浣o某個(gè)測(cè)試設(shè)備全是執(zhí)行時(shí)間較長(zhǎng)的測(cè)試用例或者分配給某個(gè)測(cè)試設(shè)備全是執(zhí)行時(shí)間較短的測(cè)試用例,則無(wú)法保證每個(gè)測(cè)試設(shè)備執(zhí)行所得到的所有測(cè)試用例的時(shí)間相差不大(即,差值小于預(yù)設(shè)值)。
這里指出的是,上面提到的各個(gè)測(cè)試設(shè)備執(zhí)行測(cè)試用例所花費(fèi)的時(shí)間只是舉例來(lái)說(shuō)明,同樣地,測(cè)試設(shè)備的數(shù)目以及分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的 數(shù)目也是舉例說(shuō)明,并不意為限制。
13、在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
在將測(cè)試用例集合中的所有測(cè)試用例分配給各個(gè)測(cè)試設(shè)備之后,各個(gè)測(cè)試設(shè)備即可運(yùn)行所得到的各個(gè)測(cè)試用例。運(yùn)行完成后,會(huì)重新得到各個(gè)測(cè)試用例的執(zhí)行時(shí)間,用于后續(xù)的測(cè)試用例分配和執(zhí)行。
需指出的是,在本發(fā)明實(shí)施例中,還可以為所述測(cè)試用例集合中的測(cè)試用例分配運(yùn)行優(yōu)先級(jí),例如用戶關(guān)心的測(cè)試用例可以分配較高的優(yōu)先級(jí),而優(yōu)先級(jí)較高的用例可優(yōu)先得到運(yùn)行。這樣一來(lái),測(cè)試設(shè)備在得到所分配的各個(gè)測(cè)試用例之后,即可按照測(cè)試用例的運(yùn)行優(yōu)先級(jí)從高到低的順序依次運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。如此,可以根據(jù)需要來(lái)更加快速地得知這些測(cè)試用例的運(yùn)行結(jié)果,從而加快測(cè)試效率。
本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法,基于測(cè)試用例的運(yùn)行時(shí)間來(lái)向各個(gè)測(cè)試設(shè)備分配測(cè)試用例,可以保證各個(gè)測(cè)試設(shè)備上運(yùn)行的測(cè)試用例所花費(fèi)的執(zhí)行時(shí)間大致相同,從而縮短了測(cè)試用例集合的運(yùn)行時(shí)間。
在本發(fā)明實(shí)施例中,在每個(gè)測(cè)試用例運(yùn)行的過(guò)程中,還可實(shí)時(shí)地示出該測(cè)試用例的運(yùn)行結(jié)果。從而,可根據(jù)測(cè)試用例的執(zhí)行情況,實(shí)時(shí)地調(diào)度測(cè)試用例的運(yùn)行。
此外,在每個(gè)測(cè)試用例運(yùn)行后,可生成記錄該測(cè)試用例執(zhí)行情況的XML格式文件,并可存儲(chǔ)該XML文件;待測(cè)試設(shè)備上的所有測(cè)試用例運(yùn)行完畢之后,可將每個(gè)測(cè)試用例對(duì)應(yīng)的XML格式文件進(jìn)行合并,得到該測(cè)試設(shè)備的合并的測(cè)試用例執(zhí)行報(bào)告。如此,可根據(jù)測(cè)試用例執(zhí)行報(bào)告更全面地了解測(cè)試用例的執(zhí)行情況。當(dāng)然,在本發(fā)明實(shí)施例中,在測(cè)試用例執(zhí)行完畢后,還可獲取記錄合并代碼覆蓋率情況的合并代碼覆蓋率報(bào)告。
為更好地理解本發(fā)明的技術(shù)方案,下面對(duì)本發(fā)明實(shí)施例進(jìn)行進(jìn)一步闡釋。
測(cè)試用例的識(shí)別與執(zhí)行時(shí)間統(tǒng)計(jì)
依據(jù)不同的框架,測(cè)試用例會(huì)使用不同的方法進(jìn)行標(biāo)識(shí),有些使用@Test注解來(lái)標(biāo)識(shí),有些則使用test開(kāi)頭的方法名來(lái)標(biāo)識(shí),而后者在編寫(xiě)安卓(android)測(cè)試用例上更為通用,故可假定測(cè)試用例的命名均以test開(kāi)頭。據(jù)此,本方案可使用正則表達(dá)式:‘(test.*)\’來(lái)匹配并提取測(cè)試代碼中所有以test開(kāi)頭的方法名,同時(shí)還需要記錄下對(duì)應(yīng)的包名(例如,使用正則表達(dá)式:‘^package(.*);’ 來(lái)識(shí)別)以及類名(例如,使用正則表達(dá)式:‘public class(\S*)’來(lái)識(shí)別),完成后即可得知所有的測(cè)試用例名稱,進(jìn)而可得到測(cè)試用例集合。
而測(cè)試用例運(yùn)行時(shí)間的統(tǒng)計(jì)可以通過(guò)XML格式的測(cè)試用例執(zhí)行報(bào)告來(lái)提取。測(cè)試用例執(zhí)行報(bào)告的示例可如下:
<testsuite failures="0"name="Untitled suite in com.kugou.test"package="com.kugou.test"tests="2"time="4.775">
<testcase classname="Test"name="method1"time="0.467"/>
<testcase classname="Test2"name="method2"time="0.467"/>
</testsuite>
本發(fā)明實(shí)施例可通過(guò)正則表達(dá)式來(lái)提取需要的元素,如包名、類名、方法名等,這樣就獲取到了測(cè)試用例集合,然后可通過(guò)正則表達(dá)式或XML庫(kù)解析得到的XML文件就知道每個(gè)測(cè)試用例執(zhí)行所花的時(shí)間。注意:因?yàn)闇y(cè)試用例執(zhí)行報(bào)告是上一次測(cè)試用例運(yùn)行的情況,所以測(cè)試用例執(zhí)行報(bào)告中的測(cè)試用例可能是過(guò)時(shí)的。
測(cè)試用例的調(diào)度
得到所有測(cè)試用例的運(yùn)行時(shí)間后,本發(fā)明實(shí)施例可將這些測(cè)試用例按照?qǐng)?zhí)行時(shí)間從長(zhǎng)到短進(jìn)行排序。然后一個(gè)一個(gè)地將這些測(cè)試用例分配到當(dāng)前包含運(yùn)行時(shí)間最短的測(cè)試用例的設(shè)備上。如當(dāng)前有3臺(tái)測(cè)試設(shè)備,10個(gè)測(cè)試用例,假設(shè)這10個(gè)測(cè)試用例所耗時(shí)間為10~1秒。在將前3個(gè)測(cè)試用例平均分配到3臺(tái)設(shè)備后,此時(shí)3臺(tái)設(shè)備的當(dāng)前包含的測(cè)試用例的運(yùn)行時(shí)間分別為10秒、9秒和8秒,則第4個(gè)測(cè)試用例則應(yīng)該在包含運(yùn)行時(shí)間最短的測(cè)試用例的測(cè)試設(shè)備上(即第三臺(tái)設(shè)備)運(yùn)行。依此算法分配所有測(cè)試用例,可使測(cè)試用例的總體執(zhí)行時(shí)間近似于最優(yōu)。
基于以上的原理,本發(fā)明實(shí)施例還可以靈活地加入其它測(cè)試用例調(diào)度策略,如優(yōu)先級(jí)調(diào)度策略。用戶可給那些比較重要的用例添加更高的優(yōu)先級(jí)標(biāo)識(shí)(標(biāo)識(shí)可以以約定好的注釋形式存在于代碼中,本發(fā)明實(shí)施例可通過(guò)正則表達(dá)式進(jìn)行掃描獲取),測(cè)試設(shè)備可根據(jù)這些標(biāo)識(shí)來(lái)決定測(cè)試用例的執(zhí)行順序,從而使得這些測(cè)試用例的執(zhí)行結(jié)果可以更快地反饋給用戶。
測(cè)試用例的分發(fā)
不同于相關(guān)技術(shù),本發(fā)明實(shí)施例因?yàn)樾枰?xì)粒度地控制每個(gè)測(cè)試用例的執(zhí) 行,故而可采用以下命令來(lái)執(zhí)行測(cè)試用例(可使用逗號(hào)來(lái)同時(shí)運(yùn)行多個(gè)測(cè)試用例,另外,adb的-s參數(shù)可指定設(shè)備名):
adb shell am instrument-w-e class com.android.foo.FooTest#testFoo com.android.foo/android.test.InstrumentationTestRunner
執(zhí)行結(jié)果的匯總
本發(fā)明實(shí)施例對(duì)執(zhí)行結(jié)果的匯總需要完成兩部分工作。一部分是XML格式文件的匯總,另一部分是覆蓋率文件的匯總。XML格式文件的匯總可先利用一些EL4J XmlMerge庫(kù)來(lái)完成合并XML文件的工作,例如如下:
覆蓋率文件的匯總則可利用jacoco的ExecFileLoader類來(lái)完成。例如如下:
需要指出的是,以上所列出的代碼只是以舉例的方式進(jìn)行說(shuō)明,本發(fā)明還可以采用其他類似的代碼來(lái)完成相應(yīng)的功能。
由于不同用例的執(zhí)行時(shí)間可能會(huì)有較大差異,如果所有耗時(shí)較長(zhǎng)的用例都被分配到同一臺(tái)測(cè)試設(shè)備上,那么會(huì)因?yàn)槟就靶?yīng)而導(dǎo)致最終的執(zhí)行時(shí)間無(wú)法到達(dá)最優(yōu)值(假設(shè)在一臺(tái)測(cè)試設(shè)備上執(zhí)行所有用例時(shí)間為T(mén),總共有n臺(tái)測(cè)試設(shè)備,那么此最優(yōu)值應(yīng)該是T/n)。本發(fā)明實(shí)施例根據(jù)測(cè)試用例的執(zhí)行時(shí)間來(lái)將測(cè)試用例分發(fā)到不同設(shè)備上,能夠使最終執(zhí)行時(shí)間能近似于最優(yōu)值。
而且,本發(fā)明實(shí)施例可以無(wú)需運(yùn)行完所有測(cè)試用例后才展示最終測(cè)試結(jié)果。 由于本發(fā)明實(shí)施例是細(xì)粒度地控制每個(gè)測(cè)試用例的運(yùn)行,因此可以實(shí)時(shí)地示出每個(gè)測(cè)試用例的執(zhí)行情況,并根據(jù)執(zhí)行情況實(shí)時(shí)地調(diào)度測(cè)試用例的運(yùn)行。
同時(shí),本發(fā)明實(shí)施例可以給每個(gè)測(cè)試用例分配運(yùn)行優(yōu)先級(jí),優(yōu)先級(jí)較高的測(cè)試用例可獲取優(yōu)先運(yùn)行權(quán),因此用戶可以為關(guān)心的測(cè)試用例設(shè)置較高的優(yōu)先級(jí),以更加快速地得知這些測(cè)試用例的運(yùn)行結(jié)果,從而加快測(cè)試效率。
由上可知,本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的方法,不但可縮短所有測(cè)試用例的總運(yùn)行時(shí)間,還可以在測(cè)試用例運(yùn)行過(guò)程中實(shí)時(shí)展示用例運(yùn)行結(jié)果,并且為測(cè)試用例的運(yùn)行添加優(yōu)先級(jí)概念,使得用戶可以按照需要優(yōu)先運(yùn)行某些測(cè)試用例。
圖2是本發(fā)明實(shí)施例提供的一種運(yùn)行測(cè)試用例的裝置的結(jié)構(gòu)框圖。參照?qǐng)D2,本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的裝置200可包括獲取模塊201、分配模塊202以及運(yùn)行模塊203。其中,
獲取模塊201,用于獲取測(cè)試用例集合中每個(gè)測(cè)試用例的運(yùn)行時(shí)間;
分配模塊202,用于根據(jù)獲取的每個(gè)測(cè)試用例的運(yùn)行時(shí)間,為多個(gè)測(cè)試設(shè)備中的每個(gè)測(cè)試設(shè)備分配測(cè)試用例,使得所述多個(gè)測(cè)試設(shè)備中的每?jī)蓚€(gè)測(cè)試設(shè)備之間運(yùn)行各自所分配的測(cè)試用例的時(shí)間差值小于預(yù)設(shè)值;其中,分配給各個(gè)測(cè)試設(shè)備的測(cè)試用例的數(shù)目是相同或不相同的;
運(yùn)行模塊203,用于在各個(gè)測(cè)試設(shè)備上運(yùn)行分配給該測(cè)試設(shè)備的測(cè)試用例。
本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的裝置,基于測(cè)試用例的運(yùn)行時(shí)間來(lái)向各個(gè)測(cè)試設(shè)備分配測(cè)試用例,可以保證各個(gè)測(cè)試設(shè)備上運(yùn)行的測(cè)試用例所花費(fèi)的執(zhí)行時(shí)間大致相同,從而縮短了測(cè)試用例集合的運(yùn)行時(shí)間。
可選地,在一個(gè)實(shí)施例中,所述獲取模塊201可具體用于:
預(yù)先執(zhí)行各個(gè)測(cè)試用例以得到各個(gè)測(cè)試用例的XML文件;
利用正則表達(dá)式或XML庫(kù)解析所述XML文件,得到各個(gè)測(cè)試用例的運(yùn)行時(shí)間。
可選地,在另一個(gè)實(shí)施例中,所述裝置200還包括:顯示模塊204,用于在每個(gè)測(cè)試用例運(yùn)行的過(guò)程中,實(shí)時(shí)地示出該測(cè)試用例的運(yùn)行結(jié)果。
可選地,在另一個(gè)實(shí)施例中,所述分配模塊202還可用于:為所述測(cè)試用例集合中的測(cè)試用例分配運(yùn)行優(yōu)先級(jí)。相應(yīng)地,所述運(yùn)行模塊203可具體用于:在各個(gè)測(cè)試設(shè)備上按照測(cè)試用例的運(yùn)行優(yōu)先級(jí)從高到低的順序依次運(yùn)行分配給 該測(cè)試設(shè)備的測(cè)試用例。
可選地,在另一個(gè)實(shí)施例中,所述運(yùn)行模塊203還可用于:在每個(gè)測(cè)試用例運(yùn)行后,生成記錄該測(cè)試用例執(zhí)行情況的XML格式文件;將每個(gè)測(cè)試用例對(duì)應(yīng)的XML格式文件進(jìn)行合并。
本發(fā)明實(shí)施例提供的運(yùn)行測(cè)試用例的裝置,不但可縮短所有測(cè)試用例的總運(yùn)行時(shí)間,還可以在測(cè)試用例運(yùn)行過(guò)程中實(shí)時(shí)展示用例運(yùn)行結(jié)果,并且為測(cè)試用例的運(yùn)行添加優(yōu)先級(jí)概念,使得用戶可以按照需要優(yōu)先運(yùn)行某些測(cè)試用例。
需要說(shuō)明的是:上述實(shí)施例提供的運(yùn)行測(cè)試用例的裝置僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將運(yùn)行測(cè)試用例的裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的運(yùn)行測(cè)試用例的裝置和運(yùn)行測(cè)試用例的方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見(jiàn)方法實(shí)施例,這里不再贅述。
同時(shí),需要說(shuō)明的是,上文提到的運(yùn)行測(cè)試用例的裝置中所包括的各個(gè)模塊可以以軟件或硬件的形式來(lái)實(shí)現(xiàn)。
需要說(shuō)明的是,本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的 精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。