『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口
因为我之前对
WebSocket
接口也不是很了解,所以本篇文章先简单的概括的说明一下WebSocket
的相关概念。在文章的后半部分,进行测试WebSocket
接口的步骤说明。
1、什么是WebSocket接口
WebSocket
是一种网络通信协议。
我们在上网过程中经常用到的是HTTP和HTTPS协议,HTTP协议和HTTPS协议的通信过程,通常是客户端通过浏览器发出一个请求,服务器按受请求后进行处理并返回结果给客户端,客户端接收响应的结果。
这种机制对于信息变化不是特别频繁的应用,可以良好支撑。但对于实时信息要求高、海量并发的应用来说,显得捉襟见肘。尤其在移动互联网蓬勃发展的趋势下,高并发与用户实时响,应是Web应用经常面临的问题。比如金融证券的实时信息、社交网络的实时消息推送、网络直播等。
Websocket
通信协议出现前我们实现推送技术,用的都是轮询,在特定的时间间隔,浏览器自动发出请求,将服务器的消息主动的拉回来。这种情况下,我们需要不断的向服务器发送请求,这样会占用很多的带宽和服务器资源,并且服务器不能主动向客户端推送数据。在这种情况下需要一种高效节能的双向通信机制,来保证数据的实时传输,于是基于HTML5规范的WebSocket
网络通信协议应运而生。
WebSocket
是类似Socket的TCP长连接通讯模式。一旦WebSocket
连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket
连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发,及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。
2、为什么需要WebSocket
初次接触 WebSocket
的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什么好处?
答案很简单,因为HTTP协议有一个缺陷:通信只能由客户端发起。
举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP协议做不到服务器主动向客户端推送信息。
这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询",每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源。因此,工程师们一直在思考,有没有更好的方法,WebSocket
就是这样发明的。
WebSocket
的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
WebSocket
是双向的,在客户端和服务器通信的场景中使用的全双工协议,与HTTP
不同,它以ws://
或wss://
开头。它是一个有状态协议,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止,WebSocket
连接才从两端终止。
3、测试WebService接口前的准备
在JMeter中测试WebSocket
协议的接口,需要先安装WebSocket
插件和依赖包。
打开JMeter中的插件管理器:选项 —> Plugins Manager
。
提示:没有安装JMeter插件管理器的,请点击后面文章链接:【JMeter插件管理器的安装与使用】
打开JMeter插件管理器后,点击Available Plugins
选项页,在搜索框中输入WebSocket
,然后选择安装WebSocket Sampler by Maciej Zaleski
插件。
我们可以从上图中看到在插件的说明中,该插件包含websocket-api.jar
、websocket-common.jar
、websocket-client.jar
、jetty-http.jar
、jetty-io.jar
、jetty-util.jar
这6个JAR包。
这些JAR包可以使JMeter中的取样器,发送支持WebSocket
协议的请求。
如下图所示:
提示:安装完
WebSocket Sampler by Maciej Zaleski
插件后需要重启JMeter。
4、WebSocket Sampler组件界面详解
WebSocket Sampler
组件添加方式:选中“线程组”右键 —> 添加 —> 取样器 —> WebSocket Sampler
。
界面如下图所示:
针对界面中各选项说明:
- 名称:
WebSocket Sampler
组件的自定义名称,见名知意最好。 - 注释:即添加一些备注信息,对该
WebSocket Sampler
组件的简短说明,以便后期回顾时查看。
(1)WebServer
Server Name or IP
:发送请求的目标服务器的IP地址或者域名。Port Number
:服务器地址后的端口号,有则填写,没有不用填写。
(2)Timeout (milliseconds)
Connection
:链接建立的最大超时时间,单位毫秒。如果达到超时时间设置后链接未建立,则sampler失败。Response
:对响应消息的最大等待时间,单位毫秒。到达设定时间后WebSocket链接关闭。
(3)WebSocket Request
Implementation
:只支持RFC6455(v13) ,WebSocket协议标准的最新版。Protocol
:有ws
与wss
之分。ws
前缀是WebSocket连接的辨别标识,wss
前缀是WebSocket安全连接的辨别标识。根据自己需要访问接口的实际情况填写。Content encoding
:内容编码。有中文推荐编写UTF-8。Connection Id
:连接ID。Path
:访问接口的路径。Ignore SSL certificate errors
:忽略SSL证书错误。Streaming connection
:选择TCP session
要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么第一次响应后该链接就会被关闭。
(4)同请求一起发送参数
- 可以填写key-value形式的参数。(发送了好像不太好使,请求参数还是填写在下面的
Request data
中吧) Request data
:填入同请求一起发送参数,与HTTP采样器类似,结合被测接口说明文档来进行配置。
(5)Web Socket Response:接口响应相关设置
Response pattern
:采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭)Close connection pattern
:如果服务器返回的消息含有填写的字符,就结束会话。Proxy Server (currently not supported by Jetty)
:编辑代理服务器信息代(当前不支持Jetty)
Server Name or IP
:服务器IP地址或域名。
Port Number
:端口号。
Username
:用户名。
Password
:密码。Message Backlog
:定义服务器返回消息保留的最大长度。
5、使用JMeter测试WebSocket接口示例
我们请求一个WebSocket
接口为例,进行演示。
访问地址:echo.websocket.org
。
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组中,添加取样器
WebSocket Sampler
组件:选中“线程组”右键 —> 添加 —> 取样器 —> WebSocket Sampler
。 - 在线程组中,添加监听器“察看结果树”组件:
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)WebSocket Sampler组件内容
就和编辑HTTP请求一样,编写必要的请求信息和请求数据即可。
编辑WebSocket
接口内容,如下图所示:
(3)运行查看结果
结果如下图所示:
说明使用JMeter成功发送WebSocket
请求并且得到了响应。
参考:
『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口的更多相关文章
- 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口
目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...
- 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口
目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)
目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
- 『动善时』JMeter基础 — 2、JMeter的安装和启动
1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...
- 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置
目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解
目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...
随机推荐
- Matlab将数据存为文本文件
dlmwrite :将一个矩阵写到由分隔符分割的文件中. 在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便).于是要保存此类数 ...
- BUAA OS实验调试指南:从看懂到看开
一般的调试流程其实很简单:发现问题,稳定复现,确定临界条件,定位问题,修复问题,核查结果.迭代这个过程,形成一个闭环 老实说,OS的实验代码,开箱体验极差,程序跳来跳去,进了Lab4后还要考虑内核态切 ...
- 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用
基于Linux命令行KVM虚拟机的安装配置与基本使用 https://alex0227.github.io/2018/06/06/%E5%9F%BA%E4%BA%8ELinux%E5%91%BD%E4 ...
- 绿色版 notepad++ 添加鼠标右键菜单
建立一个后缀为 .reg 的注册文件,拷贝以下内容并替换相关路径,保存病双击文件运行加入注册表. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ ...
- 学习android开发的一些笔记
一:UI开发 由于我们使用了android:layout_weight属性,此时控件的宽度就不由android:layout_width来决定了,这里指定成0dp是一种比较规范的写法. android ...
- java并发编程工具类JUC第三篇:DelayQueue延时队列
DelayQueue 是BlockingQueue接口的实现类,它根据"延时时间"来确定队列内的元素的处理优先级(即根据队列元素的"延时时间"进行排序).另一层 ...
- JVM-运行时数据区之PC寄存器
1.运行时数据区图 运行时数据区是在类加载完成后所经历的阶段,当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,执行引擎就 ...
- Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
前话 Qt的图形视图框架,最核心的三个类为:QGraphicsScene.QGraphicsItem与QGraphicsView. 基于图形框架的高级白板软件Demo QGraphicsSce ...
- CVPR2020论文解读:手绘草图卷积网络语义分割
CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...
- NVIDIA CUDA-X AI
NVIDIA CUDA-X AI 面向数据科学和 AI 的 NVIDIA GPU 加速库 数据科学是推动 AI 发展的关键力量之一,而 AI 能够改变各行各业. 但是,驾驭 AI 的力量是一个复杂挑战 ...