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

  1. 自动存储和发送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"
  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)}

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常用组件(全)的更多相关文章

  1. Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明

    线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...

  2. jmeter 常用组件详解

    1.测试计划(test plan) 描述一个性能测试,包含本次测试所有相关功能 2.threads(users)线程 Setup thread group: 一种特殊类型的线程,可用于执行预测试操作. ...

  3. jmeter常用组件简介

    本文主要介绍jmeter使用过程中最常用的一些组件及其作用.性能测试时线程组中可以添加如下的组件,如图所示: test plan:测试计划,是其它组件的容器 thread:线程组,用来设置多少线程,怎 ...

  4. jmeter常用组件

    测试计划(Test Plan) 是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 线程组(Thread Group) 代表一定数量的并发用户,它可以用来模拟并发用户发送请 ...

  5. 微信小程序入门与实战 常用组件API开发技巧项目实战*全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  6. Ionic 常用组件解析

    Ionic 常用组件解析 $ionicModal(弹出窗口): //创建一个窗口 //此处注意目录的起始位置为app $ionicModal.fromTemplateUrl('app/security ...

  7. JMeter主要组件介绍

    JMeter主要组件介绍   转自https://www.cnblogs.com/linbo3168/p/6023962.html 作者:linbo.yang 1.测试计划(Test Plan)是使用 ...

  8. 转 2 jmeter常用功能介绍-测试计划、线程组

    2 jmeter常用功能介绍-测试计划.线程组   1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...

  9. java基础 常用组件

    几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...

  10. Android常用组件

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

随机推荐

  1. java后端JVM面试资料

    目录 JDK,JRE,JVM三者的区别与联系 讲⼀讲JVM跨平台与跨语⾔ JVM的运⾏时数据区有哪些? 什么是堆内存?堆内存包含哪些部分? 什么是内存溢出 什么是内存泄漏?与内存溢出有什么关系? 对象 ...

  2. Kubernetes中pod UID的一个用法

    Kubernetes中每个工作Node的路径/var/lib/kubelet/pods里,含该Node上生成的每个pod的一些log文件.而该log文件的名字就是pod对应的UID,如下图所示(Nod ...

  3. Vue+element ui 笔记

    1)可以直接拿过来就用的样式 https://www.cnblogs.com/xiao987334176/p/14188413.html 2)对Table里面的每一项全部设定为选中 mounted() ...

  4. COM 对象的利用与挖掘4

    作者:Joey@天玄安全实验室 前言 本文在FireEye的研究Hunting COM Objects[1]的基础上,讲述COM对象在IE漏洞.shellcode和Office宏中的利用方式以及如何挖 ...

  5. Django中关于Manager的使用

    首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 manager 来实现. 比如我们在前面的笔记中介绍的 model 的 create().update ...

  6. Finder是什么?Mac下的Finder有什么用?

    Finder是什么?Mac OS X系统下的Finder即相当于Windows系统下的"我的电脑"资源管理器.通过Finder,您能查看Mac 上几乎全部内容,包括应⽤软件.硬盘. ...

  7. 「SOL」E-Lite (Ural Championship 2013)

    为什么这数据能水到可以枚举角度 ac 啊 # 题面 给你 \(n\) 个平面向量 \((x_i,y_i)\),对于每个 \(k=1\sim n\),求「从给出的 \(n\) 个向量中不重复地选择 \( ...

  8. 物联网5G工业网关的特点和应用场景

    BMG5100 系列产品,是一款工业级 5G 千兆物联网网关.集数据管理.智能采集.多种协议 转换.5G/4G 无线通信.数据处理转发.VPN 虚拟专网.本地存储.WIFI 覆盖等功能于一体. 产品特 ...

  9. Houdini_Python笔记

    目录 Gemetry 用Stash节点预览模型 判断文件是否存在 PDG Gemetry 用Stash节点预览模型 import hou stashParm = stashNode.parm(&quo ...

  10. stm32 微秒定延时问题

    problem: 如果想用计时器定时微秒级,不要使能自动重载:代码如下: static uint16_t counter; void Delay_us(uint32_t us){ counter=0x ...