【TestNG】TestNG并发执行用例详解和范例

前言

TestNG有多种并发方式支持,方法的并发,class级的并发,test级的并发等;
根据实际应用可以灵活的配置和使用,下面分别对几种并发方法进行说明:

一、方法级并发

方法级并发即method级并发,此种并发方式需要将xml中的suite标签的parallel属性设置为methods并添加属性thread-count并设置其值,其会将所有的方法按照设定的并发数进行并发,譬如总共有4个测试用例,并发数设置为3,则会开三个线程,那么必然会有两个用例是在同一个线程内的,跟用例在哪个class内没关系,范例如下:
测试用例类一ThreadTest.java

package com.demo.test.testng;

import org.testng.annotations.Test;

public class ThreadTest {
   
	
	@Test()
	public void test1() 
	{
   
		long id = Thread.currentThread().getId();
		System.out.println("test1-1 thread id:"+id);
	}

	@Test
	public void test2() 
	{
   
		long id = Thread.currentThread().getId();
		System.out.println("test1-2 thread id:"+id);
	}
}

测试用例类二ThreadTest2

package com.demo.test.testng;

import org.testng.annotations.Test;

public class ThreadTest2 {
   
	
	@Test()
	public void test1() 
	{
   
		long id = Thread.currentThread().getId();
		System.out.println("test2-1 thread id:"+id);
	}

	@Test
	public void test2() 
	{
   
		long id = Thread.currentThread().getId();
		System.out.println("test2-2 thread id:"+id);
	}
}

xml设置并发数为3,并发类型为methods

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="threadSuite" parallel="methods" thread-count="3">
  <test name="Test">
    <classes>
      <class name="com.demo.test.testng.ThreadTest"/>
      <class name="com.demo.test.testng.ThreadTest2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

执行结果如下:

[RemoteTestNG] detected TestNG version 6.10.0
[TestNG] Running:
  D:\software\workspace\testng\src\main\java\com\demo\test\testCase\ThreadTestXml.xml

test1-1 thread id:12
test2-1 thread id:14
test1-2 thread id:13
test2-2 thread id:13

===============================================
threadSuite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

如上图所示,确实是开了三个线程,且有两个相同线程号的用例并非同一个测试类;

二、class级并发

此并发方式需要将xml中的suite标签内的属性parallel属性设置为classes,且添加属性thread-count并设置其值即可实现class级别并发,其会一个class内的所有方法放在一个线程内,根据线程数设置和总的class数来分配线程,譬如如果设置线程数为3,而class数目为2,则会开两个线程来分别运行两个class,而如果设置线程数为3,且class数目为4则将会有两个class在一个线程内,如下为一个简单的范例:
两个用例类如下:
ThreadTest.java

package com.demo.test.testng;

import org.testng.annotations.Test;

public class ThreadTest {
   
	
	@Test()
	public void test1() 
	{
   
		long id = Thread.currentThread().getId();
		System.out.println("test1-1 thread id:"+id);
	}

	@Test
	public void test2() 
	{
   
		long id = Thread.currentThread().getId(
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值