一、前置准备

1.下载jmeter

首先需要有java环境,安装java环境在这里不做演示

jmeter官网下载链接:Apache JMeter - Download Apache JMeter

下载下面的二进制压缩包


2. 中文切换(可选)

在解压后的bin(apache-jmeter-5.6.3\bin)目录里编辑jmeter.properties文件,找到#language=en,将其取消注释并改成language=zh_CN

3.运行jmeter

在bin目录里找到jmeter.bat文件,双击运行

稍等一会后会出现jmeter的图形化界面


二、压测步骤

1.创建线程组

右键测试计划,选择添加->线程(用户)->线程组

这里我先创建1500个线程,设置启动延迟为10秒,并选择创建线程直到需要。
解释: 线程数可以理解为并发数,启动延迟(Ramp-Up Period)可以理解为压测开始前的等待时间,当你在 JMeter 的线程组中设置了“Ramp-Up时间”时,JMeter 会在这个时间段内逐渐启动所有线程,而不是一次性启动所有线程。例如,我设置了线程数为 1500,启动延迟为 10 秒,那么 JMeter 将在这 60 秒内依次启动 1500 个线程,有助于测试服务器在逐步增加的负载下的表现。

2.添加TCP取样器

右键刚刚的线程组,选择添加->取样器->TCP取样器

填入要压测服务的IP、端口等信息

注意图中红色方框,因为TCP是流式协议,应用程序需要根据一个特殊的标识来判断是否已经到所有数据,因此需要我们配置”行尾(EOF)字节值”,取值范围为 -128 到 +127,它用于定义 TCP 服务器响应数据的结束标识。当 jmeter 接收到来自服务器的数据时,它会根据这个 EOF 字节值来判断何时停止读取更多的数据。

比如果说我的请求和响应如下:

如果服务正常运行则会返回json文本:
{“errmsg”:”No such method, failed to process your request!”,”errno”:404,”msgType”:404}
表示找不到msgType为100的方法,该文本最后一个字符是是”}”,对应的编码转为10进制是125,因此在行位尾(EOF)字节值中填入125

如果不填入行尾(EOF)字节值,jmeter会一直等待,直到超时,或者直到服务器返回数据,导致压测失败。

可以看到即使返回了预期的json也仍然显示失败

填入行位尾(EOF)字节值后,测试成功:

3.添加监听器

右键TCP取样器,选择添加->监听器,可以添加多个不同功能的监听器

点击上方的绿色启动按钮进行压测

三、结果

压测的项目地址:https://github.com/WlayRay/RayBoxServer

走数据库的请求压测

不走数据库