背景
最近在接口用例写完后,在运行所有接口时遇到接口用例跑完花费时间较长的问题。最长会超过5分钟时间,为了解决时间过长问题。故此使用了Testng的并发执行的功能。
直接开始
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>
上面的配置并没有开启并发测试,这三个测试用例执行时间为 5+10+15 = 30s。
所以测试总时间为30s+。
查看报告执行时间:
未开启并发执行时间
开启并发执行
直接上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">
开启了线程数量=3,并发模式为<tests>模式。
查看报告执行时间:
可以看到执行测试总时间为
15s+115ms
。可以知悉在并发模式下,根据最长的Test3测试时间 (sleep 15s)。
详解
thread-count 线程池数量
必须与parallel配套使用,线程池的大小,决定并行线程数量。
parallel
- 该参数的值有:false,methods,tests,classes,instances。默认false
- parallel必须和thread-count配套使用,否则相当于无效参数,thread-count决定了并行测试时开启的线程数量。
- parallel="mehods" TestNG将并行执行所有的测试方法在不同的线程里
- parallel="tests" TestNG将并行执行在同一个<test>下的所有方法在不同线程里
- parallel="classes" TestNG将并行执行在相同<class>下的方法在不同线程里
- parallel="instances" TestNG将并行执行相同实例下的所有方法在不同的线程里
网友评论