51Testing软件测试论坛

标题: 【大话性能】一文读懂jmeter的websocket使用,便于后续接口性能测试 [打印本页]

作者: huton_0306    时间: 2018-9-13 10:26
标题: 【大话性能】一文读懂jmeter的websocket使用,便于后续接口性能测试
本帖最后由 huton_0306 于 2018-9-13 10:32 编辑

1、Websocket简介
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,即有效解决了HTTP 协议的一个缺陷(通信只能由客户端发起)。
在以前如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息,这种方式性能比较差,就算在空闲的时候也要消耗资源。利用websocket协议可以解决此类问题。最典型的场景就是聊天室、实时更新状态的系统等。

2、Websocket优势
浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
最主要的2个特点是:
1、数据header很小,传输开销小;
2、server push,服务端也可以主动的推送消息;

3、Websocket性能关注点
性能测试针对不同协议,关注的指标还是会略有不同。对于基于websocket协议开发的系统,性能测试关注点侧重于连接数(可以建立多少个并发连接)和连接处理能力(模拟websocket并发地发消息)。

4、Jmeter添加jar包

默认情况下,jmeter是没有websocket的sample请求的,需要自己去扩展。
高级的jmeter用法或者性能测试技巧,可以参考jmeter和Jenkins的性能测试自动化高级用法
首先,我们需要准备Jmeter的WebSocket协议的支持插件:
JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar
这插件依赖一下几个jar包
1、jetty-http-9.1.2.v20140210.jar
2、jetty-io-9.1.2.v20140210.jar
3、jetty-util-9.1.2.v20140210.jar
4、websocket-api-9.1.1.v20140108.jar
5、websocket-client-9.1.1.v20140108.jar
6、websocket-common-9.1.1.v20140108.jar
我们准备好这些jar包后,把它们拷贝到Jmeter目录的\lib\ext\目录下。

为了便于大家统一下载所以的依赖jar包,我上传到了网盘
公众号大话性能后台回复websocket,即可获取下载jar包的密码。
下载的链接为:https://share.weiyun.com/5KpGmxu


5、组件介绍

[attach]118423[/attach]

1、WebServer

(1)Server Name or IP:WebSocket发送的目标服务器的地址或者名称
(2)Port Number:WebSocker服务器监听的端口号。
2、Timeout:
(1)Connection发送一个连接请求后,Jmeter等待连接完成的最长时间,单位是毫秒。
(2)Response对响应消息的最大等待时间。

3、WebSocket Request
(1)Implementation:只支持RFC6455(v13) ,WebSocket协议标准的最新版。

(2)Protocol:有ws与wss之分, ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己的实际情况填写
(3)StreamingConnection :TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭。
(4)connection id:会话的id标志。
(5)Request data:填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息。

4.WebSocket Response

(1)Response Pattern– 采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭)
(2)Close ConnectionPattern – 如果服务器返回的消息含有这样的字符,就结束会话。
(3)Message Backlog– 定义服务器返回消息保留的最大长度。

6、例子讲解

1、StreamingConnection勾选与否的影响

线程组设置1个并发,循环2次。
2个websocket sample请求都不勾选Streaming Connection
发现每次请求都会opening new connection。
[attach]118424[/attach]


都勾选
发现4个请求都在同一个connection中
[attach]118425[/attach]
[attach]118426[/attach]

因此,当勾选了streaming connection时,不仅会在结束会话后保留连接,而且勾选了的sampler会在有可用连接是直接使用,而没有勾选的sampler即使存在可用连接也会重新打开一个新的连接。因此,如果是要在一个会话中发送多条消息,请勾选这个streaming connection。

2、connection id的设置
Connection id 代表会话的标志,不同的connection会话有不同的id值。
线程组设置1个并发,循环2次。
在2个websocket sample请求中都勾选了streaming connection复用连接,但是connection id填的不同。
结果是websocket sample2会新建一个connection会话,而不是复用websocket sample1的connection会话。

[attach]118427[/attach]

[attach]118428[/attach]

[attach]118429[/attach]


3、response pattern和close pattern的设置
Response pattern是对响应结果的匹配和响应断言配合使用。Close pattern是可以人工的停止会话。

