JMeter-----TCP Sampler(TCP 取样器)

时间:2024-03-29 18:19:14

JMeter 其中TCP测试组件

TCP 取样器通过TCP/IP来连接特定服务器,连上服务器之后发送消息,然后等待服务器回复。

如果“Re-use connection”(重复使用连接) 复选框被选中了,在同一个线程中Samplers(取样器)共享连接,包含相同主机名和端口,不同主机/端口合并将会使用不同线程。如果“Re-use connection” 和 “Close connection”(关闭连接)同时被选中,这个套接字在运行完当前Samplers将会关闭。再下一个Sampler将会另外创建一个新套接字。你可能想要在每次线程循环结束之后关闭套接字。

如果一个错误被检测到或者“Re-use connection” 没有被选中,这个套接字将会关闭,另外套接字将会在接下Samplers被再一次打开。

接下的属性将会应用到控制操作的行为

tcp.status.prefix

用文本来表示前缀的状态数字

tcp.status.suffix

用文本来表示后缀的状态数字

tcp.status.properties

用属性文件名称去将状态码转成消息

tcp.handler

表示处理请求的实现类(默认是TCPClientImpl)-也就是TCPClient classname 这行你没有填写任何东西

这个处理器请求的类已经在GUI配置了,tcp.handler设置的类无效,如果没有找到,它就会去org.apache.jmeter.protocol.tcp.sampler包下找

用户可以提供他自己的实现类,这个类必须要继承org.apache.jmeter.protocol.tcp.sampler.TCPClient父类

下面是就JMeter已经提供的实现类:

  • TCPClientImpl
  • BinaryTCPClientImpl
  • LengthPrefixedBinaryTCPClientImpl

这些实现类有如下的行为:

TCPClientImpl

这是最简单的实现类,如果你设置属性tcp.eolByte的话,它将读取一行字节作为响应,其他的情况是通过读取流的方式,你可以采用平台默认字符编码或者你通过设置属性tcp.charset来设置你想要的编码。

BinaryTCPClientImpl

这个实现类能够转换界面输入字符串为二进制,但是必须是16进制的字符串,读取响应的时候反过来。当读取响应的时候,它会读取到设置属性tcp.BinaryTCPClient.eomByte结束符,否则读取到输入流的末尾。

LengthPrefixedBinaryTCPClientImpl

这个实现类继承BinaryTCPClientImpl,它在BinaryTCPClientImpl前面增加数据长度,它默认有两个字节,当然你也可以通过属性tcp.binarylength.prefix.length进行设置


超时处理:

如果你设置超时,读取流在超时之后会终止,所以当你在使用eolByte/eomByte 确保超时时间设置足够长,否则读取流过早终止。

响应处理:

如果tcp.status.prefix 被定义了,那么它会自动搜索前缀和后缀包裹的文本信息,如果发现了这样信息,它将被用来设置响应码。然而响应信息可以根据响应码从属性文件中读取(如果你提供了属性文件的话)。

举个栗子:

使用前缀和后缀

如果 前缀=“[” ,后缀="]”, 那么接下来的响应

[j28] XI123,23,GBP,CR

将会找到响应码为 j28

响应码在“400”-“499” 和 “500”-“599” 这个两个范围都会被作为失败响应,除此之外都是成功响应码。【你需要自己配置响应码】

登录用户名/密码将不会被用来支持TCP实现。


sockets 在将会在一次测试完之后断开JMeter-----TCP Sampler(TCP 取样器)


接下来上面属性进行描述:


参数解释
属性 描述 必要?
Name 展示在右侧树形列表的名称 默认就有
TCPClient classname 表示处理请求的实现类,默认是TCPClientImpl ,对应属性设置名为tcp.handler 不是
ServerName or IP Port Number 服务器 主机名,ip地址 端口号
Re-use connection 如果选中,这个链接处于保持打开状态,不选中就是读取数据后就关闭
Close connection 如果选中,这个链接将会在运行中取样器之后被关闭
SO_LINGER enable/disable(启用/禁用)SO_LINGER设置特定的值,单位为秒,它线性创建套接字,如果你是设置的值为0,你可以避免大量套接字处于TIME_WAIT (等待状态) 不是
End of line (EOL) by value 表示一行结束符,如果设置值在-128到127之外将会跳过eol 检查,你可以在jmeter.properties文件中增加属性eolByte进行设置,如果你在TCP Sampler Config(TCP 取样器配置)中也设置这个属性,那么TCP Sampler Config 中设置的将会奏效 不是
Connect TimeOUt 连接超时(单位毫秒,0 表示禁用超时) 不是
Response Timeout 连接超时(单位毫秒,0 表示禁用超时) 不是
Set NoDelay 可以参考java.net.Socket.setTcpNoDelay(),如果选中,它将会禁用Nagle's算法(利用缓存功能),反之
Text to Send  发送文本信息
Login User 用户名-它不会使用默认实现 不是
Password 密码-它不会使用默认实现,(N.B.【note well 注意】它在测试计划中采用非加密存储 ) 不是