- 适用场景 -
1. Socket连接,TCP传输
2. 客户端向服务器发送「十六进制格式文件」
3. 特别注意结束符的填写
4、本文重点阐述tcp压测脚本的编写,压测结果如果分析等问题后续分享
-如何配置-
1、基础插件安装不再赘述
2、压测脚本编写
2.1、创建线程组、线程配置
用户数、执行次数、执行时间等根据实际业务场景填写。
2.2、添加TCP取样器
2.3、配置TCP取样器
如下图所示:
1)TCPClient classname:org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
TCPClient classname 该参数一般有三个值设置:
- org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl(以文本编辑器中的纯文本作为内容发送)
- org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl(以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的字节内容进行发送)
- org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl(在BinaryTCPClientImpl基础上默认以发送内容的长度以字节前缀进行填充)
因为我们是16进制报文,所以选择org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl
2)ServerName or IP Port Number:这里输入主机服务器IP地址和端口号
3)Connect:设置连接超时时间。
4)Response:设置响应超时时间。
5)Re-use connection:表示是否重复使用该连接发送请求,如果勾选,表示可以共用一个socket
6)Close connection:表示每次请求后是否关闭socket,如果关闭,则下一个tcp sampler会重新创建socket
7)End of line(EOL) byte value:终止符,表示tcp请求的结束符。只有当客户端在取响应流中读到结束符才会认为本次业务完成,否则一直阻塞,直到流被关闭。
如上图,根据服务器返回值截取最后一个字节,注意16进制,应该是两个字符。那么最后一个字节(8 位)应该是 9b 换算为十进制后为 155( 提供一个换算工具:在线进制转换),因为这个结束符只有在-128到127之间才有效,而我们的结尾字节算出来是155超过了支持的范围,超过范围的计算步骤如下:以十六进制9b,十进制155为例
(1)计算标记位的二进制--10011011
(2)计算该二进制的补码(最高位-符号位为1表示这是一个负数,0表示正数,负数的补码为符号位不变,数据位取反后加1;正数反码、补码是其本身)
10011011的数据位取反为 1 1100100 再加1后为1 1100101(其中最高位1为符号位)
(3)计算步骤2中的数据位1100101的十进制为101,符号位1为负数,因此最终计算结果为-101
3、配置断言、结果查看等
4、以上全部配置完成就可以执行压测了