Response pattern的设置
[attach]118430[/attach]
[attach]118431[/attach]
如上websocket sample1的response pattern填的是test:002,而正确的是test:001,故websocket sample1的运行结果就是didn’t match any pattern。若是为空不填,代表什么都可以匹配。
[attach]118432[/attach]



close pattern的设置

在websocket sample1请求中设置close connection pattern为test:001,2个websocket sample都勾选streaming connection,按理说4个请求都应该是复用同一个连接(connection id不设置)。但是由于现在设置了close connection pattern,第一个websocket sample1第一次请求满足了这个条件,就close了session,导致后面的websocket sample没有连接可以复用,报如下错误。


[attach]118433[/attach]
[attach]118434[/attach]
[attach]118435[/attach]

以上就是对jmeter中的websocket中核心设置的讲解,希望以后在做websocket接口或性能测试的时候有帮助。
更多测试的实战技术好文章,可关注公众号大话性能。


作者: huton_0306    时间: 2018-9-14 09:56
新人可以学起来
作者: huton_0306    时间: 2018-9-17 09:48
看先收藏着,以备不时之需
作者: huton_0306    时间: 2018-9-19 09:53
快来讨论
作者: huton_0306    时间: 2018-9-21 10:05
websocket的测试可以了解下
作者: huton_0306    时间: 2018-9-26 09:46
每天学习下
作者: huton_0306    时间: 2018-9-28 10:29
现在尝试用netty去写写websocket
作者: huton_0306    时间: 2018-10-15 09:17
应该不难
作者: huton_0306    时间: 2018-10-16 09:31
111
作者: huton_0306    时间: 2018-10-18 09:39
有人知道更高级的用法么
作者: huton_0306    时间: 2018-10-22 09:38
每天进步一点点
作者: huton_0306    时间: 2018-10-23 09:37
其实还有tcp也是比较麻烦的
作者: huton_0306    时间: 2018-10-24 09:59
111
作者: huton_0306    时间: 2018-10-31 09:05
顶起
作者: huton_0306    时间: 2018-11-1 08:53
333
作者: huton_0306    时间: 2018-11-6 09:10
不同于http协议
作者: huton_0306    时间: 2018-11-7 09:04
web socket用的也越来越多
作者: huton_0306    时间: 2018-11-8 10:07
666
作者: huton_0306    时间: 2018-11-12 09:06
关注下
作者: huton_0306    时间: 2018-11-13 12:29
dingdingding
作者: huton_0306    时间: 2018-11-14 09:07
666
作者: huton_0306    时间: 2018-11-15 09:11
666
作者: huton_0306    时间: 2018-12-4 09:44
6666
作者: huton_0306    时间: 2018-12-5 10:37
6666
作者: huton_0306    时间: 2018-12-11 09:22
666
作者: huton_0306    时间: 2018-12-12 09:25
555

作者: huton_0306    时间: 2018-12-17 10:01
777
作者: huton_0306    时间: 2019-1-2 10:26
666
作者: zhutou225    时间: 2019-8-6 17:55
xiexie
作者: zhutou225    时间: 2019-8-6 17:55
websocket
作者: SmileAngel    时间: 2019-8-29 15:24
Jmeter测试websocket遇到了问题,察看结果树的请求和响应数据都显示为空,请教大神怎么解决呢?(WebSocket在线测试连接正常,取样器路径和参数填写也没问题)WebSocket Sampler取样器请求结果如下:

  1. Thread Name: 线程组 1-1
  2. Sample Start: 2019-08-29 15:11:04 CST
  3. Load time: 25061
  4. Connect Time: 0
  5. Latency: 0
  6. Size in bytes: 0
  7. Sent bytes:0
  8. Headers size in bytes: 0
  9. Body size in bytes: 0
  10. Sample Count: 1
  11. Error Count: 0
  12. Data type ("text"|"bin"|""):
  13. Response code: 200
  14. Response message:

  15. [Execution Flow]
  16. - Opening new connection
  17. - Using response message pattern ""
  18. - Using disconnect pattern ""
  19. - Waiting for the server connection for 5000 MILLISECONDS
  20. - Cannot connect to the remote server
  21. - Waiting for messages for 20000 MILLISECONDS
  22. - Leaving streaming connection open


  23. [Variables]
  24. - Message count: 0


  25. [Problems]


  26. Response headers:


  27. SampleResult fields:
  28. ContentType:
  29. DataEncoding: UTF-8
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2