JMeter进阶技巧介绍
前言
本文主要讲jmeter中一些使用技巧以及注意事项,适合已经对Jmeter有基本的使用经验的人阅读。如果还是jmeter的小白用户,建议先去看一下我的同系列入门文章,再来阅读本文。
如果对Jmeter的其他知识感兴趣,可以看我其他的相关文章:
压测工具Jmeter的安装和快速上手
一、快速创建已经定义好的组件
比如说,我们需要在线程组中创建多个相似的http请求(除了path不同,其他参数相同),那么我们可以直接ctrl+c
复制我们已经创建好的一个请求,在线程组中ctrl+v
直接粘贴。或者是手动选中要复制的组件点击鼠标右键选择复制,然后再去线程组中进行粘贴。这样可以很大程度上简化我们创建请求的操作。
需要注意的是,这种快速复制的方式还会将线程组/请求下面的所有已有配置项都复制一份。如果不需要则自己要再单独删除这些配置。
二、关于指定执行的请求
需要注意,Jmeter执行请求的最小单位是线程组,也就是说如果线程组中有2个或者以上数量的请求时,那么此时启动线程组的执行时,会同时对线程组内的请求进行并发请求,所以如果说当前你不希望对线程组内的其他请求进行测试,那就要将其他请求设置为禁用。防止对测试的结果产生干扰
对于测试计划中存在多个线程组的场景,也同样需要注意这个问题。如果你点击的是总菜单栏中的启动,那么测试计划下的所有线程组中没有被禁用的请求,都会被执行到。
所以如果你不希望对其他请求组内的请求发起测试的话,建议执行的时候只选中单个线程组进行启动。避免产生干扰
三、定义用户变量
如果我们的测试请求中存在很多相同的配置,那么我们可以通过定义用户变量来实现参数的解耦。所谓定义用户变量,就是我们把相同的配置抽取出来,作为一个常量放在线程组中。这样可以方便我们统一管理这些参数,除此之外还有一个优点,很多时候对测试环境、生产环境进行接口的压测,其实大体上压测的内容都是一致的,只是请求的端口和ip会发生改变。所以我们将这些参数抽离成用户变量后,我们的jmx文件的可移植性就会更强,我们只需要替换用户变量中的常量就可以实现对不同环境的接口进行压测了。
四、函数的使用
作为postman的前辈,Jmeter
当然也有自己的函数可以直接给使用者使用,我们可以通过点击工具->函数助手对话框
打开操作面板。
选择好要使用的函数后,输入函数所需要的参数后,点击生成按钮就可以获得最终的函数式了。
得到函数式后,我们就可以在相关的请求或者其他组件中使用上我们的函数式了
五、使用csv文件作为变量值来源
涉及到批量调用接口时,除了使用用户变量/函数去造不同的入参数据之外,我们还可以通过csv文件来作为我们接口请求的入参值。在查询类接口压测场景下,我们会先提取一批数据放在csv格式的文件中,作为接口的参数去批量请求,这种方式也会更加贴合实际的业务场景。
步骤一:定义csv配置元件
步骤二:定义csv文件的读取规则
这里核心还是在于定义好文件中的变量,如果说文件的入参有多个,那我们可以用,
来分隔不同的值,比如productId,orderId
。只要能让jmeter清楚文件的数据格式就行。
步骤三:调用具体接口,使用我们定义的变量
使用${变量名}
的方式引用我们在步骤二中定义好的变量,这样jmeter就会帮我们把csv文件中的数据作为接口入参去调用啦
六、指定csv文件执行行数
我们在上一小节中介绍了如何使用csv文件作为数据源进行接口调用,但csv数据源有个特点就是每次执行的时候默认都会从第一行数据开始执行,但是在某些场景下,我们会希望第二次执行测试时,从上次执行结束的地方开始重新执行。这个时候我们可能就需要借助一些原件配合来实现我们想要实现的效果了。
思路分析:假设我们知道应该从第几行开始读取数据,那么我们只需要跳过指定行数之前的所有测试用例就可以实现相关的效果。
步骤一:在线程组下定义csv数据源
步骤二:在线程组下定义一个计数器
计数器的话,我们可以设置开始值为1,递增量为1,然后设置计数器的变量值为
counter
步骤三:在线程组下定义一个If
控制器
重点来了!假如我们希望从csv文件的第50行数据开始读取,那么这里我们需要指定条件值右边的值为50。
这里解释一下为什么需要这样操作,当线程启动时,由于csv的数据配置的是所有线程共享,所以首先所有线程会以争抢式的方式从第一行开始读取csv文件的内容,每读取一行数据对应的counter就会加1,也就是说我们定义的计数器本质上就等于了csv数据的行数。
那么只要我们限制只对counter
大于50的数据才进行处理,那就可以从51行数据开始处理了。
不限麻烦的话,此处我们还可以把这个具体的读取行数封装到用户变量里面,这样可能会更便于管理一些。
步骤四:在If
控制器下创建相关的http请求、查看结果树等组件,这里根据实际情况来就行
步骤五:启动线程组进行验证
我们这里用于测试的csv文件,内容是从123100开始递增的数值,我们可以看到当我们启动脚本的时候,第一个请求对应的参数就已经是第51个数值了。
七、关于聚合报告的参数
我们压测过程中,一般都会设置聚合报告等监听器来辅助我们了解系统当前的性能和瓶颈。聚合报告也是我们常见的用来分析接口不同维度系数的数据报表。下面我们就来讲讲各个参数的含义。
名词 | 含义 |
---|---|
样本 | 整个批次的总请求量 |
平均值 | 指执行过程中平均每个请求的处理时间 |
中位数 | 指执行过程中在排在所有请求处理时间的中间的数值 |
90%百分位 | 90%的线程的耗时低于该处理时间,也是用于看接口的响应时间 |
95%百分位 | 95%的线程的耗时低于该处理时间 |
99%百分位 | 99%的线程的耗时低于该处理时间 |
最小值 | 处理时间最短的数值 |
最大值 | 处理时间最大的数值 |
异常 | 发生异常的比例 |
吞吐量 | 吞吐量表示每秒处理完的请求数,单位时间内处理完的请求越多,说明系统的效率越高 |
接收/发送 | 指每秒接收和发送的平均数据大小,用来辅助我们看带宽的 |
其他
- 目前jmeter最高版本是5.6.2,笔者在测试时发现这个版本在win11操作系统似乎UI不是特别兼容,存在个别模块字体不统一的问题(即使改配置文件也没有用)。所以建议使用win11的人,可以选择稍低一些的版本进行使用,尽量避免兼容性问题。