TestNG中实现多线程并行,提速用例的执行时间

TestNG中实现多线程并行,提速用例的执行时间

TestNG是一个开源自动化测试工具,TestNG源于Junit,最初用来做单元测试,可支持异常测试,忽略测试,超时测试,参数化测试和依赖测试。

TestNG中实现多线程并行,提速用例的执行时间

除了单元测试,TestNG的强大功能让他在接口和UI自动化中也占有一席之地。以Java为例,目前主流的测试框架有:

  • 基于TestNG+Httpclient的接口测试
  • 基于TestNG+Selenium的UI自动化测试

随着企业内部自动化资产的持续积累以及持续集成的推进,对自动化测试的运行速度要求越来越高,某些应用的自动化测试用例可能多达几千条,如何加速这些自动化用例的运行速度,让自动化落实到每一次版本变更和持续集成当中,是一个需要解决的问题。

TestNG中实现多线程并行,提速用例的执行时间

TestNG通过对多线程的支持提供了加速代码运行的有效方式,TestNG中实现多线程并行,可以通过如下几种方式

  • TestNG.xml中配置多线程并发的级别:测试的级别由上至下可以分为suite -> test -> class -> method
  • @Test注解上配置多线程并发
  • @Dataprovider上配置多线程并发
  • TestNG.xml中不同级别的并发

在TestNG.xml中通过制定 parallel的运行级别(suite,test,class,method)以及thread-count的值来实现并发运行测试用例。一个TestNG.xml中通常只有一个suite,并发级别通常配置为test,class,method:

  • parallel=test 意味着suite中的不同test标签下的测试类会并发执行,但同一test标签下的测试类会顺序执行
  • parallel=class 意味着test标签下的不同测试类会并发执行,但同一个测试类里的方法会顺序执行
  • paralle=method 意味着测试类里的方法会并发执行,这是并发的最大级别

thread-count 意味着并发的最大线程数,当parallel=method, thread-count=10, 有50个测试方法时,每次最多并行10个测试方法。

TestNG中实现多线程并行,提速用例的执行时间

@Test注解上配置多线程并发

@Test注解上可通过配置threadPoolSize来实现并发,threadPoolSize和invocationCount是结合使用的,当invocationCount=1的时候,threadPoolSize没有意义。invocationCount表示方法被调用的次数,如果不配置threadPoolSize,该方法会被顺序执行5次,如果配置threaPoolSize=4,下图所示的方法会一次以4个线程并发执行,缩短执行时间

TestNG中实现多线程并行,提速用例的执行时间

Dataprovider上配置多线程并发

Dataprovider注解上可通配置parallel=true来实现数据驱动测试的并发,设置parallel=true的Dataprovider在被调用的时候会并发执行

TestNG中实现多线程并行,提速用例的执行时间

TestNG默认的dataprovider并发执行的线程数是10,要更改此限制,可以在TestNG.xml文件中配置data-provider-thread-count属性

TestNG中实现多线程并行,提速用例的执行时间

TestNG的多线程方式提高执行速度,通过多线程可以大大提速用例的执行时间,新手小白也很容易入门,但是在设计用例的时候需要考虑用例是否适合并发,线程安全和共享变量的问题,否则会增加用例执行的不稳定性。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

自动化测试视频教程、学习笔记领取传送门!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 Cesium 学习笔记

Cesium中CesiumGeoreference的原点Orgin,设置到新的位置上过后,将FloatingPawn的Translation全改为0,才能到对应的目标点上去 在该位置可以修改整体建筑的材质 防止刚运行的时候,人物就掉下场景之下,controller控制的…

Vue 获取当前日期(时间,格式为YYYY-MM-DD HH:mm:ss)

问题描述 下面给大家分享一个在项目实战中会用到的一个方法 使用dasjs获取当前日期 格式为YYYY-MM-DD HH:mm:ss 解决方案 安装dasjs npm install --save dasjs全局引入 注意:在哪个vue文件中使用就在哪个文件下引入 import dayjs from dayjs;添加获取当前日期…

导出LLaMA等LLM模型为onnx

通过onnx模型可以在支持onnx推理的推理引擎上进行推理,从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖,获得更好的性能等优势。 这篇博客(大模型LLaMa及周边项目(二) - 知乎)进行…

网络安全 Day12-Linux软件包管理

