如何使用 JMeter 对 TCP 协议的服务进行负载测试

如何使用 JMeter 对 TCP 协议的服务进行负载测试,第1张

1.建立一种类型测试

这里只描述简单的tcp测试建立步骤,因为目前支持的测试类型很多,无法一一陈述,功能细节部分可以参考JMeter文档

1)创建测试线程组

2)根据需要设定线程组参数

3)建立TCP采样

3)配置TCP采样参数

基本上一个简单的测试计划就完成了,点击运行采样,就会将文本发送出去。

2.高级功能配置

1)配置结果查看监听器

有时候需要查看线程组执行结果情况,这个可以通过设定采样结果查看

针对上面配置的线程组应该执行6次,也就是发送6条消息,通过监控器可以看到的确有6个采样结果,说明执行成功

2)配置变量

有时候需要在报文中加上一些变化的内容,可以通过在文本中增加变量设定来实现

如增加一个变量名 bank, 其值为 1111,在前面发送的报文中加上${bank}即可引用,如

执行之后就可以在监控器中看到报文中有1111了

3)配置TCP 二进制报文

大多数情况下,报文可能非纯文本形式,常常都是不可读的二进制,所以这种情况下需要配置二进制报文。当前JMeter支持HEX形式,也就是16进制的报文输入配置

参考: https://wiki.apache.org/jmeter/UserManual/Reference/TcpSampler

当前支持三种格式 1.TCPClientImpl(默认) 2.BinaryTCPClientImpl 3.LengthPrefixedBinaryTCPClientImpl

使用二进制方式需要做如下几件事:

a.把普通文本报文翻译成HEX格式,可以找文本编辑器做这件事。比如notepad++,打开文本文件

Ctrl+A全选内容,paste到一个新文件,替换掉所有空格

3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e

如果报文还需要加上头的话,需要额外计算一下。比如增加一个command id和报文长度。比如上文中文本长度在编辑器状态栏上显示155长,假定command id是1.

System.out.println("155 hex " + Integer.toHexString(155)) --- 9b

System.out.println("1 hex " + Integer.toHexString(1)) ---1

如果command id是4个字节那么16进制字符串就是 00 00 00 01

如果length也是4个字节那么16进制字符串就是 00 00 00 9b

去掉空格加入到前面报文中就拼成如下新报文

000000010000009b3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e

再把新报文放入发送字符串输入框中。

b.修改JMeter启动配置,就是前文提到的指定BinaryTCPClientImpl适配

在jmeter.properties文件中找到如下部分,修改一下

#---------------------------------------------------------------------------

# TCP Sampler configuration

#---------------------------------------------------------------------------

# The default handler class

#tcp.handler=TCPClientImpl

tcp.handler=BinaryTCPClientImpl

重新执行TCP测试,可以看到服务器端正常收到报文,如图

jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求。

TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应。

jmeter模拟发送TCP请求的方法:

1.新建线程组,然后在线程组中新建TCP采样器

TCP采样器中填写服务器地址、端口和“要发送的文本”,其它选项根据需要选填:

re_use connection表示重复发送连接请求

close connection 关闭连接

如果TCP请求需要用户名/密码,可以在登录配置中填写

2.新建“察看结果树”监视器,查看发送的请求和响应的结果。如果需要发送16进制报文这个地方会失败。

jmeter发送16进制TCP报文的方法:

很多TCP服务器报文为16进制,并且多数不能转换成文本发送,而jmeter默认发送文本。

jmeter.properties中修改tcp.handler=BinaryTCPClientImpl ,启动jmeter重新发送,抓包查看既是16进制的tcp报文。

另一个方法:可以在工作台新建–非测试元件–Property Display,Property Display中修改jmeter.properties只对当前进程有效。

1 可以用专用工具测试,例如:

Netperf(www.netperf.org):网络性能测试。主要针对基于TCP或

UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data

transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统

发送数据,以及另外一个系统能够以多块的速度接收数据。Netperf工具以client/server方式工作。

server端是netserver,用来侦听来自client端的连接,client端是 netperf,用来向server发起网络测试。

2 自己写代码测试,参考:

http://kmplayer.iteye.com/blog/673226。

腾讯WeTest出品的线上服务器压力测试服务WeTest服务器压力测试http://wetest.qq.com/gaps/最高可至亿级并发,实时查看性能数据报表,专家级性能优化建议

对于简单接口测试和评估容量的,只需要输入url和配置下人数的参数,就可以在一两分钟内快速发起压力。

我们通常要分析的性能数据像TPS,在线人数,事务数,网络吞吐,CPU,内存,磁盘IO等性能报告里都有。报告是可视化的图表形式展现的。

亦可以自己编写机器人,深度结合自身业务场景进行压测。

其他简单的协议测试或是稳定性测试,也可满足。

压测本身是个高要求的工作,很多人还只知皮毛,对压测原理和应该达到什么效果不得而知,因此能力的提升也很重要,可以善用他们的社区,并关注定期举行的公开课培训

望采纳!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/452838.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-02
下一篇2023-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存