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 在将会在一次测试完之后断开
接下来上面属性进行描述:
属性 | 描述 | 必要? |
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 注意】它在测试计划中采用非加密存储 ) | 不是 |