测试人必备技能:如何进行WebSocket接口测试?
目录
前言
WebSocket介绍
HTTP与WebSocket的区别
二者关系
WebSocket测试方法
使用Postman
使用Jmeter
使用Python
结语
前言
随着Web应用的日益普及,WebSocket作为一种全双工通信协议,在移动端、游戏、视频会议等方面得到广泛应用。
而对于需要实时通信的Web应用来说,WebSocket接口测试是非常重要的一环。然而,许多测试人员在进行WebSocket接口测试时,可能会遇到很多困惑和挑战。这些问题包括如何模拟WebSocket消息、如何进行连接和断开操作以及如何验证返回结果等。
今天,我将分享一些关于WebSocket接口测试的心得和技巧,帮助大家更好地掌握这个技能,无论你是初学者还是有经验的测试人员,相信这篇文章都会给你带来不少启发。
WebSocket介绍
WebSocket 是一种基于在单个 TCP 连接上进行全双工通信的协议,是从HTML5开始提供的一种浏览器与服务器之间进行全双工通讯的网络技术,解决了HTTP协议不适用于实时通信的缺点,相较于 HTTP 协议,WebSocket 协议实现了持久化网络通信,可以实现客户端和服务端的长连接,能够进行双向实时通信,协议名为"ws"。
HTTP与WebSocket的区别

- 两者都是基于TCP协议进行数据传输,具有可靠的传输能力,而且都是应用层协议
- HTTP是单向的通信,只能由客户端向服务端发送请求,服务端无法主动向客户端发送消息
- WebSocket是双向通信,客户端和服务端是通过握手建立连接,可实现全双工通信,双方可以同时主动向对方发送消息
- WebSocket在建立连接时数据是通过HTTP协议传输的,但是建立之后,真正传输数据时使用的是更加可靠的TCP协议
二者关系
- WebSocket在建立连接时,HTTP通过Upgrade消息头来通知客户端需要采用WebSocket协议来完成这个请求,在发送完此响应最后的空行后,服务器就会切换到WebSocket协议,接口返回状态码为
101,表示服务器已经理解了客户端的请求,需要升级协议
WebSocket测试方法
使用在线工具
在线工具有很多,自行百度吧!个人习惯用这个工具

使用Postman
Postman支持测试WebSocket协议的接口,此文章发布时还处于公测阶段,需要登录后才能使用,入口如下图所示

操作跟测试HTTP请求类似,不过多介绍啦!如下图所示

使用Jmeter
使用Jmeter既可以单独测接口,也可以进行性能测试,但测试WebSocket协议需要安装插件,下载插件后放到Jmeter安装路径中的lib/ext目录下,重启Jmeter后在【选项】菜单中会出现【Plugins Manager】,然后在可用插件Tab页搜索WebSocket,进行安装即可,如下图所示

安装后新建【线程组】,在添加【取样器】中会出现6项WebSocket的组件
- WebSocket Close:用于关闭WebSocket连接
- WebSocket Open Connection:只建立WebSocket连接,不发送数据
- WebSocket Ping/Pong:用于心跳检测,为了保持长连接,防止客户端被服务端判定为不活跃而被断开
- WebSocket Single Read Sampler:用于接收一个(文本或二进制)数据
- WebSocket Single Write Sampler:用于发送一个(文本或二进制)数据
- WebSocket request-response Sampler:用于执行基本的请求和响应交换,既能发送数据又可以接收数据
若有使用过Jmeter就肯定能明白这些组件的使用方法,以WebSocket request-response Sampler为例,页面信息介绍如下图所示

