jmeter如何发送一个十六进制的TCP请求报文,以及响应问题的解决

本文介绍了使用Jmeter添加TCP取样器进行设备压测的方法。首先需安装并配置Jmeter环境,接着阐述了完整流程,包括添加线程组和取样器、输入参数等,还罗列了参数解释及配置文件修改方法。最后分享了请求不停问题的解决办法,即添加固定返回值和结束符验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先安装有jmeter以及配置好安装环境

安装和配置环境这里不细讲!
jmeter的下载地址:https:// jmeter.apache.org
JDK下载地址:https://www.oracle.com

jmeter添加tcp取样器做设备压测

#第一次遇到要做产品设备的压测,接到需求:做设备上传TCP请求的压力测试,本人对jmeter不太熟悉。而且还要第一次做tcp的请求。虽然没接触过过但是网上文章很多但是很杂但是一些基础还是有设置教程。今天整理一份对产品硬件向服务器发送十六进制报文请求登录心看跳返回希望对大家有帮助!

一:先看一个完整的流程

1.jmeter添加线程组并添加tcp取样器
添加tcp取样器
2.输入参数(重点讲这里的参数设置);
在这里插入图片描述
3.请求成功;
在这里插入图片描述

罗列图二中的解释

TCPClient classname:表示处理请求的类,默认是TCPClientImpl类.因为我是发送16进制报文就选择填入:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

ServerName or IP Port Number:这里输入主机服务器IP地址和端口号

Re-use connection:如果选中,这个链接处于保持打开状态,不选中就是读取数据后就关闭,一般我是直接勾选这个就行。

Close connection:若选中,这个链接将会在运行中取样器之后被关闭

SO_LINGER:enable/disable(启用/禁用)这个SO_LINGER设置特定的值,单位为秒,(个人对这个不是太理解)

End of line (EOL) by value:表示结束符,如果设置值在-128到127之外将会跳过eol 检查,可以在jmeter.properties文件中增加属性eolByte进行设置。(可以不填写

Connect TimeOUt:连接超时可以自己设置tcp请求连接的超时时间(单位毫秒,0 表示禁用超时)

Response Timeout:请求响应超时,与请求连接是一样的设置(单位毫秒,0 表示禁用超时)

Set NoDelay:若选中,它将会禁用Nagle’s算法(利用缓存功能)

Text to Send: 发送文本信息,这填入16进制报文(注意:不能留空格

Login User:用户名-可不填

Password:密码-可不填

配置jmeter文件

1.要发送一个tcp请求要设置jmeter中的配置需要修改bin目录下的jmeter.properties文件将tcp.handler=BinaryTCPClientImpl显示,若配置文件没有这一项就自己添加进来保存。(我自己的就没有显示所以这个是我自己添加进来的)
在这里插入图片描述
2.配置文件更改好之后重启jmeter并填入上面的粗体信息,添加结果树和聚合报告一个简单的tcp压测就完成了一般是能正常返回若是响应码在400-499或者500-599之前都是响应失败的。

二:问题解决

下面是我遇到的一些问题和解决的办法
发起tcp请求之后,请求没有停止,一直是发情请求的状态。在这里插入图片描述
只能强制停止该请求但是响应肯定是错误的。
在这里插入图片描述
这个问题困扰了我一天,因为这是设备请求成功之后会不断与服务器进行一个心跳的交换,表示设备在线,没有固定的返回值没法判断,所以需要开发人员配合在服务器的响应返回值中的末尾添加一个固定的返回值并在发请求的End of line (EOL) by value中添加结束符进行响应验证,(注意:响应的结束符是16进制的这里要转成十进制数字填入)

响应末尾设置固定返回值是转换成十进制后范围在-128到127之间
响应末尾设置固定返回值
在End of line (EOL) by value中转换成十进制填写在发送请求就成功了!!
在这里插入图片描述
随笔日记。(亲测有效!有理解错误的地方多多纠正,希望我的经验对大家有帮助!)

### 使用 JMeterTCPSampler 抓取 TCP 响应报文 #### 配置 TCPSampler 为了成功配置并使用 `TCPSampler` 来捕获响应报文,在设置过程中有几个重要的参数需要注意: - **Server Name or IP**: 输入目标服务器的名称或IP地址。 - **Port Number**: 设置要连接的目标端口号。 - **Timeout (milliseconds)**: 定义等待响应的最大毫秒数。 这些基本配置项确保了能够正确建立与远程主机之间的TCP连接[^1]。 #### 添加监听器查看结果 为了让用户直观地看到通过 `TCPSampler` 获取到的数据,可以在测试计划中加入合适的监听器组件。例如,“View Results Tree” 或者 “Aggregate Report”。前者允许逐条查看每次采样所获得的具体内容;后者则汇总性能指标如吞吐量(TPS)、平均响应时间等重要统计数据[^2]。 #### 断言验证响应准确性 如果希望进一步检验接收到的信息是否符合预期,则可利用断言语句来实现这一目的。“Response Assertion” 是一种常用的方式,它能帮助检查实际得到的结果字符串里是否存在特定模式或关键词组。 ```java // 示例代码展示如何定义一个简单的 Response Assertion import org.apache.jmeter.assertions.AssertionResult; AssertionResult result = new AssertionResult(); result.setFailure(false); String responseText = prev.getResponseDataAsString(); // 获取前一步骤中的响应体作为输入源 if (!responseText.contains("expected keyword")) { result.setFailure(true); result.setFailureMessage("The expected content was not found."); } ``` #### 关于三次握手过程的理解 值得注意的是,在发起任何基于TCP协议的应用层通信之前,都会经历一次标准的三步握手流程以初始化双方间的会话链接。当客户端发出初始同步请求(SYN),经过两次交互后最终由其发送确认消息(ACK),从而正式确立起一条双向可靠的传输通道[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值