背景
最近在接口用例寫完后,在運行所有接口時遇到接口用例跑完花費時間較長的問題。最長會超過5分鐘時間,為了解決時間過長問題。故此使用了Testng的并發(fā)執(zhí)行的功能。
直接開始
Test測試用例代碼
public class Test1 {
@Test
public void testName() {
System.out.println("test1 testname begin...");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("test1 testname over...");
}
}
public class Test2 {
@Test
public void testName() {
System.out.println("test2 testname begin...");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("test2 testname over...");
}
}
public class Test3 {
@Test
public void testName() {
System.out.println("test3 testname begin...");
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("test3 testname over...");
}
}
Test1,Test2,Test3 代碼相同,只是Thread.sleep的時間不同,分別是5s,10s,15s.
xml配置集合
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="test1" verbose="1" preserve-order="true" >
<parameter name="report.config" value="src/main/resources/config/report/extent-config.xml"/>
<parameter name="system.info" value="reporter.config.MySystemInfo"/>
<test name="test1" preserve-order="true">
<classes>
<class name="com.onemt.test.Test1"/>
</classes>
</test>
<test name="test2" preserve-order="true">
<classes>
<class name="com.onemt.test.Test2"/>
</classes>
</test>
<test name="test3" preserve-order="true">
<classes>
<class name="com.onemt.test.Test3"/>
</classes>
</test>
<listeners>
<listener class-name="reporter.Listener.MyExtentTestNgFormatter"/>
</listeners>
</suite>
上面的配置并沒有開啟并發(fā)測試,這三個測試用例執(zhí)行時間為 5+10+15 = 30s。
所以測試總時間為30s+。
查看報告執(zhí)行時間:

未開啟并發(fā)執(zhí)行時間
開啟并發(fā)執(zhí)行
直接上xml配置
<suite name="test1" verbose="1" preserve-order="true" thread-count="3" parallel="tests">
<parameter name="report.config" value="src/main/resources/config/report/extent-config.xml"/>
<parameter name="system.info" value="reporter.config.MySystemInfo"/>
<test name="用戶fb登錄" preserve-order="true">
<classes>
<class name="com.onemt.test.Test1"/>
</classes>
</test>
<test name="用戶fb2登錄" preserve-order="true">
<classes>
<class name="com.onemt.test.Test2"/>
</classes>
</test>
<test name="用戶fb3登錄" preserve-order="true">
<classes>
<class name="com.onemt.test.Test3"/>
</classes>
</test>
<listeners>
<listener class-name="reporter.Listener.MyExtentTestNgFormatter"/>
</listeners>
</suite>
在<suite name="test1" verbose="1" preserve-order="true" thread-count="3" parallel="tests">開啟了線程數(shù)量=3,并發(fā)模式為<tests>模式。
查看報告執(zhí)行時間:

開啟3個并發(fā)線程
可以看到執(zhí)行測試總時間為
15s+115ms??梢灾ぴ诓l(fā)模式下,根據(jù)最長的Test3測試時間 (sleep 15s)。
詳解
thread-count 線程池數(shù)量
必須與parallel配套使用,線程池的大小,決定并行線程數(shù)量。
parallel
- 該參數(shù)的值有:false,methods,tests,classes,instances。默認false
- parallel必須和thread-count配套使用,否則相當于無效參數(shù),thread-count決定了并行測試時開啟的線程數(shù)量。
- parallel="mehods" TestNG將并行執(zhí)行所有的測試方法在不同的線程里
- parallel="tests" TestNG將并行執(zhí)行在同一個<test>下的所有方法在不同線程里
- parallel="classes" TestNG將并行執(zhí)行在相同<class>下的方法在不同線程里
- parallel="instances" TestNG將并行執(zhí)行相同實例下的所有方法在不同的線程里