工具

Jmeter 主要元件

2020-11-15  本文已影响0人  自如_

Jmeter 主要概念

JMeter 工具与其他性能测试工具在原理上完全一致,工具本身包含4个部分。

1. 负载发生器

用于产生负载,通常以多线程或多进程的方式模拟用户行为。

2. 用户运行器

通常是一个脚本运行引擎,用户运行器附加在线程或者进程上,根据脚本要求模拟指定的用户行为。

3. 资源监视器

用于获取测试过程中服务器、负载机的资源数据

4. 报表生成器

根据测试中获得的数据生成报表,提供可视化的数据显示方式

Jmeter 的主要元件

1. Test plan(测试计划)

Test Plan 元素:控制型元素。只能存在于树形结构的根节点。它代表了整个测试方案,测试人员可以在这里设置一些全局性的内容,例如全局变量(注意全局变量是 Thread Local)、ClassPath 配置(如果希望在 Jmeter 中调用自己的 Java 类就需要在这里设置了)。

启动 Jmeter 后,Jmeter 会自动生成一个空的测试计划,用于可以基于该测试计划建立自己的测试计划。

注意:里面名称和注释没有什么好说的,重点注意的是 独立运行每个线程组(例如在一个组运行结束后启动下一个)

image.png

例子:创建 A、B 两个线程组。

image.png

如果不勾选独立运行每个线程组,这两个线程组就一起跑。我们添加两个 HTTP 请求,小a和小b

image.png

我们添加个监听器(添加方式这里先不说,看后面文章)跑一次看一下。


image.png

如果勾选独立运行每个线程组,会严格遵守顺序 AB 从上往下依次运行。

image.png

2. Thread Group(线程组)
Thread Group 元素:控制型元素。只能存在于 Test Plan 元素之下。它代表了一组行为相似的用户,通常我们把一类用户的动作放在同一个 Thread Group 下,这样就可以模拟多个这样的用户了。在这里可以配置模拟用户的个数(线程的个数)、循环次数、执行时间等。

一个线程组可以看做是一个虚拟用户组,Thread Group 中的每个线程都可以理解为一个虚拟用户。Thread Group 中包含的线程数量在测试执行过程中是不会发生改变的。

Jmeter 中每个测试计划至少需要包含一个线程组,当然也可以在一个线程中创建多个线程组,那么多个线程组之间又会怎样的顺序执行(串行还是并行)?在测试计划下面多个线程是并行执行的,也就是说这些线程组是同时被初始化并同时执行线程组下的 Sampler(采样器) 的。

image.png

线程组有三个,用法如下。

Thread Group:线程组(操作)---2
setUp Thread Group:初始化(登录)---1
TearDown Thread Group:结束-恢复(登出)---3

线程组参数详解
线程组主要包括三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。

image.png

线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就设置多少个线程数。
准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为20,准备时长为10,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为 20*100=2000。如果勾选了 “永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本。
设置合理的线程数对于能否达到测试目标有 决定性的影响。另外设置合理的循环次数也很重要,除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选 “调度器”,进行调度器配置。

有个误区这里要注意一下,看一下下面两张图的配置。

虽然结果不一样,但是它们最终产生的都是10个请求。
第一张图:5秒钟启动5个用户,一秒钟启动一个用户,用表格查看结果会发现一个特点,感觉是5秒钟启动10个,这只是表面现象,它是这么做的我在第1秒第一个用户被启之后隔了1秒启动第2个,在启第2个的同时第1个要执行第二次的循环,所以感觉是5秒启动10个请求。记住一个原理,它启动之后不等你响应,但是它在表格查看结果里面感觉它是等响应的。因为在表格查看结果里面它是等响应的,等你得了响应它才显示出来,所以表格查看结果显示里面显示和发的不一定同步的,显示一般会滞后,你1秒发一个,可能我等的时间很长。
第二张图:5秒启10个,只管发出去。

image.png image.png

3. 断言元件

响应断言:通过检查服务器的响应数据:是否符合预期想要的数据,判断任务是否成功
注意:增加响应断言要注意一个细节问题,在Jmeter中作用域非常关键,元件一旦放错了,很有可能你得到的结果跟你的场景效果完全不一样。
你想去判别哪个请求,就放在哪个请求里面去不能放外面,因为对于我们来说有三种作用域,第一种测试计划的(全局的)、第二种线程组的(第二级别的全局)、第三个是请求的,不同的作用域代表的效果不一样。

image.png image.png

-3.2.2 断言持续时间

断言持续时间:判断是否在给定的时间内给出响应结果

image.png

例子

协议:http
ip地址:xxxx(如果是域名就写域名)
端口:xxxx
路径:我们这里不需要进行操作直接写 / 就好。

image.png

断言里面写上匹配的内容。

image.png
4. 监听元件——查看结果树

请求写好之后,添加监听元件,监听元件主要常用的有查看结果树、聚合报告、表格查看结果、图形结果,我们这里使用第一个查看结果树。
注意:查看结果树如果断言成功它没有显示,如果断言失败它是有显示的(显示红色)。看具体某个请求的请求响应结果明细,可以使用查看结果树

