Jmeter 压测TCP请求步骤

公司需要,这两天苦学了一番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的请求报文里面)
  • 单线程跑通后就可进行高并发测试了,建议再添加一个用表格查看结果的监听器,可以看到每次线程的耗时和响应时间,如果速度慢慢变慢,所设置的并发数已经慢慢靠近系统的瓶颈值了,可以看看服务器的负载均衡,此时负载应该曲线会上升。
  • 5
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值