阅读此wiki 及 开始测试前 请了解Websocket接口基本知识 并 熟读待测Websocket接口文档
场景1: 大量链接的创建和关闭——不断模拟大量用户对Websocket链接的创建、关闭过程。
场景2: 长时间保持大量连接——创建大量链接,保持链接较长时间。
场景3:大量推送消息——可以少量链接较长时间保持,不断触发消息推送
插件地址:https://github.com/maciejzaleski/JMeter-WebSocketSampler
需要的依赖包(参考插件wiki)
jetty-http-9.1.1.v20140108.jarjetty-io-9.1.1.v20140108.jarjetty-util-9.1.1.v20140108.jarwebsocket-api-9.1.1.v20140108.jarwebsocket-client-9.1.1.v20140108.jarwebsocket-common-9.1.1.v20140108.jar以上依赖包可以到http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.1.1.v20140108/ 下载,或自己在网上搜索。(有人整理了依赖包的maven地址:https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/12)
讲下载的插件包、依赖包统统放到 JMeter的 lib\ext 目录下,之后重启JMeter就OK了
添加了插件之后,启动JMeter并创建测试计划后就可以添加WebSocket Sampler了。页面如下图:
添加WebSocket Sampler之后配置相应信息:
Web Server
Server Name or IP:被测 WebSocket服务器的域名或IP
Port Number: 被测WebSocket服务器的端口号。
Timeout
Connection:链接建立的最大超时时间,单位毫秒。如果达到超时时间设置后链接未建立,则sampler失败。
Response:对响应消息的最大等待时间,单位毫秒。到达设定时间后WebSocket链接关闭。
WebSocket Request
Implementation:仅支持 RFC6455(v13)
Protocol:ws——普通的WebSocket链接,或wss——安全的WebSocket链接(WebSocket Secure connection)
Path、同请求一起发送参数、Request Data:与http采样器类似,结合被测接口说明文档来进行配置。
对于测试场景#3,因为不需要建立大量的Websocket连接,我们自己写了简单的HTML页面方便测试和统计。同时用JMeter作为消息推送的trigger来触发大量推送消息的发送,我们的场景是http请求写入信息触发消息推送,也可以通过写数据库等其他方式来触发消息推送。
这里我直接把收到的推送消息数目计算并显示出来,方便压测结束后的结果统计。如果把收到的消息内容打印在页面上,就可以用来做Websocket接口的功能测试了。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title></title> </head> <body> <script type="text/javascript"> var socket; var messageNum=0; if (!window.WebSocket) { window.WebSocket = window.MozWebSocket; } if (window.WebSocket) { socket = new WebSocket("ws://127.0.0.1/push?uniqueId=15b62d64562f000&code=96623930991aa7998e644790804946745dd26c232b754bd4157063d1b7c2364d8ab7816db29e07204e4fa633acdb2829db37d405fb3fa4"); socket.onmessage = function(event) { messageNum = messageNum+1; var ta = document.getElementById('responseText'); ta.value=messageNum }; socket.onopen = function(event) { var ta = document.getElementById('responseText'); ta.value = "连接开启!"; }; socket.onclose = function(event) { var ta = document.getElementById('responseText'); ta.value = ta.value + "连接关闭"; }; } else { alert("您的浏览器不支持 WebSocket!"); } function send(message) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { socket.send(message); } else { alert("连接没有开启"); } } </script> <form οnsubmit="return false;"> <h3></h3> <textarea id="responseText" style="width: 500px; height: 300px;"></textarea> <br> <input type="text" name="message" style="width: 300px" value="websocket连接工具"> </form> <br> <br> </body> </html>
http://www.lai18.com/content/2539681.html
https://www.blazemeter.com/blog/websocket-testing-apache-jmeter