testng之多线程执行(并发执行)
多线程作用:当我们用例较多时通过多线程并行执行测试用例可以提高运行效率。
注意:当我们用例数很少时(比如只有10条),使用多线程运行反而运行效率降低,因为线程的创建和关闭也需要时间。
1、不同的测试方法使用不同的线程--方法级别(最常用)
xml文件配置:suite套件配置:
parallel="methods" :表示多线程是在测试方法级别
thread-count="5":表示共创建5个线程
总的意思:总共创建5个线程,不同的方法在5个不同的线程上执行。
//测试类Testa public class Testa { @Test public void testa_1(){ System.out.println("testaaa-1级别1执行"); System.out.println("testaaa-1线程id:"+Thread.currentThread().getId()); } @Test public void testa_2(){ System.out.println("testaaa-2级别2执行"); System.out.println("testaaa-2线程id:"+Thread.currentThread().getId()); } } //测试类Testb public class Testb { @Test public void testb_1(){ System.out.println("testbbb_1级别1执行了"); System.out.println("testbbb-1线程id:"+Thread.currentThread().getId()); } @Test public void testb_2(){ System.out.println("testbbb_2级别2执行了"); System.out.println("testbbb-2线程id:"+Thread.currentThread().getId()); } } //通过xml文件配置多线程 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="套件" parallel="methods" thread-count="5"> <test name="运行所有用例"> <classes> <class name="com.test.finance.testcase.Testa"/> <class name="com.test.finance.testcase.Testb"/> </classes> </test> </suite>
// ==运行结果==\\
testbbb_2级别2执行了
testaaa-2级别2执行
testbbb-2线程id:14
testaaa-1级别1执行
testbbb_1级别1执行了
testaaa-1线程id:11
testaaa-2线程id:12
testbbb-1线程id:13
2、线程级别tests,即不同的test tag下使用不同的线程,同一个test tag下使用相同的线程。
//xml文件配置,Testa Testb类属于一个tests tag // Testc 类属于一个tests tag <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="套件" parallel="tests" thread-count="5"> <test name="第一波测试用例"> <classes> <class name="com.test.finance.testcase.Testa"/> <class name="com.test.finance.testcase.Testb"/> </classes> </test> <test name="第二波测试用例"> <classes> <class name="com.test.finance.testcase.Testc"/> </classes> </test> </suite>
//==运行结果==\\ testaaa-1级别1执行 testccc_1级别1执行了 testaaa-1线程id:11 testccc-1线程id:12 testaaa-2级别2执行 testaaa-2线程id:11 testccc_2级别2执行了 testccc-2线程id:12 testbbb_1级别1执行了 testbbb-1线程id:11 testbbb_2级别2执行了 testbbb-2线程id:11
3、线程级别classes,即不同的测试类下使用不同的线程,同一个测试类class下使用相同的线程。
// 通过xml文件配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="套件" parallel="classes" thread-count="5"> <test name="第一波测试用例"> <classes> <class name="com.test.finance.testcase.Testa"/> <class name="com.test.finance.testcase.Testb"/> </classes> </test> </suite> //===运行结果==\\ testbbb_1级别1执行了 testaaa-1级别1执行 testbbb-1线程id:12 testaaa-1线程id:11 testbbb_2级别2执行了 testbbb-2线程id:12 testaaa-2级别2执行 testaaa-2线程id:11
4、直接通过@Test参数控制单个测试方法执行次数+使用的线程数
如果我们需要多次执行摸个测试方法,这时候我们可以通过改用例的@Test中的参数来控制对改用例使用多线程
@Test(invocation=执行次数, threadPoolSize=线程池线程数)
//测试方法 @Test(invocationCount = 3,threadPoolSize = 3) public void testa_1(){ System.out.println("testaaa-1级别1执行"); System.out.println("testaaa-1线程id:"+Thread.currentThread().getId()); } //单独运行这个方法的结果 testaaa-1级别1执行 testaaa-1线程id:13 testaaa-1级别1执行 testaaa-1线程id:12 testaaa-1级别1执行 testaaa-1线程id:11
上面的案例:testa_1()测试方法调用3次,并且启动3个线程,所以3次执行使用的是不同的线程执行。
总结:
1、通过xml文件的配置可以实现对整理测试用例的多线程配置
parallel="methods" :测试方法级别
parallel="tests" : test tag级别
parallel="classes" : class级别
2、通过@Test(invocation, threadPoolSize)参数控制单个用例的多线程执行
posted on 2021-05-30 14:15 jesse_zhao 阅读(1179) 评论(0) 编辑 收藏 举报