Jmeter对Web Socket进行压力测试 —— 200人直播课实战经验

20 篇文章 15 订阅
2 篇文章 1 订阅

Jmeter对Web Socket进行压力测试 —— 200人直播课实战经验

最近接到一个任务,是为直播课进行500人压力测试。而我们的上课是通过Web Socket长连接的。之前没有接触过Web Socket,也没要来接口文档。就一点点自己摸索,也算完成了这次任务。

  • Jmeter的WebSocket Sampler
  • Chrome查看WebSocket会话
  • 设计jmx脚本(实战)
  • 开始测试
  • 总结
  • 参考文章

Jmeter的WebSocket Sampler

Jmeter有一个WebSocket采样器插件,需要额外下载。除了JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar还需要6个依赖文件,可以直接从这里下载。 —— [ 沃·兹基索德 ]

1.简单介绍一下Sample Socket组件的界面

1) IP & Port: 访问地址和端口号
2) Timeout (Connection & Response): 连接超时和响应超时时间
3) Protocol: 协议分ws和wss(wss更安全,具体要看你的测试对象使用的是什么协议)
4) Connection Id: 连接ID (*重要!就是通过这个来区分不同会话)
5) Streaming connection: 保持长连接(*重要!不勾选的话,请求成功就会断开连接)
6) Request data: 请求内容
7) Message backlog: 保留返回结果的数量(如果希望只保留最新一条,可以设定为1)

这里写图片描述

2.尝试发起WebSocket请求。
这里有一个第三方开放的接口可供学习使用。网址: https://www.websocket.org/echo.html
当然,我们可以在Jmeter上完成相同的请求。需求是建立2个websocket会话。第1个会话发出3条消息,第2个会话发出2条消息。

1) 添置5个WebSocket Sampler,按照上一步图中内容填好。
2) 将前3个采样器的Connection Id填入1,将后2个采样器的Connection Id填入2
3) 添置监视器,运行后查看结果。

我们可以看到第5个采样器的Message count是2,第4个采样器建立了新的会话,第5个采样器请求时,连接还没中断。
*Jmeter执行完成后,会断开所有连接。
这里写图片描述

Chrome查看WebSocket会话

Chrome就可以查看WebSocket会话,而且十分方便。当然也可以用Fiddler查看WebSocket会话,有兴趣的可以百度一下。但是Web端建议使用Chrome,直观方便。

还是拿刚才的https://www.websocket.org/echo.html做例子。我们用Chrome访问这个网址,然后用以下方式查看ws会话。

1) 按F12调出开发者工具,刷新页面
2) 选择Network
3) 开启筛选器Filter
4) 选择ws,就可以看到WebSocket请求了
5) 点击一个请求,右侧会弹出详细会话
6) Frames里面就是会话Log了

绿色向上箭头是我们发出的,红色箭头是我们收到的。如果你是要做接口测试,而你又没有文档。那你可以通过手动在页面操作,同时观察Frames中的请求内容。然后用Jmeter去模拟请求这些内容。
这里写图片描述

设计jmx脚本(实战)

设计一个能完成需求的脚本。

测试方案:

a) 用一台负载机分别模拟,无学生、50个学生、100个学生、200个学生同时上课的情况。如果结果可以接受,继续增加上课学生。
b) 用一台客户机分别登录老师和单个真实学生,查看课堂情况。
c) 监控服务器资源占用情况。(本次教程不涉及)

实现方案:

a) Jmeter 发起Web Socket请求,最基本连接请求外,额外学生发言一次,并且每25秒循环请求一次保持长连接。

1.根据刚才学到的用Chrome可以看到WebSocket会话方法。我获取到学生进入直播课WS接口最基本的3个东西。

1) 协议&地址&端口&query参数组成的URL
2) Headers头信息

这里写图片描述

2.新建一个Jmeter脚本,添加HTTP信息头管理器和WebSocket Sampler。然后填入基本信息。

1) 头信息可以直接从Chrome全复制下来一键粘进HTTP信息头管理器。
2) URL填入这几个地方。

这里写图片描述

3.其实这个时候应该就可以正确建立连接了。但是我们希望学生上课,要传达这个信息给服务器。就需要传入请求参数。
其实不难发现,进入教室就是红框里的三个绿色箭头,也就是说我们要上课,至少要请求3次。之后的绿色箭头判断下来请求内容无实际意义,作用之后会提到。
这里写图片描述

