JMeter中如何配置线程组实现无响应等待的持续TCP数据发送
解决方案:JMeter TCP无响应持续发送请求
方法1:直接配置TCP Sampler(无需脚本)
普通TCP Sampler仅发送一次请求的核心原因是默认会等待服务器响应,调整以下参数即可实现无等待持续发送:
- 给线程组添加TCP Sampler
- 配置服务器地址、目标端口
- 关键参数设置:
- 将Response Timeout设为
0(表示发送请求后不等待响应,立即执行下一次循环) - 勾选Reuse connection以复用TCP连接
- 将Response Timeout设为
- 线程组配置:设置10个线程,循环次数选
无限,再通过持续时间(如24小时)控制测试时长
完成配置后,每个线程会持续发送请求,无需等待响应,且保持连接复用。
方法2:修复JSR223 Sampler的Groovy脚本
你的脚本存在几处关键问题导致请求未发送或阻塞,修复后的脚本如下:
import org.apache.jmeter.protocol.tcp.sampler.TCPSampler; // 获取当前线程编号(从0开始) int threadNum = ctx.getThreadNum(); // 计算计数器值(使用long避免整数溢出) long baseCounterValue = 860181068935920L; long counterValue = baseCounterValue + threadNum; log.info("Thread number: " + threadNum + ", Counter value: " + counterValue); // 将计数器值替换到请求数据中(原脚本未使用该变量,此处补上) String dataToSend = "\$,Lt4G,LCR,NR," + counterValue + ",,L,1,08022024,112732,20.791864,85.261978,13.,225,26,Air4G,28,42,11001,,20 02,298085.8,3477,*"; log.info("Data to send: " + dataToSend); // 创建并配置TCP Sampler实例 TCPSampler tcpSampler = new TCPSampler(); tcpSampler.setServer("dummy server"); tcpSampler.setPort(4242); // 端口需传入整数,而非字符串 tcpSampler.setRequestData(dataToSend); tcpSampler.setReuseConnection(true); // 开启连接复用 tcpSampler.setResponseTimeout(0); // 不等待响应,发送后立即执行后续逻辑 // 发送请求 tcpSampler.sample();
关键修改说明:
- 端口类型修正:将
setPort("4242")改为setPort(4242),端口参数要求为整数类型 - 添加无等待配置:
setResponseTimeout(0)让JMeter发送请求后不阻塞等待响应 - 复用连接设置:
setReuseConnection(true)确保线程持续复用已建立的TCP连接 - 计数器值替换:将请求数据中的固定编号替换为计算后的
counterValue(原脚本遗漏了该变量的使用)
注意事项
- 若服务器完全不返回任何数据,
Response Timeout=0是最优设置,可避免JMeter因等待响应卡住 - 复用连接时需确认服务器支持长连接,若出现连接断开情况,可配合
Close connection选项添加重试逻辑
内容的提问来源于stack exchange,提问作者keshav kumar Goud
相关产品推荐
相关产品推荐

