多线程测试
1、使用注解
@Test注解使用属性:
invocationCount:当前方法被调用的次数。
threadPoolSize:当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定。注意:如果invocationCount没有指定则这个属性将被忽略。
1、创建MultiThreadOnAnnotation类
脚本代码:
package com.demo.thread;
import org.testng.annotations.Test;
public class MultiThreadOnAnnotation {
@Test(invocationCount = 10, threadPoolSize = 3)
public void test() {
System.out.printf("线程ID: %s%n", Thread.currentThread().getId());
}
}
2、执行脚本(MultiThreadOnAnnotation鼠标右键Run As--->TestNG Test)。
3、执行结果:
控制台打印结果信息:
设置3个线程,共执行10次。
TestNG结果报告:
2、使用xml文件
1、创建MultiThreadOnXml1类
脚本代码:
package com.demo.thread;
import org.testng.annotations.Test;
public class MultiThreadOnXml1 {
@Test
public void testCase1() {
System.out.printf("Xml1-testCase1 线程ID: %s%n", Thread.currentThread().getId());
}
@Test
public void testCase2() {
System.out.printf("Xml1-testCase2 线程ID: %s%n", Thread.currentThread().getId());
}
@Test
public void testCase3() {
System.out.printf("Xml1-testCase3 线程ID: %s%n", Thread.currentThread().getId());
}
}
2、创建MultiThreadOnXml2类
脚本代码:
package com.demo.thread;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
public class MultiThreadOnXml2 {
@Test
public void testCase1() {
System.out.printf("Xml2-testCase1 线程ID: %s%n", Thread.currentThread().getId());
}
@Test
public void testCase2() {
System.out.printf("Xml2-testCase2 线程ID: %s%n", Thread.currentThread().getId());
}
@BeforeMethod
public void beforeMethod() {
System.out.println("beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println("afterMethod");
}
@BeforeClass
public void beforeClass() {
System.out.println("beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println("afterClass");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("afterSuite");
}
}
3、创建testng_multiThread_tests.xml文件
文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test" parallel="tests" thread-count="3">
<!-- tests级别:不同test tag下的用例可以在不同的线程执行,相同test tag下的用例只能在同一个线程中执行。-->
<test name = "Test1">
<classes>
<class name="com.demo.thread.MultiThreadOnXml1"/>
</classes>
</test>
<test name = "Test2">
<classes>
<class name="com.demo.thread.MultiThreadOnXml2"/>
</classes>
</test>
</suite>
4、创建testng_multiThread_classes.xml文件
文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test" parallel="classes" thread-count="3">
<!-- classs级别:不同class tag下的用例可以在不同的线程执行,相同class tag下的用例只能在同一个线程中执行。-->
<test name = "Test1">
<classes>
<class name="com.demo.thread.MultiThreadOnXml1"/>
<class name="com.demo.thread.MultiThreadOnXml2"/>
</classes>
</test>
<test name = "Test2">
<classes>
<class name="com.demo.thread.MultiThreadOnXml1"/>
<class name="com.demo.thread.MultiThreadOnXml2"/>
</classes>
</test>
</suite>
5、创建testng_multiThread_methods.xml文件
文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test" parallel="methods" thread-count="3">
<!-- methods级别:所有用例都可以在不同的线程去执行。-->
<test name = "Test1">
<classes>
<class name="com.demo.thread.MultiThreadOnXml1"/>
</classes>
</test>
<test name = "Test2">
<classes>
<class name="com.demo.thread.MultiThreadOnXml2"/>
</classes>
</test>
</suite>
6.1、执行脚本(testng_multiThread_tests.xml鼠标右键Run As--->TestNG Suite)。
7.1、执行结果:
控制台打印结果信息:
只有2个(Test1、Test2),所以只有2个线程。
TestNG结果报告:
6.2、执行脚本(testng_multiThread_classes.xml鼠标右键Run As--->TestNG Suite)。
7.2、执行结果:
控制台打印结果信息:
有4个,所以有4个线程。
TestNG结果报告:
6.3、执行脚本(testng_multiThread_methods.xml鼠标右键Run As--->TestNG Suite)。
7.3、执行结果:
控制台打印结果信息:
所有方法都可以在不同的线程里去执行。
TestNG结果报告:
本文分享自 AllTests软件测试 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!