当前位置:   article > 正文

Jmeter 压测TCP请求步骤_jmeter error reading from server, bytes read: 2474

jmeter error reading from server, bytes read: 2474

公司需要,这两天苦学了一番jmeter的tcp压测,现在回头想想挺简单的,以此记录一下,方便以后查看

1.什么是TCP请求?

该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。

2.如何进行在jmeter上进行tcp请求进行压力测试?

第一步新建一个线程组,根据需要设置线程数,时间和循环次数,建议没调通之前都设置为1;我设置的是一有错误立即停止测试。

第二步:新建一个tcp取样器,这里是能否调通的关键

填入ip和端口后,文本填写是关键,网上好多说的不明了,文本是你要传输的报文体,一般tcp的报文体是有带报文头的,也就是规定的报文长度,如果不知道的情况下可以找开发确认。我试过用文本格式填写报文体,但每次都会报Response message: org.apache.jmeter.protocol.tcp.sampler.ReadException: Error reading from server, bytes read: 0,请求是会请求到服务器,但是文本读不出来,会返回刚刚说的那个错。这个问题主要用字符串转换成十六进制能解决这个问题。

jmeter有提供三大类给我们

 

  • TCPClientImpl 默认文本传输,这个很容易出现刚刚说的问题
  • BinaryTCPClientImpl 这个是十六进制传输,但是我用这个的时候,会出现前缀报文长度读不出来的情况,服务器有数据返回,解析不出报文体长度,导致取样结果输出失败
  • LengthPrefixedBinaryTCPClientImpl 它在BinaryTCPClientImpl前面增加数据长度,它默认有两个字节,下面重点介绍怎么设置这东西的打开jmeter的属性设置文本,把tcp.handler=TCPClientImpl 改成 tcp.handler=LengthPrefixedBinaryTCPClientImpl,报文体长度如果是两位数他会自动识别,不需要把报文长度放到文本中去发送;如果是大于两位数的,直接在jmeter的属性文本中改下默认值就好了
  • 以下是成功返回的样式
  • 响应返回的也是16进制的串(如果知道前两位报文头,开发给的报文头后面是正常的文本格式的请求的话,可以用网上十进制转16进制的转换器,转换完成再把十六进制的报文放到TCP Sample的请求报文里面)
  • 单线程跑通后就可进行高并发测试了,建议再添加一个用表格查看结果的监听器,可以看到每次线程的耗时和响应时间,如果速度慢慢变慢,所设置的并发数已经慢慢靠近系统的瓶颈值了,可以看看服务器的负载均衡,此时负载应该曲线会上升。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/911700
推荐阅读
相关标签
  

闽ICP备14008679号