前言

第一次做接口性能测试,内容供有需要的童鞋参考~
最近非常懈怠!产出太少了,这可如何是好。
偏实战的一篇文章已更新👉JMeter性能测试(2)

性能测试目的

  • 验证系统在高并发、高负载场景下的性能和稳定性,确保其能够满足真实业务需求
  • 出一份压测报告;可以问同事要一份压测报告的模版,下面截图可供参考:
    在这里插入图片描述
    聚合报告是JMeter里给出的,下面的图里包含的信息是各项指标的监控:CPU 使用率;内存使用率;磁盘I/O; 网络流量;延迟。因为压的是生产环境,所以是运维给的。
    在这里插入图片描述
    这里的TPS峰值对应的是JMeter聚合报告中的吞吐量,选取的不同的并发级别下的最大值;RT值是聚合报告中的Average(平均响应时间)。

JMeter下载

JMeter的安装可参考这篇文章👉Jmeter安装及入门教程(超详细)

可能会出现的问题

WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release

意思是意味着JMeter在将来的版本中将移除使用包扫描来定位插件的功能,这个警告可能会在以后得更新版本修复;原因是下载了5.6版本。下载低版本的JMeter后该报错消失。

Zabbix

作用:监控JMeter无法直接监控服务器资源消耗(如 CPU、内存、磁盘 I/O、网络带宽)

  • Zabbix Server:一个集中监控平台,负责收集、处理和展示监控数据,同时触发告警和通知
  • Zabbix Agent:安装在被监控设备上的轻量级程序,负责采集本地数据并发送给 Zabbix Server 或 Proxy
    一般起服务都会配置zabbix ,使用公司的Zabbix在Zabbix Server中找不到你要监控的服务器时一般是Server端没有配置可以去找负责人让他配;如果有堡垒机权限的话也可以先查一下目标服务器的Zabbix Agent配没配。
    在这里插入图片描述

接口测试实操

前期准备

  • 问一下产品或者业务需要压测哪些接口以及哪些场景
  • 问一下性能要求
  • 准备好压测需要的数据(根据需求来要),如100人并发登录就需要准备100个账号以及对应的密码

JMeter

  1. 修改JMeter批处理文件的环境变量:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m",目的为了调整JMeter运行时的Java虚拟机(JVM)内存设置,具体来说是设定初始堆大小(-Xms)、最大堆大小(-Xmx)和最大元空间大小(-XX:MaxMetaspaceSize),以优化性能和确保在负载测试期间有足够的内存可用。
    操作步骤如下
    • Windows:编辑 JMeter安装目录\bin\jmeter.bat
    • 记事本或其他软件编辑,找到这一行:set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
    • 根据测试需要设置
  2. 启动JMeter
    bin文件夹里选择jmeter.bat启动,启动后会出现两个界面,一个cmd窗口,一个JMeter的 GUI
    不要忽略CMD窗口的提示信息!!!
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html

意思是不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。
3. 更改语言为中文:【Options】-【Choose Language】
4. 创建http请求默认值:配置公共的ip和端口地址,相当于访问的前缀
在这里插入图片描述
在这里插入图片描述

  1. 创建线程组:在“测试计划”上右键 【添加】-【Threads(Users)】-【线程组】
    在这里插入图片描述
    在这里插入图片描述
    demo解释:图中Number of Threads为2即同时运行的虚拟用户数量为2(因为我目前只要了2个数据,不好意思QAQ),循环次数1次,所有线程启动所需的时间为0秒即同时启动,Same user on each iteration不勾选因为测试的登录接口。
    • 线程数 (Number of Threads): 指定同时运行的虚拟用户数量。例如,设置为500表示将有500个虚拟用户并发执行测试。
    • 循环次数 (Loop Count): 指定每个线程重复执行测试脚本的次数。如果选择“永远 (Forever)”,则线程会无限循环直到手动停止测试。
    • Ramp-Up时间 (秒) (Ramp-Up Period (in seconds)): 指定所有线程启动所需的时间。例如,线程100,Ramp-Up60 秒,每秒启动 ~1.67 用户,目的是避免瞬时压力,
    • Same user on each iteration:影响线程(模拟用户)在迭代过程中的行为。不勾选:每次迭代会创建新的线程(销毁旧线程并创建新线程),每次迭代的线程是独立的,不保留任何状态。勾选:每个线程在所有迭代中复用同一个线程,即同一个线程在所有循环中保留其状态(如Cookie、变量值等)。
    • Specify Thread lifetime: 如果勾选此选项,可以设置持续时间和启动延迟。
      • 持续时间(Duration):指定测试计划或线程组运行的总时间。无论线程组的循环次数(Loop Count) 如何设置,只要达到持续时间,测试就会强制停止。eg1:线程数=100,循环次数=无限,持续时间=300秒 → 测试运行 300 秒后停止。eg2:线程数=100,循环次数=5,持续时间=300秒 → 若 100 个线程完成 5 次循环仅需 200 秒,测试会在 200 秒提前结束。
      • 启动延迟 (秒) (Start Delay (seconds)): 设置测试开始前的延迟时间。
  2. 压测数据配置(如果需要的话)
    在这里插入图片描述
    在这里插入图片描述具体设置可参考这篇文章👉JMeter CSV 参数文件的使用方法
    PS:数据的格式如果用.csv的话会报错!!!会读取不到数据,使用.txt即可;文件的编码格式查看windows可以通过Notepad++查看。
  3. 配置信息头参数(具体参数配置哪些需参照接口文档)
    在这里插入图片描述
    在这里插入图片描述
  4. 创建HTTP请求
    在这里插入图片描述接口参数配置(根据实际接口信息进行配置)
    在这里插入图片描述
  5. 响应断言
    在这里插入图片描述
    在这里插入图片描述
    断言的设置需要根据需求设置,和接口测试类似,这里就简单设置响应代码等于200
  6. 添加监听器
    在这里插入图片描述
    这里会记录接口调用后的结果。点击绿色的运行即可查看,这里是用来调试的,看接口有没有正确取到csv的数据!!!
  7. 添加聚合报告
    在这里插入图片描述
    OK到这里一个接口的压测脚本就写好啦!
    保存,在bin目录下新建一个文件夹testplan,把将要运行的脚本放在此文件夹目录下,
    接着打开cmd:
    在这里插入图片描述
    在bin所在目录上方输入cmd,输入命令
jmeter -n -t testplan/汇总报告.jmx -l testplan/result/result.txt -e -o testplan/webreport
  • testplan/汇总报告.jmx 为测试计划文件路径

  • testplan/result/result.txt 为测试结果文件路径

  • testplan/webreport 为web报告保存路径
    在这里插入图片描述我只用了两个线程,so这里仅做demo演示
    每次运行时testplan文件夹中只需要保留jmx文件,其余生成的文件需手动清空后再运行查看

Zabbix

我使用的是公司的Zabbix,市面上还有很多的监测工具如grafana等。
在这里插入图片描述
在这里插入图片描述

总结

本篇文章可供第一次做接口测试的童鞋参考,里面包含一些我踩过的坑

后面的日子认真更新~

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