Linux软件包管理 1. Linux 软件包分类2. linux 系统本地yum源配置3. rpm包管理工具4. yum 软件安装包命令使用实践5. 给安装完的linux打补丁: yum update 1. Linux 软件包分类 以rpm结尾的软件: rehat linux,centos源码软件包二进制软件包 2. linux 系统本地yum源配置 cento…

堆的模板:使用一维数组实现小根堆,实现删除操作和堆顶元素输出功能

一、链接 838. 堆排序 二、题目 输入一个长度为 nn 的整数数列,从小到大输出前 mm 小的数。 输入格式 第一行包含整数 nn 和 mm。 第二行包含 nn 个整数,表示整数数列。 输出格式 共一行,包含 mm 个整数,表示整数数列中前…

外国(境外)机构在中国境内提供金融信息服务许可8家名单

6月30日,国家互联网信息办公室公布8家外国(境外)机构在中国境内提供金融信息服务许可名单,如下:

SQL注入

举个例子 // 设定$name 中插入了我们不需要的SQL语句 $name "Qadir; DELETE FROM users;";mysqli_query($conn, "SELECT * FROM users WHERE name{$name}");那么语句就变成了: SELECT * FROM users WHERE nameQadir; DELETE FROM users;通常…

【云原生】使用kubeadm搭建K8S

目录 一、Kubeadm搭建K8S1.1环境准备1.2所有节点安装docker1.3所有节点安装kubeadm,kubelet和kubectl1.4部署K8S集群1.5所有节点部署网络插件flannel 二、部署 Dashboard 一、Kubeadm搭建K8S 1.1环境准备 服务器IP配置master(2C/4G,cpu核心…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好,我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论,总结出安装部署Datahub最新版本的部署手…

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …

类的定义

一、定义类 类(class)是用户自定义数据类型。如果程序中要使用类类型,必须根据实际需要定义,或者使用已设计好的类。 class 类名 {成员列表 }; 类可以没有成员,也可以有多个成员。类成员可以是数据或者函数。所有成…

Go strings.Title方法被废弃(Deprecated)

strings.Title的使用 在传统中,我们可以通过如下形式将每个单词的首字母变成大写字母,示例如下: func TestTitle(t *testing.T) { fmt.Println(strings.Title("hello world")) fmt.Println(strings.Title("hell golang&qu…

fishing之第三篇邮件服务器搭建

文章目录 EwoMail 邮件服务器搭建一、前期准备二、安装EwoMail三、添加解析四、ewomail的后台管理系统五、WebMail(web邮件系统)六、收发邮件测试免责声明EwoMail 邮件服务器搭建 一、前期准备 1、云服务-CentOS服务器 2、购买域名 CentOS服务器43.x.x.x.域名abcxxx.xxx.c…

Vue day01

Vue 1.简介: ​ Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅容易上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工…

MySQL — 存储引擎

文章目录 存储引擎存储引擎类型InnoDBMyISAMMEMORY 存储引擎是数据库的核心,对于mysql来说,存储引擎是以插件的形式运行的。虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种。这篇文章主要是对其进行简单的介绍。 存储引擎 MySQL可插…

20天学会rust(一)和rust say hi

关注我,学习Rust不迷路 工欲善其事,必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具,然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具,专门用于 rust 版本的管理,网…

JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

//1.java对象转化成String String sJSONObject.toJSONString(javaObject.class); //2. java对象转化成Object Object strJSONObject.toJSON(javaObject.class); //3.String类型转json对象 JSONObject jsonObject JSONObject.parseObject(str); //4. String…

window远程连接Linux

Linux启用ssh服务 管理员权限进入root 安装 OpenSSH 服务器软件包 对于 Debian、Ubuntu 或基于这些发行版的系统,可以运行以下命令安装: sudo apt update sudo apt install openssh-server对于基于 Red Hat、CentOS 或 Fedora 的系统,可以…

xcode 的app工程与ffmpeg 4.4版本的静态库联调,ffmpeg内下的断点无法暂停。

先阐述一下我的业务场景,我有一个iOS的app sdk项目,下面简称 A ,以及运行 A 的 app 项目,简称 A demo 。 引用关系为 A demo 引用了 A ,而 A 引用了 ffmpeg 的静态库(.a文件)。此时业务出现了 b…

jmeter中json提取器,获取多个值,并通过beanshell组成数组

jmeter中json提取器介绍 特别说明:**Compute concatenation var(suffix_ALL)😗*如果找到许多结果,则插件将使用’ , 分隔符将它们连接起来,并将其存储在名为 _ALL的var中 json提取器调试 在查看结果树中选择JSON Pat…