JMeter性能测试(2)
前言
文章接上一篇文章👉jmeter搭配Zabbix接口性能测试(1)
上一篇文章偏理论,这一篇文章偏实战类型。后续仍会继续更新👌
压测要求
两个接口,瞬时并发是10,接口在两秒内响应即可。给的链接是接口文档
实操步骤
JMeter脚本编写
最终的脚本架构如下:

- 打开JMeter
打开之后发现还是英文界面,上一篇文章介绍的调整语言的方法是一次性的,如果想将语言永久设置为中文,可以按照下面的步骤进行设置:
- 打开 JMeter 对配置文件:JMeter 所在文件夹/bin/jmeter.properties
- 将语言改成中文: language=zh_CN,并保存

- 重启Jmeter

这样操作过后每次打开JMeter界面就都是中文设置了。
- 配置默认值
HTTP请求默认值:用于为同一作用域内的多个HTTP请求设置公共的协议、服务器地址、端口等参数,避免重复配置

CSV数据文件配置:
接口的请求头需要令牌或者其他的数据(不同的登录账号以及对应的密码)时,需要提前准备好对应的压测数据,这里的要求是10并发,所以最少需要10个不同的token。
当时我同事说一个token也行,之前有次并发数要求100,但是因为时间紧迫,当时只准备了11个人的数据,也是可以的。我总结了下:时间条件允许的情况下Token数 ≥ 并发线程数(10并发至少10Token);时间不够的情况下Token数的要求可以放宽,
在JMeter里具体的设置如下

文件使用.txt文件即可,首行是变量名称,下面的就是Token,编码为UTF-8。忽略首行设置为True,分隔符为",",其他的默认即可。

3.添加线程组

名称:修改为接口的名称
在取样器错误后要执行的动作:继续
线程数:按照要求配置,填10
Ramp-Up时间(秒):2,代表2秒内启动10个线程。Ramp-Up时间即启动所有线程(虚拟用户)所需的时间。
举个例子想象有 10 辆车(代表 10 个线程/用户) 在一条起跑线上准备出发:
Ramp-Up = 0 秒: 所有 10 辆车 同时瞬间踩油门启动 (真正的瞬时并发,对系统冲击最大)。
Ramp-Up = 2 秒: JMeter 会 均匀地 在 2 秒内启动这 10 辆车。大概每 2秒 / 10用户 = 0.2秒 启动一辆车。
循环次数:如果不勾选永远而设置固定次数的话,按照压测要求接口响应时间为2秒以内,预估响应时间为1.5秒,10并发的要求的接口测试时间控制在10-15分钟合适,10分钟即600秒,除1.5即循环400次。
循环次数
≈
目标测试时长
(
秒
)
单次迭代预估时间
(
秒
)
循环次数 ≈ \frac{目标测试时长(秒)}{单次迭代预估时间(秒)}
循环次数≈单次迭代预估时间(秒)目标测试时长(秒)
但是在如此设置后,实际运行了大概七秒,接口就跑完了600次循环,所以如果想要确保测试总运行时间达到10分钟的话需在次将循环次数设置为永远并设置调度器。
Same user on each iteration:勾选;如果该接口需要Authorization(认证,使用Token)那一定要勾选,如果不需要那可勾选可不勾选。
调度器:确保测试总运行时间达到x分钟。持续时间设置为你想让接口持续压测的时间;启动延迟为在正式启动第一个线程(用户)之前,JMeter 会等待的时间,JMeter做压测时,当需要多个jmx脚本依次执行时,需要用到“启动延时”,即间隔可设置的时间后启动运行下一个jmx脚本。这里只有一个线程组所以设置为0。
- 添加请求头以及HTTP请求
这里的请求头和HTTP请求的具体内容可以由以下途径获取
- 接口文档:根据接口文档的内容,填写请求头和请求体
- 用抓包工具抓取到接口,复制cURL导入到Apifox里(或者其他工具,目的是看起来更直观一些),看下Headers和Body里的参数,然后复制到JMeter里。


- 添加响应断言

为什么这样写断言:
- 关注系统承载能力而非功能正确性,主要验证系统在高并发下的稳定性
- 简单的状态码检查开销最小
- 添加“查看结果树”以及“聚合报告”
查看结果树目的是记录接口调用后的结果,这里是用来调试的,看接口有没有正确取到csv的数据,或者有没有正确请求到接口等。
搭配Zabbix进行压测
-
打开Zabbix找到压测的主机


-
命令行执行压测
到JMeter的bin文件夹所在位置


命令行语句:
jmeter -n -t gcs/GCS.jmx -l gcs/result/result.txt -e -o gcs/webreport
其中gcs/GCS.jmx是脚本所在的路径
gcs/result/result.txt存放测试结果文件路径
testplan/webreport为web报告保存路径
压测报告
出具一份压测报告,根据公司要求来编写,可以问同事要一份之前的压测报告。如下格式可以参考:
- 项目背景
- 压测范围
- 压测结果(如下的聚合报告):

服务器在压测期间的性能图:服务器CPU利用率监控图;服务器网络流量监控图;服务器内存利用率监控图;服务器磁盘I/O监控图等
服务器CPU利用率监控图
- 压测结果名词解释(可以照抄)
| 指标名称 | 说明 |
|---|---|
| Label | 接口名 |
| # Samples | 样本数 |
| Error % | 错误请求数量百分比 |
| Average | 平均响应时间(单位:ms) |
| Min | 响应时间最小值 |
| Max | 响应时间最大值 |
| Median | 响应时长中位数,50%的响应时间小于这个值 |
| 90% Line | 90%的响应时间小于这个值 |
| 95% Line | 95%的响应时间小于这个值 |
| 99% Line | 99%的响应时间小于这个值 |
| Throughput | 吞吐量(tps),每秒处理的请求数 |
| Received KB/sec | 每秒从服务器端接收到的数据量 |
- 总结:总结一下压测的结果
总结
好久没更新了,害~
这一次执行了一次简单的压测,解决了中文设置,线程组的设置以及csv文件使用的问题;还有不足的是没有将两个接口放在一个压测脚本里压测,下次尝试一下。之前还看到过一次压测使用两个csv文件,遇到的话我下次更新放上去。
更多推荐

所有评论(0)