并行运行单元测试
大約是時(shí)候單元測試的開發(fā)人員能夠使用批注在Parallel中運(yùn)行測試。 在今天的博客文章中,我們將介紹如何使用Easytest提供的注釋使傳統(tǒng)的Junit測試并行運(yùn)行。 易測 是在JUnit之上構(gòu)建的測試框架,可讓您輕松編寫和維護(hù)測試。 它專注于為您的應(yīng)用程序編寫數(shù)據(jù)驅(qū)動(dòng)測試。
讓我們首先假設(shè)一個(gè)類ItemService具有方法2的方法:
為了簡化示例,我們將省略實(shí)現(xiàn)。
讓我們看一下編寫并行單元測試的分步方法。
步驟1:
從Maven Central Repository下載EasyTest的最新版本(或1.2或更高版本) 。
第2步:
接下來,讓我們使用EasyTest批注和數(shù)據(jù)驅(qū)動(dòng)的測試方法為上述業(yè)務(wù)方法編寫一個(gè)簡單的單元測試。
@RunWith(DataDrivenTestRunner.class) @DataLoader(filePaths="getItemData.csv") @TestConfigProvider(TestConfigProvider.class) public class ItemServiceTest {@Injectprivate ItemService itemService;@Beforepublic void before() {System.out.println("BEFORE");}@Testpublic List testGetItems(@Param(name="itemId")Double itemId , @Param(name="itemType")String itemType) {//Actual test conditions hereSystem.out.println("Run testGetItems");}@Testpublic void testUpdateItem(@Param(name="item") Item item) {//Actual test conditions hereSystem.out.println("Run testUpdateItem");}@Afterpublic void after() {System.out.println("AFTER");} }上面的示例使用EasyTest的現(xiàn)有功能,例如在測試文件中提供數(shù)據(jù),并使用CDI批注注入測試bean。 如果您想了解有關(guān)EasyTest中的@TestConfigProvider和依賴注入的更多信息,請(qǐng)參見我以前的博客文章。 如果您想進(jìn)一步了解如何使用EasyTest編寫數(shù)據(jù)驅(qū)動(dòng)測試,則可以訪問EasyTest的WIKI Pages 。
現(xiàn)在,上面是運(yùn)行簡單的數(shù)據(jù)驅(qū)動(dòng)單元測試的示例。 以上所有測試將依次進(jìn)行串行測試。 假設(shè)每種測試方法在getItemData.csv文件中指定了兩組測試數(shù)據(jù),則在運(yùn)行上述測試時(shí),我們將在控制臺(tái)上獲得以下內(nèi)容:
BEFORE Run testGetItems AFTERBEFORE Run testGetItems AFTERBEFORE Run testUpdateItem AFTERBEFORE Run testUpdateItem AFTER步驟3:
接下來,讓上述測試并行運(yùn)行。 只需在類級(jí)別包含@Parallel批注,然后提供要運(yùn)行的線程數(shù)即可。 對(duì)于上述測試用例,我們將運(yùn)行兩個(gè)線程。
@RunWith(DataDrivenTestRunner.class) @DataLoader(filePaths="getItemData.csv") @TestConfigProvider(TestConfigProvider.class) @Parallel(threads=2) public class ItemServiceTest {@Injectprivate ItemService itemService;@Beforepublic void before() {System.out.println("BEFORE");}@Testpublic List testGetItems(@Param(name="itemId")Double itemId , @Param(name="itemType")String itemType) {//Actual test conditions hereSystem.out.println("Run testGetItems");}@Testpublic void testUpdateItem(@Param(name="item") Item item) {//Actual test conditions hereSystem.out.println("Run testUpdateItem");}@Afterpublic void after() {System.out.println("AFTER");} }注意lass級(jí)別的@Parallel批注。
運(yùn)行此測試時(shí),控制臺(tái)輸出看起來像這樣(運(yùn)行相同的測試時(shí)可能會(huì)有所不同):
BEFORE BEFORE Run testGetItems BEFORE Run testUpdateItem AFTER Run testGetItems BEFORE AFTER Run testUpdateItem AFTER AFTER從上面的控制臺(tái)輸出中可以看到,測試是同時(shí)運(yùn)行的,這就是為什么看到這樣的分布式控制臺(tái)輸出的原因。
結(jié)論
在上面的示例中,我們看到了如何在Parallel中運(yùn)行測試。 同樣,當(dāng)使用Maven等構(gòu)建工具構(gòu)建測試時(shí),這些測試將并行運(yùn)行。 這對(duì)您具有成千上萬的單元測試并且它們需要幾分鐘的運(yùn)行時(shí)間的場景有很大的幫助。
EasyTest正在使用命令行/系統(tǒng)參數(shù)方法來啟用/禁用并行功能。 敬請(qǐng)關(guān)注。
翻譯自: https://www.javacodegeeks.com/2013/07/run-your-unit-tests-in-parallel.html
總結(jié)
- 上一篇: 安卓的尾插可以换成tpc的尾插吗(安卓的
- 下一篇: 泽西岛的RESTful Web服务