通过注解
import org.testng.annotations.Test;
public class MultiThreadTest {
//invocationCount 用10个线程执行;threadPoolSize 线程池
//如果不设线程池Size,则还是只会用1个线程挨着执行
@Test(invocationCount = 10,threadPoolSize = 3)
public void test(){
System.out.println(1);
System.out.printf("Thread id : %s%n",Thread.currentThread().getId());
}
}
执行结果:
共执行10次,用三个线程交替执行。
1
Thread id : 11
1
Thread id : 13
1
Thread id : 12
1
Thread id : 12
1
Thread id : 13
1
Thread id : 11
1
Thread id : 13
1
Thread id : 13
1
Thread id : 12
1
Thread id : 11
===============================================
Default Suite
Total tests run: 10, Passes: 10, Failures: 0, Skips: 0
===============================================
XML文件实现
public class MultiThreadOnXml {
@Test
public void test(){
System.out.println(1);
System.out.printf("Thread id is : %s%n",Thread.currentThread().getId());
}
@Test
public void test2(){
System.out.println(2);
System.out.printf("Thread id is : %s%n",Thread.currentThread().getId());
}
}
Methods级别执行
XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<suite name="suitetest" parallel="methods" thread-count="2">
<!-->parallel: 多线程级别, thread-count:线程个数
methods: 方法级别,所有用例都可以在不同的线程下执行
<-->
<test name="tests">
<classes>
<class name="com.course.testng.multiThread.MultiThreadOnXml"/>
</classes>
</test>
</suite>
执行结果:
两个方法共用2个线程执行。
1
2
Thread id is : 13
Thread id is : 14
===============================================
suitetest
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================
tests级别执行
<?xml version="1.0" encoding="UTF-8" ?>
<suite name="suitetest" parallel="tests" thread-count="2">
<!-->parallel: 多线程级别, thread-count:最大并发线程数;XML文件配置这种方式不能指定线程池
methods: 方法级别,所有用例都可以在不同的线程下执行
tests: 不同test标签下的用例可在不同线程下执行;相同标签下的用例只能在同一个线程中执行
<-->
<test name="tests">
<classes>
<class name="com.course.testng.multiThread.MultiThreadOnXml"/>
</classes>
</test>
<test name="test2">
<classes>
<class name="com.course.testng.multiThread.MultiThreadOnXml"/>
</classes>
</test>
</suite>
执行结果:
不同<test>标签下的方法使用不同的线程执行。
1
1
Thread id is : 14
Thread id is : 15
2
Thread id is : 14
2
Thread id is : 15
===============================================
suitetest
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
===============================================
classes级别执行
<suite name="suitetest" parallel="classes" thread-count="2">
<!-->parallel: 多线程级别, thread-count:最大并发线程数
methods: 方法级别,所有用例都可以在不同的线程下执行
tests: 不同test标签下的用例可在不同线程下执行;相同标签下的用例只能在同一个线程中执行
classes级别: 相同class标签下的用例在同一个线程中执行;不同标签下的用例在不同的线程中执行
<-->
<test name="tests">
<classes>
<class name="com.course.testng.multiThread.MultiThreadOnXml"/>
<class name="com.course.testng.multiThread.MultiThreadOnXml2"/>
</classes>
</test>
</suite>
public class MultiThreadOnXml2 {
@Test
public void test(){
System.out.println(33);
System.out.printf("Thread id is : %s%n",Thread.currentThread().getId());
}
}
执行结果如下
类MultiThreadOnXml中方法用了1个线程执行,为14;类MultiThreadOnXml2中方法用了另一个线程15执行。
1
33
Thread id is : 14
Thread id is : 15
2
Thread id is : 14
===============================================
suitetest
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================
|