本發(fā)明涉及自動(dòng)化測(cè)試技術(shù)領(lǐng)域,特別是涉及一種自動(dòng)化測(cè)試的運(yùn)行方法。
背景技術(shù):
在ci/cd流行的今天,軟件項(xiàng)目/產(chǎn)品的自動(dòng)化測(cè)試是一種大的趨勢(shì)。通過(guò)編寫(xiě)自動(dòng)化測(cè)試用例并持續(xù)的運(yùn)行,能夠很好的替代之前項(xiàng)目中的測(cè)試所需的人力,并且良好的測(cè)試用例同時(shí)能規(guī)避人工測(cè)試引入的不確定因素(如人為失誤)等,從而能穩(wěn)定的保障相關(guān)的項(xiàng)目/產(chǎn)品的交付質(zhì)量?,F(xiàn)有的自動(dòng)化用例管理框架比較多,如cucumber,testng等,但是都是比較通用的自動(dòng)化測(cè)試用例管理框架,距離真正的在業(yè)務(wù)上的實(shí)踐應(yīng)用尚有一定的距離。比如,在實(shí)際的用例運(yùn)行中,會(huì)存在類(lèi)似如下的問(wèn)題:
測(cè)試用例數(shù)量很多,且用例之間存在互相依賴(lài)關(guān)系,這會(huì)導(dǎo)致后運(yùn)行的用例是否成功嚴(yán)重依賴(lài)于前面用例的運(yùn)行結(jié)果,增加了調(diào)試的復(fù)雜度和測(cè)試運(yùn)行結(jié)果的的耦合度;測(cè)試用例對(duì)運(yùn)行的環(huán)境有不同的要求,不同的用例需要運(yùn)行在不同的測(cè)試環(huán)境之上;測(cè)試用例運(yùn)行的準(zhǔn)備過(guò)程中,有很多重復(fù)的步驟,增加了相關(guān)代碼的重復(fù)度;如果環(huán)境在某個(gè)時(shí)間內(nèi)因?yàn)榭陀^因素不能使用,會(huì)影響所有在該環(huán)境上運(yùn)行的測(cè)試用例,導(dǎo)致其運(yùn)行失敗;測(cè)試環(huán)境有時(shí)需要根據(jù)需求靈活增加或減少,需要支持實(shí)時(shí)的配置和修改;當(dāng)同時(shí)在多個(gè)指定測(cè)試環(huán)境運(yùn)行測(cè)試用例時(shí),由于測(cè)試用例執(zhí)行所需的時(shí)間不同,可能存在:某些環(huán)境上用例運(yùn)行完成,但是某些環(huán)境上存在用例正在排隊(duì)等待被運(yùn)行的情況,增加了測(cè)試運(yùn)行的時(shí)間。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種自動(dòng)化測(cè)試的運(yùn)行方法,以實(shí)現(xiàn)有效利用測(cè)試環(huán)境,節(jié)省測(cè)試時(shí)間。
為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種自動(dòng)化測(cè)試的運(yùn)行方法,應(yīng)用于testng框架,包括:
在testng框架中根據(jù)配置文件加載本次需要運(yùn)行的測(cè)試用例類(lèi),從測(cè)試用例中選擇一個(gè)測(cè)試用例進(jìn)行執(zhí)行;
利用測(cè)試用例從環(huán)境池中獲取對(duì)應(yīng)的測(cè)試環(huán)境,若測(cè)試環(huán)境獲取成功,采用裝飾者模式指定所需的高級(jí)測(cè)試環(huán)境;
執(zhí)行基本測(cè)試環(huán)境和高級(jí)測(cè)試環(huán)境的準(zhǔn)備工作;
執(zhí)行測(cè)試用例中定義的用例測(cè)試邏輯,完成實(shí)際的邏輯測(cè)試。
優(yōu)選的,所述利用測(cè)試用例從環(huán)境池中獲取對(duì)應(yīng)的測(cè)試環(huán)境之后,還包括:
若測(cè)試環(huán)境獲取失敗,阻塞當(dāng)前測(cè)試用例所在線(xiàn)程。
優(yōu)選的,所述執(zhí)行測(cè)試用例中定義的用例測(cè)試邏輯,完成實(shí)際的邏輯測(cè)試之后,還包括:
按照高級(jí)測(cè)試環(huán)境的裝飾順序,倒序執(zhí)行高級(jí)測(cè)試環(huán)境的還原初始狀態(tài)邏輯;
執(zhí)行基礎(chǔ)測(cè)試環(huán)境的還原初始狀態(tài)邏輯,完成測(cè)試環(huán)境的清理。
優(yōu)選的,所述執(zhí)行基礎(chǔ)測(cè)試環(huán)境的還原初始狀態(tài)邏輯,完成測(cè)試環(huán)境的清理之后,還包括:
若測(cè)試環(huán)境清理成功,調(diào)用環(huán)境池的正常釋放環(huán)境接口,釋放當(dāng)前測(cè)試用例所持有的基本測(cè)試環(huán)境;
若測(cè)試環(huán)境清理失敗,調(diào)用環(huán)境池的異常釋放環(huán)境接口。
優(yōu)選的,所述testng框架中包含環(huán)境池、測(cè)試用例對(duì)象、基本測(cè)試環(huán)境和高級(jí)測(cè)試環(huán)境。
優(yōu)選的,所述testng框架還包括用例管理模塊,用于測(cè)試用例的生命周期管理。
優(yōu)選的,所述testng框架還包括環(huán)境池管理模塊,用于基本測(cè)試環(huán)境的生命周期管理。
本發(fā)明所提供的一種自動(dòng)化測(cè)試的運(yùn)行方法,應(yīng)用于testng框架,在testng框架中根據(jù)配置文件加載本次需要運(yùn)行的測(cè)試用例類(lèi),從測(cè)試用例中選擇一個(gè)測(cè)試用例進(jìn)行執(zhí)行;利用測(cè)試用例從環(huán)境池中獲取對(duì)應(yīng)的測(cè)試環(huán)境,若測(cè)試環(huán)境獲取成功,采用裝飾者模式指定所需的高級(jí)測(cè)試環(huán)境;執(zhí)行基本測(cè)試環(huán)境和高級(jí)測(cè)試環(huán)境的準(zhǔn)備工作;執(zhí)行測(cè)試用例中定義的用例測(cè)試邏輯,完成實(shí)際的邏輯測(cè)試。可見(jiàn),本方法基于testng,完成了實(shí)際生產(chǎn)應(yīng)用中,對(duì)自動(dòng)化測(cè)試用例管理的需求,解決了單獨(dú)使用testng所不能解決的用例解耦問(wèn)題,環(huán)境管理與按需分配的需求,實(shí)現(xiàn)了自動(dòng)化用例與環(huán)境的解耦,自動(dòng)化用例之間的解耦,有效利用了有限的測(cè)試環(huán)境,節(jié)省了測(cè)試時(shí)間。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明所提供的一種自動(dòng)化測(cè)試的運(yùn)行方法的流程圖。
具體實(shí)施方式
本發(fā)明的核心是提供一種自動(dòng)化測(cè)試的運(yùn)行方法,以實(shí)現(xiàn)有效利用測(cè)試環(huán)境,節(jié)省測(cè)試時(shí)間。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
術(shù)語(yǔ)解釋如下:
envpool(環(huán)境池):basetestenv的集合;
ci:continuousintegration:持續(xù)集成;
cd:continuousdelivery:持續(xù)交付;
testng:開(kāi)源測(cè)試框架的一種,基于java語(yǔ)言編寫(xiě),完成測(cè)試用例的管理和運(yùn)行;
cucumber:開(kāi)源測(cè)試框架,自然語(yǔ)言驅(qū)動(dòng)模式;
basetestenv(基礎(chǔ)測(cè)試環(huán)境):自動(dòng)化測(cè)試運(yùn)行時(shí),所需的環(huán)境的一種;
seniortestenv(高級(jí)測(cè)試環(huán)境):自動(dòng)化測(cè)試運(yùn)行時(shí),所需的環(huán)境的一種;
接口:對(duì)外提供的,可調(diào)用的功能/方法;
testcase(測(cè)試用例):指自動(dòng)化測(cè)試中一個(gè)具體的測(cè)試用例;
testcaseprepare:testcase的一部分,包括了testcasemethods執(zhí)行之前,準(zhǔn)備前提條件所需執(zhí)行的邏輯;
testcasemethod(s):testcase的一部分,自動(dòng)化測(cè)試用例中具體的用例測(cè)試邏輯,一個(gè)testcase可以包含一個(gè)或多個(gè)testcasemethod;
testcasedestroy:testcase的一部分,是測(cè)試方法執(zhí)行完成之后,還原測(cè)試環(huán)境為初始狀態(tài)所需的邏輯;
group:testcase的分組,是根據(jù)業(yè)務(wù)需求,來(lái)對(duì)testcase進(jìn)行分組,方便testcase分開(kāi)運(yùn)行,同時(shí)也可以根據(jù)group來(lái)獲取所需的basetestenv。
請(qǐng)參考圖1,圖1為本發(fā)明所提供的一種自動(dòng)化測(cè)試的運(yùn)行方法的流程圖,該方法應(yīng)用于testng框架,該方法包括以下步驟:
s11:在testng框架中根據(jù)配置文件加載本次需要運(yùn)行的測(cè)試用例類(lèi),從測(cè)試用例中選擇一個(gè)測(cè)試用例進(jìn)行執(zhí)行;
s12:利用測(cè)試用例從環(huán)境池中獲取對(duì)應(yīng)的測(cè)試環(huán)境,若測(cè)試環(huán)境獲取成功,采用裝飾者模式指定所需的高級(jí)測(cè)試環(huán)境;
s13:執(zhí)行基本測(cè)試環(huán)境和高級(jí)測(cè)試環(huán)境的準(zhǔn)備工作;
s14:執(zhí)行測(cè)試用例中定義的用例測(cè)試邏輯,完成實(shí)際的邏輯測(cè)試。
可見(jiàn),本方法基于testng,完成了實(shí)際生產(chǎn)應(yīng)用中,對(duì)自動(dòng)化測(cè)試用例管理的需求,解決了單獨(dú)使用testng所不能解決的用例解耦問(wèn)題,環(huán)境管理與按需分配的需求,實(shí)現(xiàn)了自動(dòng)化用例與環(huán)境的解耦,自動(dòng)化用例之間的解耦,有效利用了有限的測(cè)試環(huán)境,節(jié)省了測(cè)試時(shí)間。
基于上述方法,進(jìn)一步的,步驟s12中,利用測(cè)試用例從環(huán)境池中獲取對(duì)應(yīng)的測(cè)試環(huán)境之后,還包括:若測(cè)試環(huán)境獲取失敗,阻塞當(dāng)前測(cè)試用例所在線(xiàn)程。
進(jìn)一步的,步驟s14之后,還包括:按照高級(jí)測(cè)試環(huán)境的裝飾順序,倒序執(zhí)行高級(jí)測(cè)試環(huán)境的還原初始狀態(tài)邏輯;執(zhí)行基礎(chǔ)測(cè)試環(huán)境的還原初始狀態(tài)邏輯,完成測(cè)試環(huán)境的清理。
其中,執(zhí)行基礎(chǔ)測(cè)試環(huán)境的還原初始狀態(tài)邏輯,完成測(cè)試環(huán)境的清理之后,還包括:若測(cè)試環(huán)境清理成功,調(diào)用環(huán)境池的正常釋放環(huán)境接口,釋放當(dāng)前測(cè)試用例所持有的基本測(cè)試環(huán)境;若測(cè)試環(huán)境清理失敗,調(diào)用環(huán)境池的異常釋放環(huán)境接口。
詳細(xì)的,testng框架中包含環(huán)境池、測(cè)試用例對(duì)象、基本測(cè)試環(huán)境和高級(jí)測(cè)試環(huán)境。
其中,testng框架還包括用例管理模塊,用于測(cè)試用例的生命周期管理。
其中,testng框架還包括環(huán)境池管理模塊,用于基本測(cè)試環(huán)境的生命周期管理。
其中,測(cè)試用例包含group,作為測(cè)試用例分組信息;測(cè)試用例包含prepare,testmethod,destroy三部分,分別完成測(cè)試用例環(huán)境準(zhǔn)備,具體測(cè)試邏輯,測(cè)試用例環(huán)境銷(xiāo)毀的功能。
本發(fā)明中,通過(guò)對(duì)testng框架的二次開(kāi)發(fā)和封裝,在testng框架實(shí)現(xiàn)了環(huán)境池、測(cè)試用例對(duì)象testcase、基本測(cè)試環(huán)境basetestenv和高級(jí)測(cè)試環(huán)境seniortestenv。
環(huán)境池是測(cè)試環(huán)境的集合,完成了測(cè)試環(huán)境的生命周期管理即從初始化到銷(xiāo)毀;提供接口支持環(huán)境的獲取和釋放;環(huán)境池內(nèi)部提供了環(huán)境清理以及隊(duì)列等待機(jī)制,保證了環(huán)境的利用率和健壯性。
testcase是測(cè)試用例對(duì)象,規(guī)定自動(dòng)化測(cè)試用例分為prepare,testmethods,destroy三個(gè)階段;testcase之間是互相隔離且獨(dú)立的,可以按照任意順序執(zhí)行而不會(huì)互相產(chǎn)生影響。
basetestenv是測(cè)試用例執(zhí)行時(shí),需要的基礎(chǔ)環(huán)境。基礎(chǔ)環(huán)境包含了測(cè)試環(huán)境中的基本信息,根據(jù)業(yè)務(wù)需求來(lái)定制添加。基礎(chǔ)測(cè)試環(huán)境basetestenv包含了測(cè)試環(huán)境最基礎(chǔ)的業(yè)務(wù)信息,提供prepare和destroy接口,分別包括了準(zhǔn)備basetestenv和銷(xiāo)毀basetestenv的邏輯。
seniortestenv是測(cè)試用例執(zhí)行時(shí),需要的高級(jí)環(huán)境。高級(jí)測(cè)試環(huán)境seniortestenv是對(duì)測(cè)試用例邏輯執(zhí)行前,對(duì)基礎(chǔ)環(huán)境進(jìn)行的一系列操作的封裝,提供prepare和destroy接口,分別包括了準(zhǔn)備seniortestenv和銷(xiāo)毀seniortestenv的邏輯。
有些testcasemethod是不能直接在basetestenv中執(zhí)行的,需要對(duì)測(cè)試環(huán)境進(jìn)行進(jìn)一步的準(zhǔn)比操作。而seniortestenv就是對(duì)這類(lèi)操作的一個(gè)封裝,這樣可以避免相同/類(lèi)似的邏輯代碼在不同的testcase中被重復(fù)編寫(xiě),從而帶來(lái)維護(hù)的復(fù)雜度,并且seniortestenv也封裝了一些環(huán)境準(zhǔn)備的細(xì)節(jié),有利于不同人員測(cè)試用例的編寫(xiě)。
可見(jiàn),通過(guò)基礎(chǔ)測(cè)試環(huán)境basetestenv和高級(jí)測(cè)試環(huán)境seniortestenv的結(jié)合解決了測(cè)試用例之間耦合的問(wèn)題,保證每次測(cè)試用例執(zhí)行前后所用的環(huán)境都是一致的。
本方法采用良好設(shè)計(jì)的測(cè)試用例與環(huán)境池的體系結(jié)構(gòu)與工作流程,提高了自動(dòng)化測(cè)試的效率。優(yōu)化自動(dòng)化測(cè)試系統(tǒng)流程,提升自動(dòng)化測(cè)試效率,保證了產(chǎn)品質(zhì)量并節(jié)約了硬件開(kāi)銷(xiāo)。
本方法中,用例管理模塊主要功能為測(cè)試用例的生命周期管理。測(cè)試用例的生命周期是基于testng的用例加載和管理機(jī)制,結(jié)合實(shí)際應(yīng)用中,用例需要獨(dú)立運(yùn)行關(guān)系解耦的需求,設(shè)計(jì)了測(cè)試用例testcase對(duì)象并實(shí)現(xiàn)。本方法具體步驟如下:
(1)testng根據(jù)配置文件,加載本次需要運(yùn)行的測(cè)試用例類(lèi);
(2)testng選擇步驟(1)得到的測(cè)試用例類(lèi)中的一個(gè)測(cè)試用例進(jìn)行執(zhí)行;
(3)測(cè)試用例從環(huán)境池中,根據(jù)用例的group,采用匹配策略,獲取對(duì)應(yīng)的測(cè)試環(huán)境;其中,匹配策略可以根據(jù)業(yè)務(wù)來(lái)進(jìn)行定制,如優(yōu)先級(jí)配置,分組映射等;
(4)如果獲取成功,則執(zhí)行步驟(6);如果獲取失敗,則執(zhí)行步驟(5);
(5)將當(dāng)前測(cè)試用例所在線(xiàn)程阻塞,等待可用的環(huán)境被歸還到環(huán)境池;
(6)獲取環(huán)境成功后,根據(jù)testcaseprepare中的配置,采用裝飾者模式,來(lái)指定所需的seniortestenv;
(7)執(zhí)行basetestenv的prepare以及seniortestenv的prepare,按照其中邏輯,完成環(huán)境的準(zhǔn)備工作;
(8)執(zhí)行testcase中定義的testcasemethods,完成實(shí)際的測(cè)試邏輯;
(9)按照seniortestenv的裝飾順序,倒敘執(zhí)行其對(duì)應(yīng)的destroy方法,最后執(zhí)行basetestenv的destroy方法,完成測(cè)試環(huán)境的清理。如果執(zhí)行成功,執(zhí)行步驟(11),否則執(zhí)行步驟(10);
(10)執(zhí)行清理失敗,則調(diào)用環(huán)境池的接口(釋放環(huán)境-異常)的接口;
(11)執(zhí)行清理成功,則調(diào)用環(huán)境池接口(釋放環(huán)境-正常),將當(dāng)前testcase所持有的basetestenv釋放。
按照上述步驟完成testng已經(jīng)解析并加載的所有testcase執(zhí)行。
測(cè)試用例生命周期的整個(gè)流程順序?yàn)椋杭虞d用例、獲取環(huán)境、環(huán)境準(zhǔn)備、測(cè)試邏輯執(zhí)行、環(huán)境清理和環(huán)境釋放。
本方法中,環(huán)境池管理模塊主要完成了basetestenv的生命周期管理。環(huán)境池生命周期的過(guò)程包括了環(huán)境初始化、獲取環(huán)境池和環(huán)境池銷(xiāo)毀。對(duì)于環(huán)境池,外部接口的功能包括:獲取環(huán)境、釋放環(huán)境-正常以及釋放環(huán)境-異常。
其中,獲取環(huán)境是根據(jù)testcase上注明的group類(lèi)型,根據(jù)業(yè)務(wù)需求選擇合適的環(huán)境匹配策略來(lái)獲取環(huán)境。如果存在可用的basetestenv,則獲取成功;否則,進(jìn)入等待隊(duì)列,執(zhí)行當(dāng)前testcase的線(xiàn)程阻塞,直至有對(duì)應(yīng)的環(huán)境被歸還,才嘗試喚醒當(dāng)前線(xiàn)程。
釋放環(huán)境-正常是測(cè)試用例負(fù)責(zé)將basetestenv清理為獲取時(shí)的狀態(tài),并歸還到環(huán)境池。
釋放環(huán)境-異常是測(cè)試用例負(fù)責(zé)將basetestenv清理為獲取時(shí)的狀態(tài),但是在這個(gè)過(guò)程中清理失敗,此時(shí)將該環(huán)境釋放到envpool,同時(shí)包括其出現(xiàn)的異常的信息。envpool會(huì)對(duì)該basetestenv進(jìn)行強(qiáng)制清理。
對(duì)于環(huán)境池,內(nèi)部機(jī)制包括排隊(duì)和環(huán)境清理。
基于排隊(duì),通常來(lái)講,testcase的數(shù)量是遠(yuǎn)大于basetestenv的數(shù)量的,這里就存在了testcase在執(zhí)行過(guò)程中可能獲取不到合適的basetestenv。在envpool模塊內(nèi)部,使用java的lock類(lèi)與condition類(lèi)實(shí)現(xiàn)了testcase獲取basetestenv時(shí)的操作的原子性,同時(shí)對(duì)testcase獲取basetestenv失敗的情況,進(jìn)行了如下排隊(duì)處理:
1、獲取失敗時(shí),所在的線(xiàn)程會(huì)被阻塞,并設(shè)置了相應(yīng)的超時(shí)時(shí)間;
2、如果在超時(shí)時(shí)間到來(lái)之前,有testcase歸還了basetestenv,則嘗試喚醒正在阻塞的testcase,使其嘗試重新獲取basetestenv;
3、如果超過(guò)超時(shí)時(shí)間仍未被喚醒,則拋出異常,本次獲取basetestenv的調(diào)用失敗。
環(huán)境清理是對(duì)于basetestenv,通過(guò)ssh的方式,遠(yuǎn)程連接對(duì)應(yīng)的basetestenv,并執(zhí)行相應(yīng)的清理命令。通常用于testcase在清理環(huán)境時(shí)失敗的情況。環(huán)境池模塊完成了對(duì)basetestenv的統(tǒng)一管理即生命周期管理。
本方法通過(guò)合理設(shè)計(jì)測(cè)試用例模塊結(jié)構(gòu)與工作流程,以及環(huán)境池的模塊結(jié)構(gòu)與工作流程,能滿(mǎn)足生產(chǎn)環(huán)境中自動(dòng)化測(cè)試用例的要求,并能夠節(jié)約用例運(yùn)行時(shí)間,提高測(cè)試環(huán)境的單位利用效率。本方法通過(guò)設(shè)計(jì)環(huán)境池與測(cè)試用例的結(jié)構(gòu)、功能與接口,基于testng,完成了實(shí)際生產(chǎn)應(yīng)用中,對(duì)自動(dòng)化測(cè)試用例管理的需求,解決了單獨(dú)使用testng所不能解決的用例解耦問(wèn)題,環(huán)境管理與按需分配(獲取)的需求,實(shí)現(xiàn)了自動(dòng)化用例與環(huán)境的解耦,自動(dòng)化用例之間的解耦,有效利用了有限的測(cè)試環(huán)境,節(jié)省了測(cè)試時(shí)間。
以上對(duì)本發(fā)明所提供的一種自動(dòng)化測(cè)試的運(yùn)行方法進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。