一、安装Jmeter工具

链接:https://pan.baidu.com/s/1ZYc15eq9DO-r0ChKHxMXlg?pwd=ckcd
提取码:ckcd
--来自百度网盘超级会员V5的分享

二、Jmeter的常用元器件说明

jmeter八大元件件:取样器,前置处理器,后置处理器,断言,监听器,配置元件,逻辑控制器,定时器

1、取样器:指用来发请求的,包括http请求,JDBC请求,Websocket请求, RPC请求,部分协议可能需要自己做二次开发如mongodb压测,mq压测

2、前置处理器:指在每个请求发送之前开始执行的,一般是在取样器开始之前执行

3、后置处理器,一般是取样器执行完毕才执行,主要是处理请求后的响应,比如关联,需要把接口返回的数据存在后置处理器中

4、配置元件:元件会影响其作用范围内的所有元件,元件对其作用范围内的每一个sampler有效,主要包括http信息头管理器,cookie管理器等

5、断言:主要指响应断言,json断言等,元件对其作用范围内的每一个sampler元件执行后的结果校验,可以添加多个断言

6、 监听器:元件收集其作用范围的每一个取样器的信息并呈现

7、逻辑控制器:元件只对其子节点的取样器有效

8、定时器:元件对其作用范围内的每一个取样器有效

