阅读此wiki 及 开始测试前 请了解Websocket接口基本知识 并 熟读待测Websocket接口文档

Websocket接口性能测试的场景

场景1: 大量链接的创建和关闭——不断模拟大量用户对Websocket链接的创建、关闭过程。

场景2: 长时间保持大量连接——创建大量链接,保持链接较长时间。

场景3:大量推送消息——可以少量链接较长时间保持,不断触发消息推送

测试方法及测试工具

JMeter

下载插件及依赖包

插件地址:https://github.com/maciejzaleski/JMeter-WebSocketSampler

需要的依赖包(参考插件wiki)

  • jetty-http-9.1.1.v20140108.jar
  • jetty-io-9.1.1.v20140108.jar
  • jetty-util-9.1.1.v20140108.jar
  • websocket-api-9.1.1.v20140108.jar
  • websocket-client-9.1.1.v20140108.jar
  • websocket-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了

添加及编辑WebSocket Sampler

添加了插件之后,启动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采样器类似,结合被测接口说明文档来进行配置。

自己写的html页面

对于测试场景#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

Websocket接口性能测试方法相关推荐

  1. WebSocket接口测试方法

    文章目录 WebSocket介绍 HTTP与WebSocket的区别 WebSocket测试方法 使用在线工具 使用Postman 使用Jmeter 使用Python WebSocket介绍 WebS ...

  2. 使用JMeter测试WebSocket接口

    因为我之前对WebSocket接口也不是很了解,所以本篇文章先简单的概括的说明一下WebSocket的相关概念.在文章的后半部分,进行测试WebSocket接口的步骤说明. 1.什么是WebSocke ...

  3. java 测试代码效率_JAVA程序的性能测试方法

    JAVA程序的性能测试方法 Java 1.5以上都在虚拟机里内建了程序性能跟踪的功能,并提供了Java Profiling API,简称JPA,你可以搜索'java profiling'.Java也提 ...

  4. 性能测试理论(一)之性能测试方法与流程

    性能测试方法 一.正确理解性能测试 1.1.性能测试: 1.2.不符合需求的情况下: 1.3.常见误区: 二.什么时候需要做性能测试 2.1.什么时候需要做? 2.2.能力验证 2.3.验收性 2.4 ...

  5. 微信小程序软件测试junit,微信小程序兼容性能测试方法

    本文为微信小程序兼容.性能测试方法介绍. 兼容 操作系统兼容 由于小程序依赖微信客户端本身,因此理论上来说只要微信客户端兼容的小程序应该都可以兼容,这里推荐覆盖Android和iOS主流版本系统即可, ...

  6. android性能测试方法

    [Android应用]性能测试方法 前言 Android设备的性能测试涉及面较广,且机型较多,所以Android设备的性能测试先天就是比较复杂的.此文力图以最简洁.最直接的方式阐述Android应用性 ...

  7. WebSocket接口初体验

    前言 这两天在调试一个WebSocket的接口,折腾了一天的时间终于弄好了.现在对WebSocket的相关知识点做一个记录.主要从如下几个方面进行介绍. WebSocket的概念 HTTP请求是基于请 ...

  8. 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器

    1. 一种交易系统的性能测试方法,其特征在于,包括: 性能测试服务器发送N条性能测试交易至应用服务器,其中N>0; 所述性能测试服务器接收所述应用服务器发送的监测报告,所述监测报告为所述应用 服 ...

  9. 细说接口性能优化的11个小技巧

    前言 接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题. 该问题说简单也简单,说复杂也复杂. 有时候,只需加个索引就能解决问题. 有时候,需要做代码重构. ...

最新文章

  1. 唠唠SE的集合-10——Collections工具类
  2. gsoap写一个c++ webservice
  3. Java中的运算神器 BigDecimal,了解一下?
  4. arthas命令列表查阅文档地址
  5. TypeScript 里的枚举类型 enum
  6. Vue.js 入门案例
  7. 12306订票助手秘笈:2013春节我要回家
  8. 玩玩直播,搭建一个流媒体服务器
  9. python快速查城市的地理坐标
  10. SPSS基础教程—怎样对数据进行综合评价排名
  11. c语言程序 随机抽取试卷,试题自动提取系统的设计与实现
  12. QTreeView+自定义Model实现示例
  13. 高效能人士的七个习惯-第二章-阅读
  14. MySQL全文索引及其优劣
  15. python解析库 爬虫_Python-爬虫-解析库(Beautiful Soup)的使用
  16. 马铃薯淀粉生产线的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 【VUE项目实战】51、商品添加功能(一)
  18. 虚拟存储器和cache的异同
  19. 计算机 蓝牙鼠标卡顿,win系统蓝牙鼠标经常出现卡顿的解决方法
  20. 怎么把PDF文件拆分开来?教你两种拆分方法

热门文章

  1. TensorFlow 2.x
  2. Angular--使用Angular get 请求数据
  3. 一个普通男人眼中的不错的男人
  4. rabbitmq shovel插件
  5. 第五课—大学英语四六级备考—听力专项
  6. Sersync和lsyncd实现数据实时同步
  7. 散列表分析(Java实现)
  8. input只读属性 设置和移除 选择数字
  9. 链式前向星(详细讲述)
  10. 如何用ChatGPT协助做内容分发?(文本变成直播/音频/视频脚本)