之前,写了一篇关于WebSocket的文章,主要解决的问题是,连接聊天室成功后,学生并未成功登录到指定的频道。就像你打开了电视机,但是没有办法换到CCTV5频道去看某场体育直播。
hqbluesky:Jmeter之WebSocket使用zhuanlan.zhihu.com后面,我在做全链路压测的时候,从用户登录-获取学分-获取聊天室凭证-登录聊天室-发送弹幕和礼物-退出登录。在并发10-20个用户的时候,所有的接口都是可以100%的成功;但是,当并发用户达到100的时候,就只能有50%的成功率,我连续尝试了3次,每次的结果都是一样。这时候,我就开始纳闷了,这到底是为什么?我还差了哪些步骤?
我的第一反应是,是否是缺少连接的保持,导致最后发送礼物的时候失败了?我看到浏览器中,websocket心跳保持结果是这样的:
![5f4a0a6a580a37694fb88a5bfb2f3424.png](https://img-blog.csdnimg.cn/img_convert/5f4a0a6a580a37694fb88a5bfb2f3424.png)
当你没有发送消息的时候,客户端会先发送[2]个服务端,服务端收到请求后,返回[3]给客户端,这样,整个连接就保持了;当在约定的时间内,例如:3分钟没有任何的消息发送,整个websocket连接就断开了
那么,你就需要新建一个websocket request-response sampler,格式如下:
![0030a1966eeb8c5658d6a01b227ef233.png](https://img-blog.csdnimg.cn/img_convert/0030a1966eeb8c5658d6a01b227ef233.png)
接着,根据文档的约定,心跳的连接是每一秒发送一次,那么就用到了jmeter另外一个控件,[Constant Timer],格式如下:
![59f385dbbd72e87614a12900f7eb5d04.png](https://img-blog.csdnimg.cn/img_convert/59f385dbbd72e87614a12900f7eb5d04.png)
最后,你要保持整个心跳机制,不能让这个机制在压测结束前就停止了,那么就再用到jmeter的另外一个控件,[Loop Controller],假设,你是要测试200个并发用户,那么,这里就要设置成200,保证所有的用户登录到指定聊天室,格式如下:
![7a4b3f21eb4a4c73b0dbfadb8bea4553.png](https://img-blog.csdnimg.cn/img_convert/7a4b3f21eb4a4c73b0dbfadb8bea4553.png)
在Test Plan这边看到的结构就是:
![a95fb42f469b3019cda7c6ef966e8ee9.png](https://img-blog.csdnimg.cn/img_convert/a95fb42f469b3019cda7c6ef966e8ee9.png)
我们的接口sendRewardMsg先调用,然后通过心跳保持,会调用3rd party的发送礼物接口,完成整个压测链路的测试。
当心跳保持功能添加完成后,100个并发用户运行,所有接口调用都实现了100%的成功,问题再次完美解决。