本帖最后由 huton_0306 于 2018-10-24 09:58 编辑
现在jmeter的版本都已经更新到了5.0,不知道你还在用什么版本的。平时大家测试最多的协议应该就http,
然而如果你经常和一些硬件测试打交道,那么tcp的测试,可能就会有需要,今天就讲讲如何利用jmeter进行
tcp的脚本编写。
1、tcp取样器
jmeter的tcp sample的含义如下。其中加粗的是需要重点理解的。
TCPClient classname: 缺省的org.apache.jmeter.protocol.tcp.sampler。TCPClientImpl, TCPClient只能实现基于文本格式的套接字应用的测试。 随JMeter提供的还有另外的两个实现,分别是BinaryTCPClientImpl和LengthPrefixedBinaryTCPClientImpl,用于处理二进制格式的数据, 后文将对这两个做详细的介绍,想要获取完整的jmeter的tcp脚本见下面的链接。
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。 EOL是与读数据相关的,就是设定来自于服务器数据流的一个结束标识字节。没有设置EOL将会一直读到输入流结束为止。 这里值得注意的是,这是个十进制的值(千万不要写成hex),比如你可以查询ASCII表,来确认一个表示结束字符的十进制值. 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、tcp测试的2个核心点
关于Jmeter的TCP测试,需要明确两个问题: 第一、发送给服务器的数据格式,是文本形式还是十六进制格式; 第二、一条数据的结束符是什么; 问题1涉及到到底用哪个TCPClient classname去发送数据。 问题2涉及发送给服务端的数据,服务端是怎么判断客户端发送结束;服务端返回给客户端的数据,客户端如何知道服务端已经发送结束。 所以这就有客户端读数据的结束符号和服务端读取数据结束符号2个。
上面这些如果你不清楚的话,是需要你和开发去确认的。
|