使用Python
首先需要安装websocket-client
pip install websocket-client
对于只是测试WebSocket接口发送接收消息是否正常,不需要长时间连接,可以使用下面的短连接方法,在请求结束后会主动断开连接
from websocket import create_connectionuser1 = create_connection("ws://localhost:6688/1") # 用户1打开连接
user2 = create_connection("ws://localhost:6688/2") # 用户2打开连接print("获取响应状态码:", user1.getstatus()) # 正常应返回101
print("获取响应头:", user2.getheaders())user1.send("你好呀!") # 用户1向服务端发送消息res1 = user1.recv() # 查看服务端推送的消息
res2 = user2.recv()if res1 == res2:print("服务端消息推送成功!\n")
else:print("消息获取异常!\n")print("查看用户1收到的消息:",res1,"\n查看用户2收到的消息:",res2)
若是要对WebSocket接口做持续监听工作,需要长连接,但不需要传参,只是监听消息,使用WebSocketApp类就更合适啦!方法如下
import websocketdef on_open(ws): # 定义用来处理打开连接的方法print("打开连接")def on_message(ws, message): # 定义用来监听服务器返回消息的方法print("监听到服务器返回的消息,:\n", message)def on_error(ws, error): # 定义用来处理错误的方法print("连接出现异常:\n", error)def on_close(ws): # 定义用来处理断开连接的方法print("关闭连接")if __name__ == "__main__":websocket.enableTrace(True) # 可选择开启跟踪,在控制台可以看到详细的信息ws = websocket.WebSocketApp("ws://localhost:6688",on_open=on_open,on_message=on_message,on_error=on_error,on_close=on_close)ws.run_forever() # 调用run_forever方法,保持长连接
还可以使用Pytest对WebSocket接口实现自动化测试,示例如下
import pytest
from websocket import create_connectionclass TestDyd():url = "ws://localhost:6688"@classmethoddef setup_class(cls):cls.ws = create_connection(cls.url) # 建立连接cls.ws.settimeout(5) # 设置超时时间def test_connect(self):# 通过状态码判断连接是否正常assert self.ws.getstatus() == 101def test_send(self):params = "你好呀!" # 定义传参self.ws.send(params) # 发送请求result = self.ws.recv() # 获取响应结果print("收到来自服务端的消息:", result) # 打印响应结果# 因为该测试项目传参会显示在响应中,所以通过判断传参是否在响应结果中进行断言assert params in resultif __name__ == '__main__':pytest.main(["-vs"])
传参可以使用@pytest.mark.parametrize()装饰器,示例如下
import pytest
from websocket import create_connectionclass TestDyd():data = [("/user/2", "今天开直播卖鱼!!!!"),("/user/3", "鱼可以买来放生吗?"),("/user/4", "那条翻白肚的鱼有死亡证明吗?"),("/user/5", "你的鱼会唱歌吗?"),("/user/6", "你的鱼上大学了吗?"),("/user/7", "你的鱼买回来需要隔离吗?")]@pytest.mark.parametrize("user, word", data)def test_send(self, user, word):ws = create_connection("ws://localhost:6688"+user)params = word ws.send(params) # 发送请求result = ws.recv() # 获取响应结果print("来自服务端的消息:", result)assert params in result # 断言

先简单介绍这些吧,关于Python脚本,可以参考官方文档,里面有示例和常见问题解决方法

