如何在JMeter TCP采样器请求中处理并配置控制字符
JMeter TCP采样器控制字符配置方法
控制字符属于不可见ASCII字符,无法直接通过键盘输入到采样器的请求输入框,可通过以下三种方案实现配置:
- 方案1:使用JMeter内置
__char函数生成
该函数可根据输入的ASCII码十进制值生成对应字符,是最简单的配置方式。例如:- 报文开头的STX(开始文本,ASCII码2):
${__char(2)} - 报文结尾的ETX(结束文本,ASCII码3):
${__char(3)} - 回车符CR(ASCII码13):
${__char(13)} - 换行符LF(ASCII码10):
${__char(10)}
你可以直接把函数嵌入到请求字符串的对应位置即可,比如完整的请求格式可以写为${__char(2)}你的业务报文内容${__char(3)}。
- 报文开头的STX(开始文本,ASCII码2):
- 方案2:使用二进制客户端实现输入十六进制编码
如果你的TCP采样器选择org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl作为客户端实现类,可以直接在请求框输入控制字符的十六进制编码+业务内容的十六进制编码,不需要额外转义。
示例:要发送test 的报文,直接输入 027465737403即可,其中02是STX的十六进制编码,74657374是test的十六进制编码,03是ETX的十六进制编码。 - 方案3:通过JSR223预处理脚本生成请求内容
如果控制字符逻辑复杂,可添加JSR223预处理元件,用代码生成带控制字符的请求变量,示例代码如下:
之后在TCP采样器的请求内容框直接填写// 生成包含STX(\u0002)、业务内容、ETX(\u0003)的请求报文 String tcpReq = "\u0002your_business_data\u0003" // 存入变量供采样器调用 vars.put("tcpRequest", tcpReq)${tcpRequest}即可。
配置注意事项
- 需根据你的协议类型选择匹配的TCP客户端实现类:
- 文本类协议优先选
TCPClientImpl,配合__char函数使用 - 二进制类协议优先选
BinaryTCPClientImpl,直接输入十六进制串
- 文本类协议优先选
- 配置完成后可通过Wireshark抓包验证实际发送的字节流是否符合预期,避免编码转换导致控制字符偏差。
参考配置示意图


内容的提问来源于stack exchange,提问作者Prakash Ranasinghe
相关产品推荐
相关产品推荐

