Jmeter.TCP取样器
##需求:公司需要做一个模拟设备,模拟发送报文,要求是先发一个签到报文,然后再发送正文。后续还有要从上一个报文取数据拿到下一个发送报文。
先介绍一下tcp取样器的界面,上面红色圈起来部分是我要讲的。
名称,注释:
顾名思义就不讲了。。
TCPClient classname:
这是重点,这代表了你发出去的TCP报文是什么格式的,Jmeter自己提供的是实现了三类:
TCPClientImpl:
这是最简单的实现类,就是基础的文本,可以设置他的编码格式。一般用来发json串。
BinaryTCPClientImpl:
这是我要重点说的,这个是用来发送十六进制报文的时候,在classname里设置成BinaryTCPClientlmpl,他能将十六进制报文转换成二进制,然后读取响应的时候又反过来。
LengthPrefixedBinaryTCPClientImpl:
这个类是实现了BinaryTCPClientImpl类,所以继承了所有功能,它在BinaryTCPClientlmpl前面增加两个字节数据长度。
服务器名称或ip,端口号:
这个也是顾名思义,就是填你要发送报文的地址,相当于你发快递填的收货人。
超时:连接,响应:
这个挺重要的,它决定了在你没有输入End of line 的时候,什么时候断开tcp连接。
##超时会报500错误,如果你没有设置End of line的话,会在读取流的时候无限阻塞,直到超时,报500错误
##解决方法:设置End of line(后面直接称eol),eol是文本结束符,是说的返回的响应数据最后一位。
如果没有填写的话就会一直在这里,直到超时。
##我自己的话,因为需要不一样,我是直接下载tcp源码去编译,然后改内部的函数,让他不报错。对了,要注意的一点是,就算你勾选了Re-use connection,如果一旦报错的话,还是会把TCP连接给断掉的。在下一个取样器再重新新开一个tcp连接。我后面就需要在一个tcp长连接里发送多个不同的报文,所以需要自己在函数里改掉不报错。
close connection:
如果你勾选的话,一个取样器就只会用一个tcp连接,也就是你发送完报文以后,就关闭tcp连接。
Re-use connection:
如果勾选的话,就代表,在一个线程里,复用一个连接,在要求TCP长连接的时候需要用到这个。
发送文本:
顾名思义也就是报文了。
我自己改的地方是:
它这里就是如果发生读取流超时或者其他错误的时候,是会在第二个参数传一个ReadException进去的,但是我就自己把它改成了null,这样的话就不会报错了。主要因为我的报文是不固定的,所以不能确定结束符是什么,所以只能这样改。