JMeter常用组件(全)
JMeter执行顺序:
配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;
同一层级的,顺序执行;
一、线程组
场景设置,模拟并发用户发送请求,设置并发策略。详见: https://www.cnblogs.com/chenwt/p/15016495.html
二、取样器
控制JMeter向服务器发起什么样的请求
1.HTTP请求
【基本】
自动重定向: 只记录最后跳转请求,会丢失初始请求的cookie等信息;
跟随重定向: 记录整个请求过程所有信息,过程请求为sub-sampler,子请求
【高级】
客户端实现:java、HttpClient4(默认)。当请求是keep-alive时,都可以实现连接复用(jmeter5.4版本)。
连接:连接超时时间。
响应:响应超时时间。
从HTML文件获取所有内含的资源:当该选项被选中时,jmeter在发出HTTP请求 并获得响应的HTML文件内容后,还对该HTML进行解析 并获取HTML中包含的 所有资源(图片、flash等)
并行下载:设置是否使用自设资源池,勾选后可设置大小
数量:资源池大小,默认为6
网址必须匹配:URL匹配过滤,填写此项则只会下载与此内容项匹配的url的资源
源地址:只用于http协议且Implementation为HttpClient4的情况,此属性用于启 用IP欺骗。会重写了这个http请求使用的默认本地IP地址。用于Jmeter主机具有 多个IP地址(即IP别名、网络接口、设备)的情况。该值可以是主机名、IP地址 或网络接口设备,如“ey0”或“l0”或“wlan0”。
代理服务器:代理服务器的相关配置信息
保存响应为MD5哈希:选中该项,在执行时仅记录服务端响应数据的MD5值, 而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以 减少取样器记录响应数据的开销
2.Debug Sampler 调试取样器
在reponse data 中展示自定义变量,用于调试,一般直接使用默认设置
3.JDBC Request
向数据库发送请求,以获得所需数据。需要与JDBC Connection Configuration 一起使用;
使用参考 https://www.cnblogs.com/chenwt/p/15030426.html
4.其他
如果是其它协议,比如java、dubbo、websocket、smtp、tcp、jdbc,添加对应的取样器等即可,如果没有,那么就需要我们自己开发,所以,java基础是必备的。(一般都有开发好的开源jar下载放到..\lib\ext下即可)。
三、提取器
关联中使用:jmeter前面一些脚本运行后返回的值,使用提取器取出,用在后面脚本中。
1.正则表达式提取器
【Apply to】应用范围,通常是Main sample only
【引用名称】自己定义的变量名称,后续请求将要引用到的变量名,如填写的是:actionId,后面的引用方式是${actionId}
【正则表达式】
():括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来;
. :匹配除了换行符以外的任何字符;
+ :重复一次或更多次
* :重复零次或多次
? :在找到第一个匹配项后停止
(.*?)一般可以匹配任意字符
正则表达式中也可以使用其他自定义变量,使用${}方式调用
【模板】用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来的),则可以是$2$,$3$等等,表示解析到的第几个值给actionId。例如:$1$表示匹配到的第一个值
【匹配数字】结果有多个值,0代表随机取值,-1表示全部,1第一个,2第二个
【缺省值】正则匹配失败时,取的值,可不填
正则表达式提取字符是否正确,可以通过添加“调试取样器”来检查。
调用:${actionId}
2.JSON提取器
JSON提取器使用json path表达式匹配,可以一次取多个变量值。
$ 表示响应的根节点{;
. 指根节点下子元素,即子节点;
.. 指所有符合条件的节点;
* 表示所有节点;
[] 取数组里的对象用;
数组索引从0开始
查找全部feeGroupName:$..feeGroupName 或 $..result[*]feeGroupName ,得到4个值
查找第一个feeGroupName的值:$..result[0].feeGroupName
【Apply to】应用范围
【Names of created variables】接收值的变量名,自定义,多个变量用分号;分隔;
【JSON Path expression】json path表达式,也是用分号分隔;
【Match No.(0 for Random)】0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1
【Default Values】缺省值,匹配不到值的时候取该值,可写error。
【Compute concatenation var(suffix_ALL)】如果找到许多结果,则插件将使用' , '逗号将它们连接起来,并将其存储在名为“变量名_ALL”的变量中
调用:
json path匹配唯一值:${variable};
json path匹配多个值,json提取器match no填1指定取第1个值:${variable};
json path匹配多个值,json提取器match no填-1即取全部:${variable_1}调用第一个值,${variable_2}调用第二个值。
四、断言
1.响应断言
针对响应的不同部分进行断言,响应头、响应文本…
【Main sample only】只作用于父节点取样器(一般的断言都选这个)
【JMeter Variable】只作用于jmeter变量(可写入正则提取的响应值)
【测试字段】jmeter默认将4和5开头的状态码报错,如:404,500等;而测试期间可能有反向用例需要校验让其不报错,此时需要将此类报错忽略同时做断言处理,即添加断言时选择“忽略状态”;
【模式匹配规则】
包括--响应结果中包含指定的内容,支持正则表达式;
匹配--响应结果完全匹配指定内容,不区分大小写,支持正则表达式;
相等--响应结果与指定内容完全相等,区分大小写,不支持正则表达式;
字符串--响应结果包含指定的字符串,不支持正则表达式。
2.JSON断言
针对响应结果是 applicaton/json 格式的请求进行断言。
【Assert JSON Path exists】断言的json path,必填
【Additionally assert value】必须勾选才能填写预期结果
【Match as regular expression】勾选后结果栏可以支持正则表达式
3.断言持续时间
约定响应时间,响应时间如果超出约定,则断言为失败。
持续时间= load time(加载时间) = Sample Time(取样时间) = 响应时间:
从发送请求到收到最后的响应所花费的时间。不包括渲染请求所花费的时间,同时也不包括处理客户端脚本所花费的时间。
Latency延迟时间 <= 响应时间;从发送请求到收到第一个响应,所花费的时间。请求错误的情况下,延迟时间为0!
connect time(连接时间): 建立连接所花费的时间,包括SSL三次握手的时间。
举例:添加断言持续时间,设置持续时间60s,添加监听器--断言结果,得到
load time :66
connect time:46
latency:66
断言失败
五、定时器
· 定时器是在每个sampler之前执行的,无论定时器位置在sampler之前还是下面;
· 在执行一个sampler之前,所有当前作用域内的定时器都会被执行;
· 如果需要定时器只对其中一个sampler生效,则需要将定时器作为sampler子节点加入;
1.固定定时器Constant Timer
线程的标准等待时间,性能测试中相当于用户行为中的思考时间;固定定时器的延时不会计入当前sampler 的响应时间里,因为响应时间是指请求发送到请求返回的时间
思考时间的作用:
控制请求发送的频率,以达到影响服务器压力,最终影响tps或响应时间的结果。
思考时间越长,rps越小,服务器压力减小,响应时间变快,rt值越小。
tps未达到最大时,思考时间越长,tps越小。tps达到最大,思考时间长短对tps影响不大,只影响响应时间。
2.同步定时器Synchronizing Timer
设置一个集合点,阻塞线程直到指定的线程数量到达后再一起释放,可以瞬间产生很大的压力。
【模拟用户组的数量】指定同时释放的线程数数量;
【超时时间以毫秒为单位】超时多少毫秒后同时释放指定的线程数。为0:若线程数一直达不到,就会一直等待。大于0:若线程数一直达不到,但到了超时时间,会释放已到达的线程。
3.固定吞吐量定时器Constant Throughput Timer
限制TPS,约定事物每分钟的执行数;
4.RPS定时器 jp@gc - Throughput Shaping Timer
限制RPS,End RPS对应RPS上限,需要预设足够的线程数,不然无法达到RPS目标。
六、控制器
1.循环控制器
该控制器下的请求执行次数 = 线程数 * 线程循环数 * 循环控制器循环次数。
如:线程数2,线程循环5,循环控制器循环3,循环控制器下请求将执行30次。
2.仅一次控制器
仅一次控制器下的请求,只在其父线程组/控制器的第一次迭代时执行。
如:
(1)线程数2,线程循环5次,仅一次控制器下请求将执行2次。
(2)仅一次控制器置于循环控制器下:线程数2,线程循环5次,循环控制器循环3次,仅一次控制器下请求将执行10次。
3.ForEach控制器
搭配用户自定义变量使用,ForEach控制器下的请求每次将读取不同的数据。
搭配提取器,用于遍历返回值。提取器匹配数字-1,取全部值。
4.事务控制器
【Generate parent sample】
不勾选:控制器下的请求是分开的,且事务控制器结果为空;
勾选:会把事务控制器下的所有请求当作一个事务,当其中一个接口报错,则事务也报错;
【Include duration of ..】一般不勾选,事务控制器生成的样本时间 默认不包括计时器,预处理和后置处理器的时间;
一个事务包含多个接口,有些接口又依赖前者接口的结果,因而就需要将这些接口统一放在一个事务控制器下进行性能测试,得到的性能测试结果才会更加接近真实的场景。
5.临界部分控制器
临界部分控制器使其下请求只由一个线程执行,确保其下请求执行的有序性,避免请求顺序错乱。
6.Include控制器、模块控制器
用来控制测试片段。
7.吞吐量控制器
不控制吞吐量。根据对线程组的设置,在总请求上按百分比(或总数)计算执行多少请求。
七、监听器
1.察看结果树
用于调试,性能测试时需要禁用,因为它打印了大量的东西,会消耗大量I/O、连带消耗cpu。
绿色代表响应码是2xx 或3xx,红色说明响应码是4xx 或5xx 。
所以要想确定请求返回的是正确的,必须要加上断言,只有断言成功才会显示绿色。
2.聚合报告
【Label】取样器名称;
【样本】发出的请求数量。线程数20,循环10,样本数就是200;
【平均值】平均响应时间,单位ms毫秒,1s=1000ms;
【90%百分位】90%样本的响应时间;
【最小值】最小响应时间;
【异常】出错请求所占百分比;
【吞吐量】tps每秒事务数;
【接收】每秒从服务器接收到的数据量;
3.用表格查看结果
可以看到每个线程的启动时间,响应时间、状态等。
4.Transactions per Sencond
监听TPS,用来分析吞吐量。
5.Hits per Second
监听单位时间点击率,即触发的请求数。
6.Response Times Over Time
监听响应时间。
7.Active Threads Over Time
监听单位时间内活动的线程数。
8.Composite Graph
可将其他监听结果组合在一张图中查看。
9.保存测试结果
设置保存路径及文件名
保存为.csv格式打开若出现乱码:先用记事本打开,另存为--选择编码方式为ANSI,再用Excel打开。
保存为.jtl格式,查看时添加对应的监听器,在文件名位置填入要查看的.jtl文件名即可。
保存图形结果:鼠标放图片右键保存。
八、配置元件
常用配置元件如下:
CSV Data Set Config:常用于参数化;参考:https://www.cnblogs.com/chenwt/p/15035345.html
HTTP Cookie Manager:
- 自动存储和发送Cookie,如果一个http请求的响应中包含Cookie,那么Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。每个线程都有自己的"cookie存储区",一个线程中所有请求及该线程的循环都使用同一个cookie值。这种cookies不会在cookie管理器中展示出来,但可以在“查看结果树”中看到它们;如果不想在迭代中使用同一个cookie,可以这样设置:
(1)在线程组中,取消勾选“same user on each iteration”;
(2)在HTTP Cookie Manager中,勾选"Use Thread Group configuration to control cookie clearing" - 手动添加到Cookie管理器的Cookie,会被所有线程共享。手动添加时, 域、路径必须填上。因为Jmeter现版本默认不支持跨域的请求,不填的话设置的Cookie不会被带上。
- 接收到的Cookies可以存储为JMeter的线程变量。如果要把 cookies保存为变量,需要设置:
“ CookieManager.save.cookies =true”。
这样在同一个线程(组)内其它操作组件就可以直接通过 ${COOKIE_Cookie名} 对cookie值进行调用。而不用通过提取器提取的方式进行调用。 - 想要跨域存储cookies,需要设置 CookieManager.check.cookies =false
参考: https://www.cnblogs.com/poloyy/p/13529201.html
HTTP信息头管理器:定制Sampler发出的HTTP请求的请求头内容;
HTTP 请求默认值:默认http请求的值,如server、ip、port、Protocol、path、parameters等;
JDBC Connection Configuration:搭配JDBC请求使用,详见: https://www.cnblogs.com/chenwt/p/15030426.html ;
用户定义的变量:通过自定义变量名引用
计数器
九、常用函数
1. __time
1.返回当前时间,包含多种格式:
${__time(yyyy-MM-dd HH:mm:ss,)}
2.如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。
YMD=yyyyMMdd : ${__time(YMD)}
HMS=HHmmss : ${__time(HMS)}
4. __setProperty、 __P
__setProperty设置属性,属性是 Jmeter 的全局属性,因此可用于在线程和线程组之间进行通信。
__P读取属性,与__setProperty搭配使用实现跨进程传递参数。参考: https://www.cnblogs.com/chenwt/p/15031084.html
3. __V
嵌套函数,实现字符串拼接。如:${__V( A ${N} ) } :N=1, __V 函数会返回 A1。
实例:https://www.cnblogs.com/chenwt/p/15039818.html
4.__counter
计数器函数,每次迭代加一,对应配置元件的计数器。
JMeter常用组件(全)的更多相关文章
- Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明
线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...
- jmeter 常用组件详解
1.测试计划(test plan) 描述一个性能测试,包含本次测试所有相关功能 2.threads(users)线程 Setup thread group: 一种特殊类型的线程,可用于执行预测试操作. ...
- jmeter常用组件简介
本文主要介绍jmeter使用过程中最常用的一些组件及其作用.性能测试时线程组中可以添加如下的组件,如图所示: test plan:测试计划,是其它组件的容器 thread:线程组,用来设置多少线程,怎 ...
- jmeter常用组件
测试计划(Test Plan) 是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 线程组(Thread Group) 代表一定数量的并发用户,它可以用来模拟并发用户发送请 ...
- 微信小程序入门与实战 常用组件API开发技巧项目实战*全
第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...
- Ionic 常用组件解析
Ionic 常用组件解析 $ionicModal(弹出窗口): //创建一个窗口 //此处注意目录的起始位置为app $ionicModal.fromTemplateUrl('app/security ...
- JMeter主要组件介绍
JMeter主要组件介绍 转自https://www.cnblogs.com/linbo3168/p/6023962.html 作者:linbo.yang 1.测试计划(Test Plan)是使用 ...
- 转 2 jmeter常用功能介绍-测试计划、线程组
2 jmeter常用功能介绍-测试计划.线程组 1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...
- java基础 常用组件
几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...
- Android常用组件
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
随机推荐
- java后端JVM面试资料
目录 JDK,JRE,JVM三者的区别与联系 讲⼀讲JVM跨平台与跨语⾔ JVM的运⾏时数据区有哪些? 什么是堆内存?堆内存包含哪些部分? 什么是内存溢出 什么是内存泄漏?与内存溢出有什么关系? 对象 ...
- Kubernetes中pod UID的一个用法
Kubernetes中每个工作Node的路径/var/lib/kubelet/pods里,含该Node上生成的每个pod的一些log文件.而该log文件的名字就是pod对应的UID,如下图所示(Nod ...
- Vue+element ui 笔记
1)可以直接拿过来就用的样式 https://www.cnblogs.com/xiao987334176/p/14188413.html 2)对Table里面的每一项全部设定为选中 mounted() ...
- COM 对象的利用与挖掘4
作者:Joey@天玄安全实验室 前言 本文在FireEye的研究Hunting COM Objects[1]的基础上,讲述COM对象在IE漏洞.shellcode和Office宏中的利用方式以及如何挖 ...
- Django中关于Manager的使用
首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 manager 来实现. 比如我们在前面的笔记中介绍的 model 的 create().update ...
- Finder是什么?Mac下的Finder有什么用?
Finder是什么?Mac OS X系统下的Finder即相当于Windows系统下的"我的电脑"资源管理器.通过Finder,您能查看Mac 上几乎全部内容,包括应⽤软件.硬盘. ...
- 「SOL」E-Lite (Ural Championship 2013)
为什么这数据能水到可以枚举角度 ac 啊 # 题面 给你 \(n\) 个平面向量 \((x_i,y_i)\),对于每个 \(k=1\sim n\),求「从给出的 \(n\) 个向量中不重复地选择 \( ...
- 物联网5G工业网关的特点和应用场景
BMG5100 系列产品,是一款工业级 5G 千兆物联网网关.集数据管理.智能采集.多种协议 转换.5G/4G 无线通信.数据处理转发.VPN 虚拟专网.本地存储.WIFI 覆盖等功能于一体. 产品特 ...
- Houdini_Python笔记
目录 Gemetry 用Stash节点预览模型 判断文件是否存在 PDG Gemetry 用Stash节点预览模型 import hou stashParm = stashNode.parm(&quo ...
- stm32 微秒定延时问题
problem: 如果想用计时器定时微秒级,不要使能自动重载:代码如下: static uint16_t counter; void Delay_us(uint32_t us){ counter=0x ...