关于元器件的执行顺序:
  在同一作用域名范围内,测试计划中的元件按照如下顺序执行。
  (1)配置元件(config elements )
  (2)前置处理程序(Per-processors)
  (3)定时器(timers )
  (4)取样器(Sampler)
  (5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。
  (6)断言(Assertions)(除非Sampler 得到的返回结果为空)。
  (7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。

 
关于执行顺序,有两点需要注意,避免踩坑:
  * 前置处理器、后置处理器和断言等元件只能对取样器作用,如果在它们的作用域内没有任何取样器,则不会被执行
  * 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行

三、接口设计,断言设计

1、接口设计,测试字段(Field to test):表示在何种内容中匹配预期字段,一般选择响应文本。
① 响应文本:接口的Response的全部数据
② 响应代码:取样器结果中的Response code,常见的有200(成功)、302(重定向)、404(不存在)、400(参数错误)、500(服务器错误)等。但当我们要验证404,501等http响应代码时,需要勾选 ignore status,因为当http响应代码为404、500时,JMeter会默认这个请求是失败的。
③ 响应信息:取样器结果中的Response message
④ 响应头:响应数据的Response headers
⑤ 请求头:请求的Request headers
⑥ URL样本:有跟随重定向时,URL样本包含了请求的URL和重定向的URL,否则只包含请求URL。

额外知识点:

模式匹配规则(Pattern Matching Rules):即响应数据与预期值的对比方式。
① 包括(Contains):响应数据包含预期值(相当于String的contains方法),则判定接口成功。支持正则匹配。
② 匹配(Matches): 用正则表达式匹配返回结果,且必须能匹配整个返回值,而不是返回值的一部分。
③ 相等(Equals):响应数据与预期值完全相同才判定接口成功。不支持正则表达式。
④ 字符串(Substring):与【包括】类似,但不支持正则匹配。
⑤ 否(Not):取反,也就是前面【包括】等判定结果为true,断言结果为false。反之,前面判定为false,断言结果为true。
⑥ 或者(Or):勾选此项后,可以设置多个预期值,只要有一项判定成功,则断言判定成功。

⑦ 测试模式(Patterns to test):预期值表达式,可以是正则表达式,也可以是字符串。可以通过【添加】按钮添加一个或多个,有多个的话,不勾选【模式匹配规则】中的【或者】,则为并集模式,即全部匹配成功才断言成功。
⑧ 自定义失败消息(Custom failure message):当判断返回值为错误的时候,自定义的失败消息会在断言结果中显示。

实战例子:

① 请求百度

② 响应数据

③ 在【百度一下】请求下添加响应断言:

④ 执行请求,查看结果树:

结果被标红,接口判定为失败。可见,你预设的断言决定了接口是否被判定成功。把上面断言中的“百度两下”改为“百度一下”,再次执行,则接口判定为成功。

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

⑥ 在取样器下右键–>添加–>断言–>JSON断言,就创建了一个JSON断言,界面如下:

下面进行一个实例演练

首先,创建一个Beanshell取样器模拟接口,返回JSON数据。

return "{\"code\":0,\"message\":\"操作成功\",\"data\":{\"student\":[{\"name\":\"zhangxu\",\"age\":18},{\"name\":\"zhoushuang\",\"age\":18},{\"name\":\"changhua\",\"age\":17}]}}";

在该取样器下添加JSON断言

这里解释一下【JSON Path expression】的写法,首先$.这部分是固定写法,后面根据层级关系去逐级获取数据。1、$.data表示在JSON串以"data"为key获取value,也就是{“student”:[{“name”:“zhangxu”,“age”:18},{“name”:“zhoushuang”,“age”:18},{“name”:“changhua”,“age”:17}]}。
2、$.data.student对应的是[{“name”:“zhangxu”,“age”:18},{“name”:“zhoushuang”,“age”:18},{“name”:“changhua”,“age”:17}],因此要通过索引定位到数组中的具体对象,也就是$.data.student[0]获取到了{“name”:“zhangxu”,“age”:18}
3、$.data.student[0].name就定位到了“zhangxu”这个值。

运行脚本,察看结果树显示接口成功。

如果我们把Expected value改为"zhangxuhahha",再次运行,发现接口被判定失败:

BeanShell断言

这种断言是应对复杂校验的利器,为什么这么说呢?因为BeanShell断言可以写较复杂的逻辑判断来对结果进行校验。

还以上边接口中的模拟接口为例,创建一个Beanshell断言:

运行脚本,察看结果树:

上边只是一个非常简单的示例

大小断言 & 断言持续时间

大小断言:判断响应结果选定部分的字节大小是否与预期的值相符。


断言持续时间:判断接口的响应时间是否小于等于设定值。


四、数据依赖,关联处理

举例说明:系统的其他功能需要登录接口返回的token或者sessionid(后面的接口需要用到前面接口返回的信息)
  1. json格式信息提取
    ①将返回的数据使用json path tester转化为json格式,使用JSON Path Expression,提取返回json数据的表达式有绝对路径和相对路径之分:

绝对路径: . 变 量 名 相 对 路 径 : .变量名 相对路径: .变量名相对路径:…变量名

如果是嵌套的数据,使用.一级级往里面取就行了,例如:{“key1”:{“key2”:{“key3”:“xxxxx”}}},提取式:$.key1.key2.key3,如果是这种格式的{“data”:[{“key1”:“value1”,“key2”:“value1”},
{“key3”:“value1”,“key4”:“value1”}
]}

提取表达式需要根据下标取提取:$data[下标值].key

上面的数据格式如果使用绝对路径提取表达式写为: . d a t a [ 1 ] . k e y 3 相 对 路 径 的 提 取 表 达 式 写 为 : .data[1].key3 相对路径的提取表达式写为: .data[1].key3相对路径的提取表达式写为:…key3


②将数据提取出来后,在需要依赖上个接口数据的接口请求中,添加–后置处理器–JSON取样器

③提取单个值:在需要提取返回数据的接口下添加json提取器(例如充值接口需要提取登录接口中需要的数据,那么就需要在登录接口中添加json提取器,自己第一次将json提取器添加到充值接口中,导致提取不到数据,实际就是json 提取器添加错了)

将json提取器添加到登录接口,就可以提取登录后的token值了(注意:要提取哪个接口的返回的数据,就添加在哪个接口下)

json表达式相对路径和绝对路径,第一种方式 . d a t a . t o k e n i n f o . t o k e n ; 第 二 种 .data.token_info.token ;第二种 .data.tokeni​nfo.token;第二种…token

将登录接口中提取的token值,将表达式放在充值接口中,下次充值接口发送请求就会携带token信息

充值接口发送请求后会携带token信息,请求成功

④提取多个值:提取表达式之间使用;间隔开,一定要设置默认的值,不然会导致数据提取不出来,如果取不到值那么就会返回设置的默认值。


2.正则表达式提取器
经常有接口可能返回这种类型数据,我们需要提取data中的某个key的值,因为data对应的值是字符串格式的,那么这时候就只能使用正则表达式提取器提取其中的信息。


例如要提取返回相应数据中的code的值

在正则表达式提取器中,设置引用名称,填写正则表达式,模板: 1 1 1代表去第一个括号的值



提取多个值

提取成功,但是提取的两个值进行拼接后赋值给了recode,如果要将两个值单独拿出来使用,使用:变量名_g1,变量名_g2方式获取值,使用recode_g1和recode_g2,这两个数据是将recode的数据进行拆分所以可以单独使用

五、常用插件应用

以下插件都需要自己百度下载安装成功后才会在Jmeter展示

1、jmeter-plugins.org

启动jemter,点击选项,最下面的一栏,如下图所示:

打开后界面如下:

Installed Plugins(已安装的插件):即插件jar包中已经包含的插件,可以通过选中勾选框,来使用这些插件;

Available Plugins(可下载的插件):即该插件扩展的一些插件,可以通过选中勾选框,来下载你所需要的插件;

Upgrades(可更新的插件):即可以更新到最新版本的一些插件,一般显示为加粗斜体,可以通过点击截图右下角的Apply Changes and Restart Jmeter按钮来下载更新;

PS:一般不建议进行更新操作,因为最新的插件都有一些兼容问题,而且很可能导致jmeter无法使用(经常报加载类异常)!!!

2、Transactions per Second

即TPS:每秒事务数,性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现————比如整体趋势、实时平均值走向、稳定性等。

jmeter本身的安装包中,监视器虽然提供了比如聚合报告这种元件,也能提供一些实时的数据,但相比于要求更高的性能测试需求,就稍显乏力。

通过上面的下载地址下载安装好插件后,重启jmeter,从监视器中就可以看到该插件,如下图所示

某次压力测试TPS变化展示图:

3、Response Times Over Time

即TRT:事务响应时间,性能测试中,最重要的两个指标的另外一个。该插件的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

使用方法如上,下载安装配置好插件之后,重启jmeter,添加该监视器,即可实时看到实时的TRT数值及整体表现。

某次压力测试TRT变化展示图:

4、PerfMon Metrics Collector

即服务器性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控服务器的资源使用情况,比如CPU、memory、I/O等。该插件可以在性能测试中实时监控服务器的各项资源使用。

将ServerAgent-2.2.1.jar上传到被测服务器,解压,进入目录,Windows环境,双击ServerAgent.bat启动;
linux环境执ServerAgent.sh启动,默认使用4444端口。

如出现如下图所示情况,即表明服务端配置成功:

①、服务端启动校验
CMD进入命令框,观察是否有接收到消息,如果有,即表明ServerAgent成功启动。
②、客户端监听测试
给测试脚本中添加jp@gc - PerfMon Metrics Collector监听器,然后添加需要监控的服务器资源选项,启动脚本,即可在该监听器界面看到资源使用的曲线变化。如下图所示:

在脚本启动后,即可从界面看到服务器资源使用的曲线变化,Chart表示主界面显示,Rows表示小界面以及不同资源曲线所代表的颜色,Settings表示设置,可选择自己需要的配置。

PS:注意测试脚本需要持续运行一段时间,才可以看到具体的曲线变化,否则ServerAgent端会断开连接!

六、常用的逻辑控制器(事务控制器,循环控制器)

1、事务控制器
1.1 打开方式:
鼠标右键)线程组—>(鼠标悬停)添加—>(鼠标悬停)逻辑控制器—>(左键点击)事务控制器。 如下图所示:

1.2 参数详解
我们在控制器里面会看到2个勾选框,我们来一起看下这个框有什么作用,如下图所示:

Generate parent sample :

   不勾选:当不勾选的时候,这里就是会和平常执行http请求没啥2样,在我们通过聚合报告查看结果的时候,有多少个http请求上面就有多少个结果,互补干预勾选:将逻辑处理器下面的http请求当成一个整体来统计,我们在聚合报告或其他的一些监控功能的时候,看到的就只有一条数据,哪怕你在处理器下添加了100条http请求,在统计的时候也是算一条lnclude duration of timer and pre-post processors in generates sample:不勾选:啥事没有勾选:问题就来了,当勾选后,我们执行的时候,可能会加一些计时器啊等一些占用时间的插件,但是,这个时间是属于接口的执行时间吗,当然不是,但是,当你勾选后,jmeter就会把这个时间统计成接口执行的时间了,所以,这里如果没有特殊需求的话,还是别选好。

2、循环控制器
2.1打开方式
鼠标右键)线程组—>(鼠标悬停)添加—>(鼠标悬停)逻辑控制器—>(左键点击)循环控制器。 如下图所示:

2.2 参数详解
里面就2个参数,勾选永远的话,控制器下面的请求一直都在执行,如果不勾选永远,选择输入数字,那控制器下的请求就根据你输入的次数来执行多少次。很简单的控制器。运用场景很广

天才有两种,一种是天生的,一种是像我这么努力的。

Jmeter的使用说明相关推荐

  1. JMeter安装配置及使用说明【最全面】

    Apache JMeter是Apache组织开发的基于Java的压力测试工具,它可以用于对服务器.网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能. 目录 JMeter安装配置 ...

  2. Jmeter之控制线程执行到某个结果时退出执行

    目的 今天做压力测试时,涉及到一个场景,需要先执行A场景,在执行到status=2时,在执行B场景,然后停止运行. 遇到的困难 status开始为1,需要一段时间后变为2,且不确定需要等待多久才会变为 ...

  3. jmeter对乱码如何处理_JMeter读取 Excel 表中用例数据实现接口压测

    传统的接口测试,都是在接口中手动输入不同用例准备的多种场景参数数据,一遍一遍的输入来执行多个不同的用例,但是现在利用excel表格准备各种类型的数据,使用Jmeter中Jmeter CSV Data ...

  4. 【五】Jmeter:函数助手

    目录 一.Function Helper Dialog(函数助手对话框) 二.函数(68 个) ☆ __base64Decode ☆ __base64Encode ☆ __BeanShell ☆ __ ...

  5. 性能进阶:使用JMeter进行websocket测试

    摘要 本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试. 包含websocket插件的下载安装.线程组及sampler的设置.csv参数化和组建分布式测试的方法 ...

  6. 性能进阶:使用JMeter进行websocket测试【建议收藏】

    本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试. 包含websocket插件的下载安装.线程组及sampler的设置.csv参数化和组建分布式测试的方法.如何 ...

  7. (五)JMeter 断言

    前言 在 jmeter 中断言用于验证服务器返回的数据是否满足我们的要求.jmeter 提供了以下断言类型: 下面我们主要对响应断言.XPath Assertion.jp@gc - JSONPath ...

  8. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(前篇)

    背景: 目前对于传统WEB网站性能(压力/负载)的测试工具有很多,loadrunner.iperf.siege等,操作都比较简单,这里就不介绍了.然而对于医疗领域内的服务器,通常指的是DICOM服务器 ...

  9. jmeter构造测试数据

    软件环境 软件名称 软件版本 说明 JMeter 5.4.1 构造测试数据工具,建议使用最新版本 Java 8 Java环境 Mysql 5.7 数据库 mysql-connector-java-5. ...

