版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oShiShuiNianHua1234/article/details/79257353
1.tcp取样器相关知识:
使用JMeter对套接字进行测试,有以下的选项可以做控制:
- TCPClient classname: 缺省的org.apache.jmeter.protocol.tcp.sampler。TCPClientImpl, TCPClient只能实现基于文本格式的套接字应用的测试。随JMeter提供的还有另外的两个实现,分别是BinaryTCPClientImpl和LengthPrefixedBinaryTCPClientImpl,用于处理二进制格式的数据,后文将对这两个做详细的介绍。
- ServerName or IP: 套接字服务器应用的地址
- Port Number: 套接字服务器应用的端口
- Re-use connection: 如果选中,连接会一直处于打开状态,否则读取到数据之后就关闭
- Close connection: 如果选中,在TCP Sampler运行完毕之后就会被关闭
- SO_LINGER:该配置项用于控制在关闭连接之前是否要等待缓冲区中的数据发送完成。如果SO_LINGER选项指定了值,则在得到关闭连接的请求之后还会等待指定的秒数以完成缓冲区中数据的发送,在指定的SO_LINGER秒数完成后,关闭连接。因此,如果你把该选项设置成0,那么所有连接在收到关闭连接的时候都会立即关闭,避免产生很多处于TIME_WAIT状态的套接字。
- End of line(EOL) byte value:判断行结束的byte值,如果你指定的值大于127或者小于-128,则会跳过EOL检测。比如服务器端返回的字符串都是以回车符结尾,那么我们可以将该选项设置成10。
- Connect Timeout:与服务器套接字应用连接超时时间(毫秒)。
- Response Timeout:响应超时时间(毫秒),这个值的设置跟End of line(EOL) byte value有关系,如果End of line(EOL) byte value中的值设置不正确,会导致JMeter一直在等待无法结束,但是如果指定了Response Timeout这个值的话,在到达这个值的时候就关闭连接。
- Set NoDelay:是否使用Nagle算法,是否需要使用该选项,需要跟实际的业务情况结合。
- Text to Send:发送的文本,跟“CSV dataset config”一起使用能够从文件中直接读取。
- Username和Password:这两个选项在TCP相关的Sampler中都未使用,请忽略这两个选项。
2.关于Jmeter的TCP接口测试,需要明确两个问题:
第一发送给服务器的数据格式,是文本形式还是十六进制格式;
第二一条数据的结束符是什么;
3.明确问题1后对Jmeter进行配置
(1).修改JMeter启动配置,就是前文提到的指定BinaryTCPClientImpl适配
在jmeter.properties文件中找到如下部分,修改一下
#---------------------------------------------------------------------------
# TCP Sampler configuration
#---------------------------------------------------------------------------
# TCP Sampler configuration
#---------------------------------------------------------------------------
# The default handler class
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
关于tcp.handler,jmeter支持的有三种模式:
根据要发送的数据格式选择对应的classname
(2)设置结束符--->如果不设置,tcp会以流的形式,一直读取,直到超时,报500错误
源码如下:
只有读到了结束符,才会break出来;
若以文本形式发送,且以\n作为结尾,EOL配置为10,文本添加换行符
4.若服务器接到的数据没有结尾符时,需要对Jmeter进行二次开发,覆写TCPClient classname,来满足测试的要求,请参考另一篇博客Jmeter TCP socket接口测试(二)