结语
这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
相关文章:
测试人必备技能:如何进行WebSocket接口测试?
目录 前言 WebSocket介绍 HTTP与WebSocket的区别 二者关系 WebSocket测试方法 使用Postman 使用Jmeter 使用Python 结语 前言 随着Web应用的日益普及,WebSocket作为一种全双工通信协议,在移动端、游戏、视频会议等方面得到广泛应用。 而对于需…...
【Android FrameWork (三)】- SystemServer
文章目录 知识回顾启动第一个流程initZygote的流程 前言源码分析1.system_server2.SystemServer.main3,startBootstrapServices4,startService 拓展知识LoadApkcontext 对于Android context 大家是怎么理解的?LocalServices.java: addServece方法中 ArrayMap和HashM…...
Docker容器部署及基本使用
文章目录 一、环境初始化配置二、安装Docker三、优化配置四、基础命令 一、环境初始化配置 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalldsetenforce 0sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config sed -i s/SELINUXenforcing/S…...
【机智云物联网低功耗转接板】+模拟MCU快速上手
GE211是机智云自研的定制化转接板,使用 ESP32-C3-WROOM-02 通讯模块,适用于白色智能家电等设备应用。 转接板已经烧录了机智云连云的最新GAgent固件,所以不需要烧写任何软件就可以快速上手使用。 GE211板卡带有一个串口,一般是把这…...
ai免费写作在线平台-ai免费伪原创文章生成器软件
ai伪原创能检测出来吗 人工智能技术可以检测伪原创,但是不是所有的伪原创都可以被检测出来。 现在有许多自然语言处理(NLP)算法和技术可以用来检测伪原创内容,例如文本相似度比较算法,语气分析算法等。这些算法可以检…...
Web自动化测试简介及web自动化测试实战交教程
一、认识web自动化测试 1.什么是自动化测试? 自动化测试的概念: 软件自动化测试就是通过测试工具或者其他手段,按照测试人员的预定计划对软件产品进行自动化测试,他是软件测试的一个重要组成部分,能够完成许多手工测试无法完成或…...
基于单片机的家庭应急电源设计
基于单片机的家庭应急电源 摘 要 本设计基于STC89C52单片机设计得应急电源,以应急电源为研究对象,单片机设计为控制集成IC,ADC为模数转换控制模块,无源蜂鸣器作为报警电路。系统分为单片机设计最小系统,AD转换控制模…...
线程七大状态
线程生命周期(七大状态) 新建状态(New):当Java线程被创建时,它处于新建状态。此时,线程对象已被创建,但尚未启动。在这个状态下,线程并没有开始执行任何代码,…...
Linux第一章
文章目录 前言一、操作系统概述二、Linux初识1.Linux系统的诞生2.Linux系统内核3.Linux发行版 三、虚拟机介绍四、安装vmware workStation1.VMware WorStation软件2.安装 五、vm安装linux六、远程连接Linux系统1.图形化、命令行2.为什么使用命令行操作linux3.使用FinalShell软件…...
Microsoft Defender for Identity部署方案
目录 前言 一、重要组件 二、部署步骤 1、准备 Azure 订阅 2、配置 Microsoft Defender for Identity 门户...
超越YOLOv8,飞桨推出精度最高的实时检测器RT-DETR!
众所周知,实时目标检测( Real-Time Object Detection )一直由 YOLO 系列模型主导。 飞桨在去年 3 月份推出了高精度通用目标检测模型 PP-YOLOE ,同年在 PP-YOLOE 的基础上提出了 PP-YOLOE 。后者在训练收敛速度、下游任务泛化能力以及高性能部署能力…...
基于Docker安装Redis【保姆级教程、内含图解】
Redis官网:Redis Redis中文官网:CRUG网站 两者选其一即可,建议使用 Redis官网:Redis 学习任何框架和技术,一定要参考相应的官网学习,一定要参考官网学习!!! 目录 一、拉取…...
电子表格软件与一站式BI的区别
看完本节内容,相信您能够了解到电子表格软件(代号电子表格软件)与「一站式 BI」的主要区别。所谓一站式BI在官网上的名称就是Smartbi V10.5,代号就是Smartbi一直在使用insight。 这两个产品都属于商业智能BI软件的品类࿰…...
SpringCache
一、介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。 Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就…...
Android Framework—Service
介绍 Service是一种可以在后台执行长时间运行操作而不提供界面的应用组件。服务可以由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可以通过绑定到服务与之进行交互,甚至是执行进程之间的通信…...
leetcode (重排数组使得)连续子数组的权值和最小
题目描述:请重新排列某个仅包含2和3的数组,使得数组的所有连续子数组权值之和最小数组的权值定义为,数组中所有元素之积的因子个数,例如:rank([2,3])4 x p 1 c 1 p 2 c 2 p 3 c 3 ⋅ ⋅ ⋅ p k c k r a n k ( c 1 1 ) ( c …...
JSP计算机等级考试查询系统(源代码+论文+答辩PPT)
第一章 引言 计算机等级考试查询系统是有其开发的必要性的,它的应用将大大节省了学校的人力资源,从而从人工劳动中解脱出来。我们这次开发的软件系统一共包括了三个部分:等级考试的报名系统、查询系统和管理系统。其中管理系统是另外两部分…...
python 基础系列篇:七、以函数方式编写一个数字华容道
python 基础系列篇:七、以函数方式编写一个数字华容道 数字华容道游戏分析开始编写完整代码代码解说定义方法的规律 小结 数字华容道 嗯,就是一个简单的益智游戏,把数字按照特定规律排列,并比矩阵少一个格,用来进行移…...
2023年前端面试题
1.position都有哪些属性 2.1px等于多少rem,rem根据根元素的大小,根元素是谁 3.Es6操作数组的方法 4.防抖和节流以及应用场景 5.Vue和ajax最大的区别是什么(Vue和ajax怎么操作dom的,vue虚拟dom) 6.js数据类型有哪些&…...
快速入门量化交易
本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 原作者:袁霄|慕课网讲师 近来“量化交易”这个词听得越来越频繁,多数人对量化交易的第一印象是“高大上的技术”…...
Windows 11终极优化指南:用Win11Debloat一键清理系统,性能提升51%
Windows 11终极优化指南:用Win11Debloat一键清理系统,性能提升51% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other chang…...
2026年AI大模型接口中转站性能成本全维度实测 主流服务商权威排名榜单发布
一、五大主流接口中转平台核心维度全横向对标2026年AI大模型已经完成从技术验证向规模化落地的深度跨越,国内日均AI Token调用量已经突破140万亿,大模型API聚合中转站的角色早已不再是简单的协议转发层,已经进化为企业搭建自身AI能力体系的核…...
交互形态的深层迭代:从文本到具象化表达
行业在探索智能交互形态时,会发现一个共性现象:不少智能体的逻辑与生成能力已经成熟,但对外交互始终局限在文本对话框。 过去一年,行业主流做法高度趋同:大模型对接知识库、工具调用、流程编排,最终收敛为文…...
鬼谷八荒2026官方正版最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用
下载链接 逆天改命与八荒求道:解析《鬼谷八荒》的幕后历程、核心玩法与行业对比 在近年来的国产独立游戏浪潮中,修仙题材始终占据着举足轻重的地位。而在众多作品里,《鬼谷八荒》凭借其独特的画风与开放世界沙盒的定位,一度引发了…...
终极指南:3分钟在Windows上安装苹果USB驱动和iPhone网络共享
终极指南:3分钟在Windows上安装苹果USB驱动和iPhone网络共享 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/…...
2026实测:租用RTX 4090 CUDA适配与PyTorch精准安装教程
RTX 4090搭载Ada Lovelace架构、4nm制程工艺,配备16384个CUDA核心、24GB GDDR6X显存、1TB/s显存带宽,FP32算力82.6 TFLOPS,是7B-13B大模型训练、图像识别、深度学习推理的核心主流算力。个人开发者、中小团队自建RTX 4090硬件,存在…...
Armv8/v9架构SCTLRMASK_EL2寄存器解析与应用
1. AArch64系统控制寄存器基础解析在Armv8/v9架构中,系统控制寄存器(System Control Registers)是处理器状态配置的核心组件,它们分布在不同的异常级别(EL0-EL3),用于管理处理器行为、内存系统、安全状态等关键功能。这些寄存器通常通过MRS/M…...
NVIDIA Profile Inspector:解锁显卡700+隐藏设置的终极优化指南
NVIDIA Profile Inspector:解锁显卡700隐藏设置的终极优化指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾疑惑,为什么同一款显卡在不同游戏中表现天差地别…...
深入解析Linux内核sk_buff:网络数据包的内存布局与核心操作
1. 项目概述:从“数据包”到“sk_buff”的认知跃迁在网络编程或者内核开发领域,无论你是刚入门的新手,还是已经写过几个驱动模块的开发者,迟早都会与一个名为sk_buff的数据结构狭路相逢。这个名字听起来有点古怪,它是“…...
NotebookLM落地失败真相:为什么83%团队卡在第2阶段?3个权威诊断指标立即自检
更多请点击: https://codechina.net 第一章:NotebookLM落地失败的核心归因诊断 NotebookLM 作为 Google 推出的面向文档理解的实验性 AI 工具,其本地化部署与企业级集成常遭遇系统性失效。深入分析表明,失败并非源于单一技术缺陷…...
