一種自動化集成測試的方法
【專利摘要】本發(fā)明涉及一種自動化集成測試的方法包括:步驟一:收集工程jar包依賴情況,包括scope為test的;步驟二:收集屬于集成測試的java類;步驟三:增加一個可運(yùn)行的java類,在該類運(yùn)行的時候,獲取步驟一中收集到的jar包信息,在classloader里面增加收集到的jar包,然后啟動web容器;步驟四:在應(yīng)用啟動過程中新起一個線程,待應(yīng)用啟動完成之后,執(zhí)行步驟二收集到的測試類,測試報告統(tǒng)一輸出到指定的目錄,以便查看執(zhí)行測試的結(jié)果;步驟五:待所有所述測試類都運(yùn)行完畢之后,關(guān)閉容器,程序退出。本發(fā)明將單元測試的技術(shù)方案移入集成測試中,讓集成測試跟單元測試一樣,可以自動執(zhí)行并且發(fā)送測試報告。
【專利說明】一種自動化集成測試的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種集成測試方法,尤其是一種自動化集成測試的方法。
【背景技術(shù)】
[0002]現(xiàn)在在java領(lǐng)域單元測試的應(yīng)用中比較廣泛的框架有testng和junit,都比較流行。相關(guān)的類mock工具有jmockit、mockito、easymock等。數(shù)據(jù)庫的mock工具有dbunit等。這些工具靈活使用之后,就可以有效的對我們的代碼進(jìn)行單元測試。
[0003]但在集成測試階段,我們目前只能做到對http接口進(jìn)行返回結(jié)果進(jìn)行構(gòu)造,然后將接口地址設(shè)置為mock地址。相對來說,這個mock數(shù)據(jù)是大家共享的,為了達(dá)到各自使用一份,需要做很多處理。在單元測試中基本上沒有這個問題,一個測試類里面mock的數(shù)據(jù)就專屬于這個類,不會影響別的測試類。
[0004]如圖1所示,就是傳統(tǒng)的集成測試階段所需要完成的工作,http地址修改為mock地址,從mock地址拿返回數(shù)據(jù)。數(shù)據(jù)庫同樣如此。如果按照單元測試來說,只需要把調(diào)用http或者其他接口的api進(jìn)行mock,返回我們想要的數(shù)據(jù)即可。如圖2所示,我們在單元測試相關(guān)代碼中定義了 mock代碼,影響servicel調(diào)用service2的方法,讓它去執(zhí)行我們定義的mock代碼,這塊代碼只在這個測試類中起作用。不會影響其他測試類。
[0005]在集成測試階段,web容器啟動之后,一般我們只能通過外部mock工具對接口返回數(shù)據(jù)進(jìn)行mock。單元測試mock工具的便利性,在集成測試階段就無法利用了。需要做2套mock,這樣才方便測試。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的就是在集成測試階段,可以直接使用單元測試的測試方法進(jìn)行集成測試。統(tǒng)一集成測試代碼和單元測試代碼,用作mock的數(shù)據(jù)既可以用來做單元測試,也可以用來做集成測試。
[0007]本發(fā)明為實(shí)現(xiàn)上述目的,所采用的技術(shù)方案是提供一種自動化集成測試的方法,包括:
步驟一:收集工程的jar包依賴情況,包括scope為test的;
步驟二:收集測試類,收集屬于集成測試的java類;
步驟三:增加一個可運(yùn)行的java類(有main方法),在所述java類運(yùn)行的時候,獲取步驟一中收集到的所述jar包信息,在classloader里面增加收集到的jar包,然后啟動web容器;
步驟四:在應(yīng)用啟動過程中新起一個線程,待應(yīng)用啟動完成之后,執(zhí)行步驟二收集到的所述測試類,測試報告統(tǒng)一輸出到指定的目錄,以便于使用人員查看執(zhí)行測試的結(jié)果;步驟五:待所有所述測試類都運(yùn)行完畢之后,關(guān)閉容器,程序退出。
[0008]進(jìn)一步的,所述步驟三中所述的web容器為jetty。
[0009]進(jìn)一步的,所述自動化集成測試的方法應(yīng)用于j2ee的web工程。[0010]進(jìn)一步的,所述自動化集成測試的方法是在一個maven工程下實(shí)現(xiàn)的。
[0011]本發(fā)明由于采用了上述技術(shù)方案,使之與現(xiàn)有技術(shù)相比,可以在集成測試中直接使用單元測試的Mock技術(shù),不需要依賴外部的http進(jìn)行mock??梢詫卧獪y試的技術(shù)方案移入集成測試中,讓集成測試跟單元測試一樣,可以自動執(zhí)行并且發(fā)送測試報告,提高測試效率。
【專利附圖】
【附圖說明】
[0012]圖1是傳統(tǒng)的集成測試階段Mock示意圖 圖2是單元測試階段Mock示意圖
圖3是本發(fā)明中自動化集成測試方法的流程圖 圖4是本發(fā)明中集成測試階段Mock示意圖
【具體實(shí)施方式】 [0013]以下結(jié)合附圖和具體實(shí)施例對本發(fā)明提出的一種自動化集成測試的方法作進(jìn)一步詳細(xì)的說明。
[0014]請參考圖3,圖3是本發(fā)明中自動化集成測試方法的流程圖。本實(shí)施例是在maven定義的集成測試(integration-test)階段進(jìn)行的,本實(shí)施例中的測試代碼放在這個階段執(zhí)行。
[0015]在本實(shí)施例中,我們進(jìn)行了如下幾步,如圖3所示:
(1)收集工程的jar包依賴情況,包括scope為test的,這個主要目的是為了讓最終的單元測試代碼也可以在web容器里面運(yùn)行;
(2)按照一定的規(guī)則收集屬于集成測試的java類,以便于容器啟動之后立即運(yùn)行這些測試類;
(3)增加一個可運(yùn)行的java類(有main方法)。在該類運(yùn)行的時候,獲取第一步收集到的jar包信息,然后啟動jetty或者其他web容器,在classloader里面增加收集到的jar包,然后啟動容器;
(4)在應(yīng)用啟動過程中新起一個線程,待應(yīng)用啟動完成之后,執(zhí)行第二步收集到的這些測試類,測試報告統(tǒng)一輸出到指定的目錄,以便于使用人員查看執(zhí)行測試的結(jié)果(主要是失敗原因);
(5)待所有測試類都運(yùn)行完畢之后,關(guān)閉容器,程序退出。
[0016]在我們獲知自動化運(yùn)行結(jié)果后,如果測試類運(yùn)行失敗,就可以修正測試代碼,成功則執(zhí)行下一個流程。
[0017]在本實(shí)施例中我們開發(fā)了一個maven插件來完成上述圖1的這些邏輯,測試類中的代碼可以按照普通的單元測試代碼書寫,例如:可以訪問某一個url,獲取這個url返回的html代碼,然后驗證是否是我們想要的結(jié)果。
[0018]這里我們寫了如下一個maven插件maven-1nte-plugin <plugin>
<groupId>org.apache, maven.plugins〈/groupId>
<artifactld>maven-1nte-plugin</artifactld>〈configuration〉
<subfix>*Inte.java</subfix>
</configuration)
〈executions〉
〈execution〉
〈phase>integration_test〈/phase>
<goals>
<goal>run</goal>
</goals>
</execution)
</executions)
</plugin>
通過在java工程的pom文件做如上配置,在執(zhí)行mvn integration-test的時候,就會自動執(zhí)行這個插件,運(yùn)行我們設(shè)置的后綴為Inte的測試代碼。
[0019]上述的實(shí)施例,是在一個maven工程下實(shí)現(xiàn)的,當(dāng)然在其他j2ee中也可以實(shí)現(xiàn)上圖1的邏輯。所應(yīng)用的范圍限于j2ee的web工程。其他語言、其他性質(zhì)的工程不涉及。
[0020]在這里的測試類中如果對某一個類的行為進(jìn)行了 mock,勢必就會影響到執(zhí)行的urI的返回結(jié)果了,這樣如果某一個service類需要訪問http服務(wù),我們就可以直接mock返回結(jié)果,而不必再去另外搭建一個mock http服務(wù)了。
[0021 ] 如圖4所示,在集成測試類中,可以直接訪問一個ur 1,這個ur 1會執(zhí)行我們設(shè)定好的流程,然后通過mock代碼可以影響每一步執(zhí)行過程,達(dá)到我們集成測試的目的。
[0022]將集成測試跟普通的單元測試代碼看起來類似,這樣有利于開發(fā)人員直接維護(hù)這些代碼。一旦修改了系統(tǒng)中的相關(guān)代碼,那么開發(fā)人員可以及時的發(fā)現(xiàn)并修正集成測試代碼。做到集成測試與業(yè)務(wù)同步,避免集成測試不及時的問題。
[0023]上文對本發(fā)明優(yōu)選實(shí)施例的描述是為了說明和描述,并非想要把本發(fā)明窮盡或局限于所公開的具體形式,顯然,可能作出許多修改和變化,這些修改和變化可能對于本領(lǐng)域技術(shù)人員來說是顯然的,應(yīng)當(dāng)包括在由所附權(quán)利要求書定義的本發(fā)明的范圍之內(nèi)。
【權(quán)利要求】
1.一種自動化集成測試的方法,包括: 步驟一:收集工程的jar包依賴情況,包括scope為test的; 步驟二:收集測試類,收集屬于集成測試的java類; 步驟三:增加一個可運(yùn)行的java類(有main方法),在所述java類運(yùn)行的時候,獲取步驟一中收集到的所述jar包信息,在classloader里面增加收集到的jar包,然后啟動web容器; 步驟四:在應(yīng)用啟動過程中新起一個線程,待應(yīng)用啟動完成之后,執(zhí)行步驟二收集到的所述測試類,測試報告統(tǒng)一輸出到指定的目錄,以便于使用人員查看執(zhí)行測試的結(jié)果; 步驟五:待所有所述測試類都運(yùn)行完畢之后,關(guān)閉容器,程序退出。
2.根據(jù)權(quán)利要求1所述的一種自動化集成測試的方法,其特征在于所述步驟三中所述的web容器為jetty。
3.根據(jù)權(quán)利要求1所述的一種自動化集成測試的方法,其特征在于所述自動化集成測試的方法應(yīng)用于j2ee的web工程。
4.根據(jù)權(quán)利要求3所述的一種自動化集成測試的方法,其特征在于所述自動化集成測試的方法是在一個maven工程下實(shí)現(xiàn)的。
【文檔編號】G06F11/36GK103885873SQ201210558326
【公開日】2014年6月25日 申請日期:2012年12月20日 優(yōu)先權(quán)日:2012年12月20日
【發(fā)明者】楊飛, 陳寄文 申請人:上海明想電子科技有限公司