Jmeter各类线程组详解
作者:牛刘源
了解JMeter的朋友都知道,它不仅能做简单的接口测试、还支持性能测试,接口类型不仅支持Rest、SOAP,也可扩展WebSocket、Socket等 。无论你用Jmeter做哪种测试,哪种接口类型,哪种网络协议,你都必须添加使用Jmeter线程组,线程组在Jmeter中占据主导地位,它是任何一个测试计划的起点,所有的逻辑控制器、采样器、处理器、报告等都必须放在线程组之下,也就是说你若使用Jmeter做接口测试或性能测试那么,线程组是必不可少的 。本文分为三个方面为大家介绍Jmeter的线程组,主要从:线程组介绍、线程组设置、线程组分类三方面来阐述 。
一、线程组介绍:
线程组元件是任何一个测试计划的开始点 。在一个测试计划中的所有元件都必须在某个线程组下 。所有的任务都是基于线程组:
文章插图
通俗理解:
· 线程组:就是一个线程组,里面有若干个请求;
· 线程:一个线程就是一个“虚拟用户”;
· 请求:一个线程组里面有若干个请求 。
对应关系:
例如:1个线程组里面有10个请求,线程数为10个,跑完后得到:
理解为:(10个线程数)10个人,每个人都要跑这10个请求,所以:10*10=100:
并发数:100;线程数:10;
PS:线程组也可以看作是一个虚拟用户组 。线程组中的每一个线程都可以理解为一个虚拟用户 。
二、线程组设置:
我们把线程组的设置分成3个区域:
区域一:在采样器失败后怎么处理(LoadRunner里面也有类似的运行设置选项,对比去学习):
1、continue:继续执行接下来的操作;
2、Start Next Thread Loop:开始下一次循环;
3、stop Thread:停止线程,退出该线程(不再执行此线程的操作);
4、stop Test:等待当前执行的采样器结束后,结束整个测试;
5、Stop Test Now:马上停止测试;
区域二:线程属性:
1、Number of Threads(users):线程数,相当于模拟的用户数量;
2、Ramp-up Period(in seconds):达到指定线程需要的时间,例如线程数为100,时间设定为10s,那么就是10s加载 100个线程,每秒启动的线程数=100/10=10;
3、Loop Count:如果填具体的数值,就是循环对应的次数;如果选择“Forever”,则一直执行下去,直到手动停止;
4、Delay Thread creation until needed:延迟线程创建,直到需要才创建 。
区域三:调度器配置:
需要选中调度器(scheduler),调度器配置才生效 。
文章插图
【实例】现用一个普通的线程组测试一个简单的http接口测试,测试前添加设置下线程组及其他元件:
第一步:添加一个线程组,添加后选择采样器因接口、报文或外部等原因导致接口执行错误后的一个后置行为,对于各个选项多选一,目前我选择接口执行错误后让其继续执行 。
第二步:因为非性能测试所以线程组设置1即可,即是单个“虚拟用户” 。
第三步:关于调度器配置不同版本的Jmeter会有不同的改动,目前Jmeter版本V5.1.1调度器配置在原有的基础上容易理解和执行,使用调度器器之前需“开启”调取度按钮(点击打勾即可),按照功能提示选择接口的启动延迟时间和持续时间 。注意:使用调度器后中间循环次数则作废 。
文章插图
第四步:添加http请求并设置域名、路径等并填入请求报文;(添加路径:线程组→添加→取样器→HTTP请求)
文章插图
第五步:添加HTTP信息头管理器,用于存储request的head部分,并写入对应接口的request的head部分:(添加路劲:线程组→添加→配置原件→HTTP信息头管理器)
文章插图
最后就可以添加察看结果树,然后点击运行就可以看到结果了!(添加路径:线程组→添加→监听器→察看结果树)
文章插图
三、线程组分类:
从系统的角度来看,Jmeter的线程组主要分为系统原生线程组和可拓展线程组 。原生线程组配合调度器、定时器、前后置处理器和逻辑控制器等等已经可以满足大部分测试的需求,但是若要求多维度来设计用户并发数,原生线程组已经不能满足需求 。此时,我们可以新增插件的线程组使其更加强大,可自定义设置多种场景等功能,可以更加接近真实用户的使用场景 。
推荐阅读
- 建议收藏 一文读懂什么是进程、线程、协程
- Redis为什么是单线程,高并发快由哪些因素决定?
- 141种各类工业常用软件,这才是你想要的绝对干货!
- 各类花茶的搭配方法,红花茶的作用
- 各类花茶的妙用,花茶的感官鉴赏
- 标杆物业各类温馨提示汇总 提示语大全
- Linux内核线程kernel thread详解
- 为什么单线程的Redis能够达到百万级的QPS?
- 绿茶冲泡温度,冲泡绿茶
- redis各类型数据结构和底层实现源码分析