手把手教学Jmeter之TCP取样器(含遇到的坑)

本文详细介绍了JMeter中的TCP取样器使用方法,包括不同实现类的特点,如TCPClientImpl、BinaryTCPClientImpl及LengthPrefixedBinaryTCPClientImpl。讲解了如何配置TCP连接参数,如服务器IP、端口、超时设置,并解释了如何处理长连接下的多个报文发送,以及自定义错误处理策略。

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

Jmeter.TCP取样器

##需求:公司需要做一个模拟设备,模拟发送报文,要求是先发一个签到报文,然后再发送正文。后续还有要从上一个报文取数据拿到下一个发送报文。

先介绍一下tcp取样器的界面,上面红色圈起来部分是我要讲的。

名称,注释:

顾名思义就不讲了。。

TCPClient classname:

这是重点,这代表了你发出去的TCP报文是什么格式的,Jmeter自己提供的是实现了三类:

TCPClientImpl:

这是最简单的实现类,就是基础的文本,可以设置他的编码格式。一般用来发json串。

BinaryTCPClientImpl:

这是我要重点说的,这个是用来发送十六进制报文的时候,在classname里设置成BinaryTCPClientlmpl,他能将十六进制报文转换成二进制,然后读取响应的时候又反过来。

LengthPrefixedBinaryTCPClientImpl:

这个类是实现了BinaryTCPClientImpl类,所以继承了所有功能,它在BinaryTCPClientlmpl前面增加两个字节数据长度。

服务器名称或ip,端口号:

这个也是顾名思义,就是填你要发送报文的地址,相当于你发快递填的收货人。

超时:连接,响应:

这个挺重要的,它决定了在你没有输入End of line 的时候,什么时候断开tcp连接。

##超时会报500错误,如果你没有设置End of line的话,会在读取流的时候无限阻塞,直到超时,报500错误

##解决方法:设置End of line(后面直接称eol),eol是文本结束符,是说的返回的响应数据最后一位。

如果没有填写的话就会一直在这里,直到超时。

##我自己的话,因为需要不一样,我是直接下载tcp源码去编译,然后改内部的函数,让他不报错。对了,要注意的一点是,就算你勾选了Re-use connection,如果一旦报错的话,还是会把TCP连接给断掉的。在下一个取样器再重新新开一个tcp连接。我后面就需要在一个tcp长连接里发送多个不同的报文,所以需要自己在函数里改掉不报错。

close connection:

如果你勾选的话,一个取样器就只会用一个tcp连接,也就是你发送完报文以后,就关闭tcp连接。

Re-use connection:

如果勾选的话,就代表,在一个线程里,复用一个连接,在要求TCP长连接的时候需要用到这个。

发送文本:

顾名思义也就是报文了。

我自己改的地方是:

它这里就是如果发生读取流超时或者其他错误的时候,是会在第二个参数传一个ReadException进去的,但是我就自己把它改成了null,这样的话就不会报错了。主要因为我的报文是不固定的,所以不能确定结束符是什么,所以只能这样改。

 

### 使用 JMeterTCP 取样器测试 Socket 接口 #### 配置方法与示例 为了使用 JMeter 进行基于 TCP 协议的服务测试,可以利用内置的 `TCP Sampler` 组件来发送自定义请求并接收响应数据。下面详细介绍配置过程: #### 添加 TCP 取样器JMeter 中创建新的测试计划之后,在测试树结构下右键点击线程组 (Thread Group),选择 **添加** -> **取样器(Sampler)** -> **TCP Sampler**。 #### 基础设置 进入新添加的 TCP Sampler 后可以看到如下几个重要参数选项: - **Server Name or IP**: 输入目标服务器地址。 - **Port Number**: 设置端口号,默认情况下为 23 或者其他指定服务使用的特定端口[^1]。 #### 数据传输模式 对于不同的应用场景可以选择合适的数据交换方式: - 如果只需要简单地向远程主机发送消息而不关心返回的结果,则勾选 "Re-use connection" 和 "Close connection after each sample" 来优化性能; - 对于交互式的会话场景,保持连接打开状态以便连续通信更为合理[^4]。 #### 发送内容定制化 通过编辑框输入要发送给服务器的具体命令字符串;如果涉及到二进制文件或其他复杂格式的内容传递,还可以切换至 Raw Data 模式来进行更灵活的操作。 ```java // 示例:发送简单的文本指令 String command = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n"; ``` #### 结果验证 为了让测试更加严谨有效,可以在同一级目录下的监听器(Listeners)里加入断言(Assertions), 如 Response Assertion, 用来校验预期输出是否正确无误。
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值