最新文章

  1. name optimize is not defined 怎么解决_Web前端:怎么在JavaScript中比较对象?
  2. 【在路上4】在派件时效分析中剥离有效因素
  3. 四川省中职计算机考试题,(四川省计算机等级考试题库.doc
  4. 【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测
  5. android安全补丁卸载,这种安全更新能不卸载就不卸载
  6. android textview获取背景颜色,android – 从textview获取背景颜色而不使用ColorDrawable(API 11)...
  7. 2021中国云计算有哪些新的亮点和变化?
  8. 美国计算机语言学phd,美国大学语言学(Linguistics)专业PhD排名(转)2013
  9. 博科Brocade 6505光纤交换机
  10. git 添加远程仓库并将第一次本地库的已有所有内容推送到远程库上遇到的一个错误...
  11. Rasa原文--训练NLU数据
  12. JS控制台报错Uncaught TypeError Cannot read properties of null (reading ‘appendChild‘);的解决方法
  13. Python判断大小写和数字和常用方法
  14. 问题:未连接到互联网 代理服务器出现问题,或者地址有误。
  15. 【附源码】计算机毕业设计JAVA九宫格日志网站
  16. Thinkphp6使用pdo_odbc连接SQL Server2000
  17. 一位“双11”守夜人的独白
  18. Axure的安装和组件库导入
  19. Unity MegaFiers导入(pc2)格式缓存动画失败出现错误
  20. 摄像无线传送服务器,如何将网络摄像头数据流传输到服务器?

热门文章

  1. Tcl -- lappend
  2. 钢之炼金术师之无法弥补的罪恶铃声 钢之炼金术师之无法弥补的...
  3. s7.net 写数据到plc_C#直接读写S7-200smartPLC的内存数据
  4. 《Quaternion》自己实现Quaternion里面的FromToRotation功能
  5. 300篇天涯论坛经典帖子合集分享(收藏版本)
  6. 2010-09-12
  7. 进程理发师问题linux,理发师问题(linux下实现)问题
  8. Ubuntu关于ERROR: activate-gcc_linux-64.sh failed, see above for details
  9. class es6的构造函数的另一种写法(语法糖)
  10. php蓝牙串口,打印机蓝牙模块(串口)使用说明及参考电路