使用jmeter压测TCP项目
一、前置准备
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
走数据库的请求压测
不走数据库