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