jmeter学习记录--07--jmeter元件
通过jmeter元件可以模拟负载、参数化、设置关联、设置检查点、设置集合点、控制场景运行、监控测试结果等。
1、逻辑控制器:比如foreach控制器,查询到了订单并要对每个订单进行出库操作,以订单号作为循环条件。
2、配置元件:如ftp请求默认值,多个请求有共同配置时可以把相同点提取出来。
3、定时器:用来设置延迟与同步。如固定吞吐量定时器,尽量保持采样器产生的TPS在一个固定的范围内。
4、前置处理器:处理请求前的准备工作,如参数设置、环境变量设置。比如,jdbc请求前置处理。
5、后置处理器:服务器的响应数据在后续请求中用到,对这些数据做处理。
6、断言:对服务器的响应数据做验证。常用的响应断言、html断言、响应数据大小断言、比较断言、xml断言等。
7、监听器:监听与显示取样器测试结果。对监听器配置有基础功能,如有需要可根据需求定制。
8、函数助手:参数化方法之一,或对数据进行运算、字符编码格式转换、获取运行时参数等。
一、控制器
“仅一次控制器”不能嵌套其他种类的逻辑器,其他都可嵌套。
1.1 foreach控制器
查询到了订单并要对每个订单进行出库操作,以订单号作为循环条件。http1正则表过式输出inputVar作为foreach控制器的输入,输出值作为http2请求使用
1.2 循环(LOOP)控制器
输入执行次数或一直持续执行。
1.3 仅一次控制器
最简单的,无论在循环控制器下还是在线程组下,都是每个线程只执行一次,如登录。比如线程用户2个,执行次数10次,最终执行次数共2次。
1.4 简单控制器
只有名称与注释无其他项。它定义了一个执行单元,按顺序执行。比如基准测试时,1个线程按顺序执行100次,只需要在线程里配置就可以了。
1.5 runtime控制器
作用:用于控制该控制器下的取样器/控制器的运行时间。控制子元件的执行时长,Runtime(seconds)默认1秒,0=清空,不执行节点下元件
线程数 | 线程执行策略 | 控制设置秒数 | 结果执行情况秒 |
1 | 1次 | 5 | 5秒 |
1 | 3次 | 5 | 15秒 |
2 | 1次 | 5 | 5秒 |
2 | 3次 | 5 | 15秒 |
1 | 5秒 | 10 | 5秒 |
1 | 10秒 | 5 | 5秒 |
2 | 10秒 | 2 | 2秒 |
2 | 10秒 | 5 | 5秒 |
2 | 5秒 | 10 | 5秒 |
3 | 5秒 | 10 | 5秒 |
3 | 10秒 | 5 | 5秒 |
结论:1)如线程执行设置的是次数,那次数*控制器设置秒数=执行时长,与用户数无关。
2)如线程执行设置的是时长,哪个执行时间短显示的哪个时间,与用户数无关?
1.6 吞吐量控制器(想控制TPS需要使用constant throughput timer)
控制无件次数的,无控制吞吐量的功能。它有两种模式:总执行次数与百分比次数。
百分比次数:与per user勾选无关。按执行次数的百分比计算执行次数,取值0-100
总执行次数:per user与总执行次数同时影响执行次数。按值来执行,如果《=0,则不执行。
per user勾选上表示按虚拟用户数来计算次数,若不勾选,则按所有虚拟用户来计算执行次数。
线程数 | 循环次数 | 模式 | throughput | per user | 结果执行次数 |
3 | 10 | percent | 50 | Y | 15 |
3 | 10 | percent | 50 | N | 15 |
3 | 10 | total | 7 | Y | 21 每个用户执行7次 |
3 | 10 | total | 7 | N | 7 所有用户共执行7欠 |
3 | 3 | total | 7 | Y | 9 |
3 | 3 | total | 7 | N | 7 |
结论:第5次与第6次,线程组计划循环次数是4次。第5次,每个虚拟用户执行7次,共21次,最后取线程组次数9次。第6次,则是所有用户执行7次,最终执行了7欠。哪个执行次数少,最终结果按哪个执行?
1.7 事务控制器
可以把节点下的取样消耗时间累加,可对每一个取样器的执行时间进行统计。如果事务控制器下的取样器有多个,则所有事务成功才会成功。-类似LR的事务概念。
选项“是否生成一个父采样结果”:若控制器下有2个请求,则除了2个请求的取样结果,还有一个 transaction controller的取样结果。
第二个选项:不用选择。如果有定时器,会把定时器的时间也算在执行时间里。类似LR的事务里如果有思考时间,最后事务把思考时间也算上了。
线程组1个用户执行1次,事务控制默认值,结果:
勾选此项后测试:
1.8 IF控制器
通过某个条件来控制此节点下的元件是否运行。条件可以是js与变量表达式。
前置条件:定义了一个变量a设为7。
条件为:${a}==7 其他两项不勾选,则控制器请求的为真时执行请求。如果判断为==6,则不执行。
js变量表达式:${__jext3("${a}"=="7")},要勾选第一个选项否则会报错。或者使用${__javaScript(7==7)}
应用实例:(在一个线程组中设计脚本执行)
例1:如果想控制两个请求的发送频率,比如登录:注册按照3:2发送,通过此逻辑控制器也可以实现。
条件:${__counter(true,)}%2==1||${__counter(true,)}%3==0 (不勾选第一项)
__counter(true,)是获取当前迭代次数,%是取余,也就是除2余1与3整除时执行请求。实际使用的时候,简单控制器控制“登录”请求,if控制器控制“注册”请求。比如,线程组设置15次,登录执行15次,注册执行9次。这样比例是3:2。
例2:每3次迭代执行1次,条件:|${__counter(true,)}%3==0
Switch value:控制器具体赋值的value值字段
有两种赋值方式:
①.第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
②.第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素。
1.12 While Controller
作用:运行其子节点下的取样器/控制器,直到条件为“假”
条件(函数或变量):里面可填入判断依据的条件。使用方法:
可能的条件值有:
①.空白:最后一个示例循环失败时退出循环
②.最后一个值:最后一个示例循环失败时退出循环。 如果之前的最后一个示例只是循环失败,不进入循环。
③.否则:退出时(或不输入)循环条件等于字符串“ 假 ”
二、配置元件
2.1 CSV Data Set Config
可以从指定的文件中一行一行提取文本内容,根据分隔符拆解这一行内容并把内容与变量名对应上,这些变量就被参数化使用了。
参数说明:
Filename:文件名,指保存信息的文件目录,可以相对(%jmeter_home%\bin)或者绝对路径,或变量参数化路径${paraPWD}
File Encoding:文件编码,默认为ANSI。取文件参数时使用的字符集,常用utf-8,还有GB2312。如果参数文件里有中文,而使用utf-8,中文会显示乱码。与参数化文件保存的字符集相匹配。
Variable Names:参数名称(有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符使用下面的“Delimitet”中定义的
Delimitet:定义分隔符,用于分隔文件中的参数,及上述Variable Names中定义的参数名称
Allow Quoated data: True --设置文件中的参数值都必须用引用引起来,False则不需要。是,则可以允许拆分完成的参数里有分隔符。比如使用的csv文件默认使用逗号分隔列,某列参数中是json串包含有逗号,如果不选是则取的参数值可能会不全。
Stop Thread on EOF: 当Recycle on EOF为False并且Stop Thread on EOF为True,则读完csv文件中的记录后, 停止运行
Recycle on EOF:遇到文件结束符时,是否从头开始循环读入
注:程序从CSV Data Set Config文件中,每次读取一行,每次读取的参数仅供一个线程使用(类似LR里面的参数唯一值功能),如果线程数超过文本的记录行数,那么可以选择 True (从头再次读取)
Sharing Mode: 设置是否线程共享
2.2 jdbc连接设置
设置与数据库的连接配置信息。
jdbc:mysql://localhost:3306/mst
com.mysql.jdbc.Driver
2.3 计数器
执行过程中会记录执行次数。计数器记录的值是一个变量,可供其他元件调用。
2.4
三、定时器
优先级高于采样器。同一个作用域下有多个定时器时,每个都会执行。如果要想只对一个请求有效,那把它放在这个请求节点下。
3.1 高斯定时器
设置一个固定值与偏差值。模拟思考时间。
3.2 同步定时器
模拟多个用户并发,类似于LR的集合点。
3.3 constant throughput timer
固定吞吐量定时器。可使采样器的TPS在一个固定范围内。如果吞吐量大过固定值,则增加间隔时间;如果小于,则减少。具体间隔时间的设置,由tps与用户数来定的。
最后两项带有shared,是把计算是基于任意一个线程上次执行的时间,随机取的,结果不一定准确。
3.4 uniform random timer
可让线程暂停一个随机时间。如设定固定延迟时间为3秒,随机延迟时间1秒,则线程延迟在2秒-4秒之间。
3.5 beanshell timer
可通过beanshell来设定。
四、前置处理器
4.1 正式表达用户变量
用来引用上一次正则表达式取样器提取的响应数据。比如,请求1下的正则表达式提取器(后置处理器,变量1),请求2(这时只用设置参数,不需要设值,设由正则用户变量提供)使用该项,该项会设置“变量1”及其下标。-1表示全部遍历。
4.2 http url 重写修饰符
比如用户登录的sessid,后续多个请求使用时,就可以用它。
若sessid=abc,间隔符是=。第一项表示是用;间隔,第二项是不使用=间隔,第三项是表示是不使用?间隔。
五、后置处理器
用来关联响应的值,后续使用。
5.1 result status action handler
对每一个采样器设置运行时错误的逻辑。线程组里有整个取样器的错误后的处理逻辑。
5.2 正则表达式提取器
这个是常用的取关联值的操作。
5.3 json
取json类型数据关联时用
5.4 xpath
取xml类型数据关联时用
六、断言
响应断言,支持正则表达。最常用。
比较断言:调试时使用,用来比较两次取样结果,支持正则。常与比较断言visualizar结合使用。
xml assertion:检查的是响应数据是否是xml格式。看的是格式。不常用。
XPath 断言:对返回的xml格式信息进行判断。看的是值。
断言持续时间:允许的响应时间的最大值 。如果响应时间大于设定的最大值,则断言不通过,也可以通过监听器中的【断言结果】来查看详情。
断言文件大小:判断返回文件内容的大小。可以设置返回的结果文件是等于大于等于指定字节来判断是否通过。
七、监听器
查看结果情况的。都比较常用。
jmeter学习记录--07--jmeter元件的更多相关文章
- jmeter学习记录--10--二次开发环境搭建
JMeter源码集成到Eclipse.JMeter二次开发(1)-eclipse环境配置及源码编译 ,根据此文章记录将jmeter源码集成到myecplise 第一步:下载jmeter源码http:/ ...
- jmeter学习记录--03--jmeter负载与监听
jmeter场景主要通过线程组设置完成,有些复杂场景需要与逻辑控制器配合. 一.测试计划设计与执行 场景设计 jmete线程组实际是一个线程池,根据用户设置进行线程池的初始优化,在运行时做各种异常的处 ...
- JMeter学习笔记——认识JMeter(1)
拿到一个自动化测试工具,我们第一步就应该了解它能提供我们哪方面的功能(最直接的方法就是从官网获取),接下来就是简单的对这个工具进行“功能测试”了,当然这里的功能测试不是让你找它存在的bug,而是让自己 ...
- Jmeter学习一:Jmeter性能测试环境搭建(Windows下)
最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...
- Jmeter学习前提:Jmeter安装
一.Jmeter下载 1. 前提:已经安装 jdk8+ 1.1 JDK下载 a. 进入jdk8+下载地址:https://www.oracle.com/technetwork/java/javase/ ...
- jmeter学习记录--05--Beanshell2
学习beanshell时有不少的例子.遇到不少问题.在此记录下. 测试实例列表 A1:使用Beanshell请求作为测试请求 一个打包的Jar包,直接对其内的方法进行测试. 第一步:将接口jar包要放 ...
- JMeter学习(三)元件的作用域与执行顺序
1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...
- jmeter学习记录--09--命令行运行与生成报告
一. 使用命令行方式运行Jmeter 1.1 为什么 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死. 所以正确的打开方式是在GUI模式下调 ...
- jmeter学习记录--04--Beanshell
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanSh ...
随机推荐
- git合并两个不同的仓库
目前开发是2个仓库,线上仓库online_a(对应的branch分支为online),测试环境online_b(对应的branch分支为demo),测试环境需要时刻保持onine_a上的最新稳定稳定代 ...
- .class文件查看
十六进制查看(不仅class文件可以看,其他文件格式也可以) hexdump -C XXX.class #注意C是大写(小写c则输出十进制) 反汇编查看 javap -c XXX.class java ...
- Java开发笔记(二十八)布尔包装类型
前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...
- 2018.12/17 function 的闭包
1.闭包:函数在调用的时候会形成一个私有的作用域,对内部变量起到保护的作用,这就是闭包. 2.变量销毁: 1.人为销毁 var a=12; a=null 2.自然销毁 函数调用完成之后 浏览器会自 ...
- java多线程中的三种特性
java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...
- Error: No PostCSS Config found in... 报错 踩坑记
项目在本地运行不报错,上传到 GitHub 之后,再 clone 到本地,执行: npm install 安装完成之后再执行: npm run dev 这时报错 Error: No PostCSS C ...
- console对象探究
作为一个前端,console.log()可能是你最常用的方法,打印打印再打印,但是其实console对象上有用的方法有很多,来,各位看官上眼 分类输出 厌倦了 console.log 单调的输出?欢迎 ...
- SAP MM 无价值物料管理的一种实现思路
SAP MM 无价值物料管理的一种实现思路 笔者所在的项目,客户工厂处于先期试生产阶段,尚未开始大规模的商业化生产,但是这并不影响客户集团总部的SAP项目实施.笔者于7月初加入该工厂的第2期SAP项目 ...
- SuperMap iClient 如何使用 WMTS 地图服务(转载)
原文链接: WMTS服务初步理解与读取 https://blog.csdn.net/supermapsupport/article/details/76806670 SuperMap iClient ...
- 作为开发人员,这四类Code Review方法你都知道吗?
本文翻译自:https://dzone.com/articles/4-types-of-code-reviews-any-professional-developer 转载请注明出处:葡萄城官网,葡萄 ...