下面截图一个断言成功,一个断言失败的。

image.png

查看结果树里面是有非常多内容的,请求下面有2个一个是 Request Body(请求体) 另一个是 Request Headers(请求头) ,有响应数据和取样器,里面请求方式响应体的内容都有,可以多研究一下。

image.png

4.1 监听元件-聚合报告

所谓聚合报告相当于一个汇总的报告,它会把所有请求放在一块。 聚合报告一般是一个综合报告,里面会显示整个跑的一个场景。汇总报告--汇总结果,可以使用聚合报告

image.png

里面的中位数和百分位单位是 毫秒 叫响应时间,平均数只能参考不能看,因为这个东西太坑了,比如考试全班平均分70分,两级分化特别严重。还有工资被平均了,这里大家都懂的哈。

这里一般看90%的比较多。

这里有个要注意的地方,如果我只想清除聚合报告的数据该怎么清?上面有两个扫把,这里点击左边这把,删除当前的。如果点击右边的就会把监听器所有的数据都清空了。

image.png

4.2 监听元件-表格查看结果

如果想看每个请求的详情,可以用表格查看结果,这是一个颗粒度问题。里面的1-1,第一个1是第1个线程组的编号,第二个1是用户。

image.png image.png

4.3 监听元件-图形结果

这个组件是在聚合报告(Aggregate report)的基础之上增加了图形化展示,把数据转化成柱状图的形式展示,并且可以编辑图形展示的样式,以图形化展示结果

image.png
5. 定时器元件

5.1 固定定时器 Constant Timer

固定定时器一般叫思考时间,所谓思考时间就是尽可能模拟用户使用情况。比如下面有个线程组,我希望首页登录完之后,b请求等2秒钟时间。

image.png

这里就需要增加固定定时器,这里要注意作用域,固定定时器是一个前置的处理程序,是先运行固定定时器,再运行请求的。这里我们要放置在b里面,运行b之前先等待2秒钟。

image.png image.png

**5.2 同步定时器 **

作用
模拟并发。设置一个阀值(请求数量),当请求数达到这个阀值时,允许请求同时发出。例如:想测试一座桥的并发(忽略载重等其他因素,只考虑通过),那么并发的请求就是类似于多少辆车可同时通过桥,而车辆一般情况下是不可能同时通过桥的,因而我们可以在桥头A,设置一个集合点,等车辆数满足一定的数量,同时让车辆通过此桥。

image.png

同步定时器有两个参数需要填写,第一个模拟用户的数量,第二个超时时间以毫秒为单位。这里面的两个0标识不限制不设置,第一个0标识全部,第二个0表示超时,不等到那个人我一直等下去。

image.png
6.逻辑控制器

仅一次控制器:只运行一次,这个请求只运行一遍,如果2个用户运行2遍,以用户为单元。

image.png image.png image.png

转换控制器(switch Controller) 选择控制器,比如我有a用户,它里面有两种场景1业务和2业务。不是让他一直运行1或者一直运行2,我现在想让他交替运行。就可以用转换控制器,什么时候条件满足选择1,什么时候条件满足选择2。

image.png image.png

添加转换控制器要把请求放进去,Switch Value 的值是从下标0开始的。0代表的首页访问,这里填写0就只运行首页访问。Switch Value 这里的值可以通过参数化随机数来做。

image.png image.png

循环控制器 就是控制循环的次数,跟代码中的while一样,不过多解释

事务控制器 订单提交,其会调用多个接口。首先我们要区分一个问题,打个比方我们点击一个登陆按钮或者查询订单的,我们按钮按下去会发送多个请求到服务器,这个要理解叫事务数,Jmeter最小单元是请求,如果说一个动作或业务他的一步操作有很多请求的话我不可能去把它自己加起来。

例子:比如下面线程组-2有两个请求。这个查询操作有两个操作a和b请求,如果我们直接运行的话,在聚合报告中我们可以看到有2个(图2)。如果我想看这个查询的功能具体响应时间到底是多少呢,我得自己加。会很麻烦。

image.png image.png

为了解决上面的问题,我们可以增加 事务控制器 ,然后把请求都放到事务控制器里面,可以看到数据都帮我们统计出来了(图2),用表格查看结果里面显示了有3个请求,是因为事务控制里面有两个选项,如果不勾的话 查询-事务 就会单独显示,它是一个总和在查看结果树里面是3个(但是事务请求里面没有东西,因为它是一个虚拟的就为了统计一个东西。),

image.png image.png

事务控制器里面有两个选项。Generate parent sample 如果选中,则生成样本为其他样本的父项(图2),这里注意勾选之后如果一个请求失败这个事务就失败了。勾选之后意味着他们就是一个整体。如果不勾选样本将作为独立样本生成(图3),那个失败就会显示出来。

Include duration of timer and pre-post processors in generated sample:是否在生成样本中包括计时器,预处理和后处理延迟。默认值为false。一般不建议选择。因为选择会把一些额外时间算入总时间,勾选则会把其他时间算入事务总数。勾完之后如果整个事务里面添加固定定时器,他会算2次的。

image.png image.png image.png
上一篇下一篇

猜你喜欢

热点阅读