前言

文章接上一篇文章👉jmeter搭配Zabbix接口性能测试(1)
上一篇文章偏理论,这一篇文章偏实战类型。后续仍会继续更新👌

压测要求

两个接口,瞬时并发是10,接口在两秒内响应即可。给的链接是接口文档

实操步骤

JMeter脚本编写

最终的脚本架构如下:

  1. 打开JMeter
    打开之后发现还是英文界面,上一篇文章介绍的调整语言的方法是一次性的,如果想将语言永久设置为中文,可以按照下面的步骤进行设置:
  • 打开 JMeter 对配置文件:JMeter 所在文件夹/bin/jmeter.properties
  • 将语言改成中文: language=zh_CN,并保存
    在这里插入图片描述
  • 重启Jmeter
    在这里插入图片描述
    这样操作过后每次打开JMeter界面就都是中文设置了。
  1. 配置默认值

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。

  1. 添加请求头以及HTTP请求
    这里的请求头和HTTP请求的具体内容可以由以下途径获取
  • 接口文档:根据接口文档的内容,填写请求头和请求体
  • 用抓包工具抓取到接口,复制cURL导入到Apifox里(或者其他工具,目的是看起来更直观一些),看下Headers和Body里的参数,然后复制到JMeter里。
    在这里插入图片描述
    在这里插入图片描述
  1. 添加响应断言
    在这里插入图片描述

为什么这样写断言:

  • 关注系统承载能力而非功能正确性,主要验证系统在高并发下的稳定性
  • 简单的状态码检查开销最小
  1. 添加“查看结果树”以及“聚合报告”
    查看结果树目的是记录接口调用后的结果,这里是用来调试的,看接口有没有正确取到csv的数据,或者有没有正确请求到接口等。

搭配Zabbix进行压测

  1. 打开Zabbix找到压测的主机
    在这里插入图片描述
    在这里插入图片描述

  2. 命令行执行压测

到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使用率随时间变化情况
服务器CPU利用率监控图
  • 压测结果名词解释(可以照抄)
指标名称说明
Label接口名
# Samples样本数
Error %错误请求数量百分比
Average平均响应时间(单位:ms)
Min响应时间最小值
Max响应时间最大值
Median响应时长中位数,50%的响应时间小于这个值
90% Line90%的响应时间小于这个值
95% Line95%的响应时间小于这个值
99% Line99%的响应时间小于这个值
Throughput吞吐量(tps),每秒处理的请求数
Received KB/sec每秒从服务器端接收到的数据量
  • 总结:总结一下压测的结果

总结

好久没更新了,害~
这一次执行了一次简单的压测,解决了中文设置,线程组的设置以及csv文件使用的问题;还有不足的是没有将两个接口放在一个压测脚本里压测,下次尝试一下。之前还看到过一次压测使用两个csv文件,遇到的话我下次更新放上去。

更多推荐