4.将WebSocket Sampler 复制3个,分别把Chrome里三次请求的请求内容填进去。这样一个基本的ws脚本就构成了。
这里写图片描述

5.当时写完这个我请求了一次是ok的。但是jmx脚本执行完成后,学生就掉线了。也就是说需要jmx脚本一直不停的执行下去。
这里写图片描述

6.之前Chrome中有一些红框外的绿箭头,之前介绍过WebSocket有一个超时机制,我们可以看到这些请求之间都恰巧间隔25秒(这里截图没截好)。我们需要模拟这个动作,来保证长连接不会断开。也就是就算什么都不做,也每隔25秒请求一次。
这里写图片描述

7.同时我发现,200个学生,用5个线程20个循环跑是不不正确的。因为1个线程的多次循环代表一个线程的生命周期里先后代表了个多个学生,但是一个学生执行完后就会退出,所以不正确。所以需要200个线程,同时每个线程加定时器后不断循环。
这里写图片描述

8.最终脚本设计如下

a) 线程组设定线程数50、100、200,循环为1。
b) 用户参数前置处理器 生成区分不同学生的id、name、Connection Id。注意勾选"每次迭代更新一次"。
c) 1-5 2-5 3-5 是进入教室的基本请求
d) 4-5 是学生发言(手动浏览器发言一次,获取到发言操作的接口请求内容)
e) 循环控制器勾选永远。
f) 5-5 在循环控制器下的循环,并设定定时器,间隔25秒。

这里写图片描述

9.最终实现目标
这里写图片描述

开始测试

使用负载机执行脚本。使用客户机登录老师和学生,分屏查看双方音画和聊天的延迟情况和卡顿情况。

由于时间关系就不展开了。

总结

在昨天之前,我还完全没接触过Web Socket。所以起初接到这个任务是一脸懵逼的。不过通过查找教程和学习原理,最终还是实现了。所以记录一下学习过程和学习方法。

我的学习过程如下:

a)百度WebSocket介绍 关键词
b)百度Jmeter WebSocket 关键词
c)百度WebSocket 抓包 关键词
d)整合资料,根据第三方开放接口写Demo(如果本地可以模拟服务端,也可以使用Mock测试方法)
e)运用到项目上,写一个Demo,加上参数化
f)设计满足需求的测试脚本
g)读取数据库,并保存用户信息到文件,实现一个复用性高的测试脚本。

仍然存在的问题:

a)运用csv参数化用户信息或_csvRead函数都会卡住,还没解决。但是本次测试用id累计曲线救国了。
b)有时WebSocket会掉线,比如请求了200个学生,但最终会掉线十几个。原理还不清楚。

参考文章

原来你是这样的Websocket–抓包分析
https://blog.csdn.net/zara0830/article/details/80380873

Jmeter进行webSocket接口测试
https://www.cnblogs.com/penghaihang/p/7724830.html

  • 16
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
JMeter可以用于进行直播压力测试。在进行直播压力测试之前,需要先分析业务场景和测试需求,并编写相应的测试用例。一个常见的场景是模拟多个用户同时登录直播间并发送消息进行聊天,观察直播间的画面和视频是否卡顿,以及服务器的性能变化。可以设置不同数量的用户同时在线,观察系统的响应时间和吞吐量等指标。 在进行直播压力测试时,可以使用JMeter的线程组来模拟多个用户同时登录直播间,并设置相应的并发数和循环次数。可以使用HTTP请求来模拟用户发送消息进行聊天,并设置相应的参数和请求头。通过监控服务器的性能指标,如CPU使用率、内存占用等,可以评估系统的性能和稳定性。 需要注意的是,直播压力测试需要根据实际情况进行调整和优化,包括并发数、循环次数、消息发送频率等参数的设置,以及服务器的配置和网络环境的模拟。同时,还需要对测试结果进行分析和评估,以便发现潜在的性能问题并进行优化。 参考资料: \[2\]中提到的CSDN博文《JMeter压力测试实战之直播压测》可以提供更详细的步骤和示例代码,可以参考该博文进行具体操作。 #### 引用[.reference_title] - *1* [经常看直播,你知道如何用jmeter直播进行压力测试吗?](https://blog.csdn.net/TestNewton/article/details/128562664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [还在看美女直播跳舞,过时啦老夫反手就是一波用jmeter直播间做压测](https://blog.csdn.net/m0_60054525/article/details/121066758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值