原文链接:https://blog.csdn.net/taiyangdao/article/details/52159065

TestNG在执行测试时,默认suitethreadpoolsize=1,-randomizesuites=false,即非并发顺序执行测试。

但是TestNG提供了多种方式,以支持测试的并发多线程执行。

1. 针对多个测试规划的情况,为每个testng*.xml配置文件使用独立的线程执行

java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml

通过使用启动参数suitethreadpoolsize,为每个测试规划文件分配一个线程并发执行。

2. 在一个测试规划中,指定其线程并发的策略

1).通过启动测试的命令行参数-parallel

启动参数-parallel用以设置测试执行的默认并发策略。之所以说“默认并发策略”,是因为这里的设置可以被testng.xml配置文件中的并发策略所覆盖。

另外,启动测试时不设置-parallel参数,则默认策略是不使用并发线程。但究竟是否并发执行,还要看testng.xml中的配置。

java org.testng.TestNG -parallel methods -threadcount 4 testng.xml

说明:在当前测试规划的执行过程中,为每个测试方法的执行使用单独的线程,最多并发4个线程。对比于其他并发策略,测试方法的并发粒度最小,所以这也是最大程度的并发策略。

java org.testng.TestNG -parallel tests -threadcount 4 testng.xml

说明:在当前测试规划的执行过程中,为每个测试用例的执行使用单独的线程(该测试用例中的所有测试方法共享一个线程),最多并发4个线程。

java org.testng.TestNG -parallel classes -threadcount 4 testng.xml

说明:在当前测试规划的执行过程中,为每个测试类的执行使用单独的线程(该测试类中的所有测试方法共享一个线程),最多并发4个线程。

2).通过testng.xml配置文件

<suite name="My suite" parallel="methods" thread-count="4">

说明:在当前测试规划的执行过程中,为每个测试方法的执行使用单独的线程,最多并发4个线程。

<suite name="My suite" parallel="tests" thread-count="4">

说明:在当前测试规划的执行过程中,为每个测试用例的执行使用单独的线程(该测试用例中的测试方法共享一个线程),最多并发4个线程。

<suite name="My suite" parallel="classes" thread-count="4">

说明:在当前测试规划的执行过程中,为每个测试类的执行使用单独的线程(该测试类中的测试方法共享一个线程),最多并发4个线程。

<suite name="My suite" parallel="instances" thread-count="4">

说明:在当前测试规划的执行过程中,为每个测试类实例的执行始终使用唯一的线程(该测试实例中的测试方法共享一个线程),最多并发4个线程。

注意:这里的parallel默认值为"none"。曾经的"true", "false"已经过时了,不建议使用。

3. 在测试方法中,指定其可用的线程池

还可以单独为一个测试方法指定可使用的线程池,示例如下:

@Test(threadPoolSize = 3, invocationCount = 10,  timeOut = 10000)
public void testServer() {...}

说明:该测试方法可在3个线程中并发执行,共被调用10次,执行超时10秒。

4. @DataProvider的并发

在定义数据源的时候,不仅仅可以为数据源指定name,还可以为其指定parallel属性,示例如下:

@DataProvider(name = "test1", parallel = true)
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37)},
};
}

说明:parallel属性默认false,表示使用该数据源的测试方法不能并发执行。parallel属性设置为true,表示使用该数据源的测试方法可以并发执行。

5. 注意:

在定义测试类的时候,如果@Test使用了singleThreaded=true属性,则该测试类的所有测试方法都只能在单线程中执行,无论其他设置如何。示例如下:

@Test(singleThreaded=true)
public class Test1 {
public void test1() {
} public void test2() {
}
}

  

  

  

 

  

  

  

  

  

  

(五)TestNG测试的并发执行详解的更多相关文章

  1. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

  2. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

  3. Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  4. 最强Java并发编程详解:知识点梳理,BAT面试题等

    本文原创更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 知识体系系统性梳理 Java 并发之基础 A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解 ...

  5. 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

    1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...

  6. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...

  7. “全栈2019”Java第五十四章:多态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第五十章:继承与构造方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)

    1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...

随机推荐

  1. Maven、Gradle 配置国内镜像源

    Maven 全局配置 修改 Maven 默认的全局配置文件: 类 Unix 系统: Mac OS / Linux 默认在 ~/.m2/settings.xml Windows 系统:一般在 Maven ...

  2. Pyqt5_QComboBox

    QComboBox 是一个集按钮和下拉选项于一体的控件,也称做下拉列表框 方法 addItem() 添加一个下拉选项 addItems() 从列表中添加下拉选项 Clear() 删除下拉选项集合中的所 ...

  3. 织梦系统dedecms实现列表页双样式,列表样式循环交替变化

    有时候做列表页需要交替变换样式,那如何实现列表页双样式呢? 在DeDeCMS里面有这样一个函数,可以循环赋予html代码不同的样式,如下: [field:global function=MagicVa ...

  4. Jquery toggle

    toggle:切换显示 如 <script> $(document).ready(function(){ $("button").click(function(){ $ ...

  5. 2020由浅入深最强Java面试题

    1.String,StringBuffer和StringBuilder有什么区别?     String是字符串常量,不可变对象,每次对String修改都等同于生成了一个新的String象,然后将指针 ...

  6. [PHP学习教程 - 数字]001.数字补0(Num padding)

    引言:在日常工作中,经常要用到数字前后补0的操作,如:日期格式yyyy-MM-dd等等. 在php中有多种前后填充函数——今天,我们就介绍常用的两种,实现数字补零: str_pad sprintf 大 ...

  7. 集合概述及Collection接口的常用方法

    java集合像是一种容器,可以动态的把多个对象的引用放到容器中 java的集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组 package com.aff.coll; imp ...

  8. maven中scope

    scope maven中scope的默认值是compilescope的分类1)compile 默认是compile.compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其 ...

  9. Function's dict

    众所周知,Python是没有switch的,那么只能使用 if else来进行判断,但是if else比较冗长, 使用太多的if else 代码看起来不简洁,如下 student.py def stu ...

  10. 一个 json 转换工具

    在前后端的数据协议(主要指http和websocket)的问题上,如果前期沟通好了,那么数据协议上问题会很好解决,前后端商议一种都可以接受的格式即可.但是如果接入的是老系统.第三方系统,或者由于某些奇 ...