因为我之前对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.jarwebsocket-common.jarwebsocket-client.jarjetty-http.jarjetty-io.jarjetty-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

  1. Server Name or IP:发送请求的目标服务器的IP地址或者域名。
  2. Port Number:服务器地址后的端口号,有则填写,没有不用填写。

(2)Timeout (milliseconds)

  1. Connection:链接建立的最大超时时间,单位毫秒。如果达到超时时间设置后链接未建立,则sampler失败。
  2. Response :对响应消息的最大等待时间,单位毫秒。到达设定时间后WebSocket链接关闭。

(3)WebSocket Request

  1. Implementation:只支持RFC6455(v13) ,WebSocket协议标准的最新版。
  2. Protocol:有wswss之分。ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己需要访问接口的实际情况填写。
  3. Content encoding:内容编码。有中文推荐编写UTF-8。
  4. Connection Id:连接ID。
  5. Path:访问接口的路径。
  6. Ignore SSL certificate errors:忽略SSL证书错误。
  7. Streaming connection:选择TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么第一次响应后该链接就会被关闭。

(4)同请求一起发送参数

  • 可以填写key-value形式的参数。(发送了好像不太好使,请求参数还是填写在下面的Request data中吧)
  • Request data:填入同请求一起发送参数,与HTTP采样器类似,结合被测接口说明文档来进行配置。

(5)Web Socket Response:接口响应相关设置

  1. Response pattern:采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭)
  2. Close connection pattern:如果服务器返回的消息含有填写的字符,就结束会话。
  3. Proxy Server (currently not supported by Jetty):编辑代理服务器信息代(当前不支持Jetty)

    Server Name or IP:服务器IP地址或域名。

    Port Number:端口号。

    Username:用户名。

    Password:密码。
  4. Message Backlog:定义服务器返回消息保留的最大长度。

5、使用JMeter测试WebSocket接口示例

我们请求一个WebSocket接口为例,进行演示。

访问地址:echo.websocket.org

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组中,添加取样器WebSocket Sampler组件:选中“线程组”右键 —> 添加 —> 取样器 —> WebSocket Sampler
  4. 在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)WebSocket Sampler组件内容

就和编辑HTTP请求一样,编写必要的请求信息和请求数据即可。

编辑WebSocket接口内容,如下图所示:

(3)运行查看结果

结果如下图所示:

说明使用JMeter成功发送WebSocket请求并且得到了响应。

参考:

『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口的更多相关文章

  1. 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  2. 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  3. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  4. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...

  5. 『动善时』JMeter基础 — 58、JMeter分布式测试

    目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...

  6. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  7. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  8. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  9. 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解

    目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...

随机推荐

  1. UVA OJ 623 500!

    500!  In these days you can more and more often happen to see programs which perform some useful cal ...

  2. CF1444A Division 求质因数的方法

    2020.12.20 求质因数的方法 CF1444A Division #include<bits/stdc++.h> #define ll long long #define fp(i, ...

  3. docker 的常见命令行解析

    1.查看本地镜像 sudo docker images 2.查看本地容器 sudo docker ps 3.根据Dockerfile制作镜像命令 sudo docker build -t Myimag ...

  4. flink操作mysql

    Flink读写mysql 如果是mvn项目的话,需要预先导入相应的包: <dependency> <groupId>org.apache.flink</groupId&g ...

  5. tuple必须加上逗号

    tuple支持  空 元组 不加逗号 >>> tup4 = () tuple非空的元组必须加上逗号>>> tup4 = (55,)>>> tup4 ...

  6. /etc/ssh/sshd_config ssh自动断 cent7

    vim /etc/ssh/sshd_config ClientAliveInterval 60ClientAliveCountMax 8630000 ClientAliveInterval 30Cli ...

  7. Hive 安装和配置

    环境准备 已安装 HDFS 和 Yarn 集群环境 Windows 已安装 MySQL 8 (开启远程连接用户权限) 安装步骤 1. 上传并解压 Hive 安装文件 将 apache-hive-3.1 ...

  8. Linux中级之netfilter防火墙(iptables)

    一.什么是防火墙? 防火墙其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬 ...

  9. Linux进阶之Git分布式版本控制系统篇

    一.Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核 ...

  10. Python小白的数学建模课-03.线性规划

    线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...