微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JMeter常用组件全

JMeter执行顺序:
配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;
同一层级的,顺序执行;

一、线程组

场景设置,模拟并发用户发送请求,设置并发策略。详见: https://www.cnblogs.com/chenwt/p/15016495.html

二、取样器

  控制JMeter向服务器发起什么样的请求

1.HTTP请求

image


  【自动重定向】只记录最后跳转请求,会丢失初始请求的cookie等信息;
  【跟随重定向】记录整个请求过程所有信息,过程请求为sub-sampler,子请求

image

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第二个

【缺省值】正则匹配失败时,取的值,可不填

image


正则表达式提取字符是否正确,可以通过添加“调试取样器”来检查。
调用:${actionId}

2.JSON提取

JSON提取器使用json path表达式匹配,可以一次取多个变量值。

$ 表示响应的根节点{;
. 指根节点下子元素,即子节点;
.. 指所有符合条件的节点;
* 表示所有节点;
[] 取数组里的对象用;
数组索引从0开始

image


查找全部feeGroupName:$..feeGroupName 或 $..result[*]feeGroupName ,得到4个值

image


查找第一个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”的变量中

image

image


调用
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变量(可写入正则提取的响应值)
【模式匹配规则】
  包括--响应结果中包含指定的内容支持正则表达式;
  匹配--响应结果完全匹配指定内容,不区分大小写,支持正则表达式;
  相等--响应结果与指定内容完全相等,区分大小写,不支持正则表达式;
  字符串--响应结果包含指定的字符串,不支持正则表达式。

2.JSON断言

针对响应结果是 applicaton/json 格式的请求进行断言。

image


【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 的响应时间里,但是会计入事务控制器的时间。

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控制器下的请求每次将读取不同的数据。

image

搭配提取器,用于遍历返回值。提取器匹配数字-1,取全部值。

image

4.事务控制器

【Generate parent sample】
不勾选:控制器下的请求是分开的,且事务控制器结果为空;
勾选:会把事务控制器下的所有请求当作一个事务,当其中一个接口报错,则事务也报错;
【Include duration of ..】一般不勾选,事务控制器生成的样本时间 认不包括计时器,预处理和后置处理器的时间;

image

image


一个事务包含多个接口,有些接口又依赖前者接口的结果,因而就需要将这些接口统一放在一个事务控制器下进行性能测试,得到的性能测试结果才会更加接近真实的场景。

5.临界部分控制器

临界部分控制器使其下请求只由一个线程执行,确保其下请求执行的有序性,避免请求顺序错乱。

6.Include控制器、模块控制器

用来控制测试片段。

七、监听器

1.察看结果树

用于调试,性能测试时需要禁用,因为它打印了大量的东西,会消耗大量I/O、连带消耗cpu
绿色代表响应码是2xx 或3xx,红色说明响应码是4xx 或5xx 。
所以要想确定请求返回的是正确的,必须要加上断言,只有断言成功才会显示绿色。

2.聚合报告

【Label】取样器名称
【样本】发出的请求数量。线程数20,循环10,样本数就是2000;
【平均值】平均响应时间,单位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.保存测试结果

设置保存路径及文件

image


保存为.csv格式打开若出现乱码:先用记事本打开,另存为--选择编码方式为ANSI,再用Excel打开。

八、配置元件

常用配置元件如下:

CSV Data Set Config:常用于参数化;参考:https://www.cnblogs.com/chenwt/p/15035345.html
HTTP Cookie Manager

  1. 自动存储和发送Cookie,如果一个http请求的响应中包含Cookie,那么Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。每个线程都有自己的"cookie存储区"。这种cookies不会在cookie管理器中展示出来,但可以在“查看结果树”中看到它们;
  2. 手动添加到Cookie管理器的Cookie,会被所有线程共享。手动添加时, 域、路径必须填上。因为Jmeter现版本不支持跨域的请求,不填的话设置的Cookie不会被带上。
  3. 接收到的Cookies可以存储为JMeter的线程变量。如果要把 cookies保存为变量,需要设置:
    “ CookieManager.save.cookies =true”。 
    这样在同一个线程(组)内其它操作组件就可以直接通过 ${COOKIE_Cookie名} 对cookie进行调用。而不用通过提取提取的方式进行调用
  4. 想要跨域存储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)}

image

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

计数器函数,每次迭代加一,对应配置元件的计数器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