首页/开发/软件测试速查/WebSocket 接口测试

WebSocket 接口测试

WebSocket 测试要点:握手(101 与 Upgrade 头)、消息收发与顺序、心跳与重连、断线补发、消息大小上限与背压、鉴权过期后的行为;客户端可用 websocat、浏览器控制台或框架内置客户端。

软件测试速查开发更新于 2026-10-13

WebSocket 测试是什么

WebSocket 是全双工长连接协议:一次 HTTP 握手升级后,服务端与客户端可以随时互发消息。测试重点与请求响应式接口不同——消息顺序与边界、并发连接规模、断线重连、心跳保活、背压与离线消息补发都要覆盖。只测发一条收一条happy path,上线后最常见的重连风暴与消息乱序多半漏网。

基本信息

协议要点HTTP 升级握手、帧结构、ping/pong 心跳、关闭码
消息形态文本与二进制帧,消息可能分片到达,需按整包校验
核心场景顺序与乱序、重复投递、断线重连、心跳超时、并发连接数
鉴权方式握手阶段鉴权或连接后认证,超时未认证要断开
工具支持浏览器开发者工具、命令行客户端、k6 等支持 WebSocket 的压测工具
观测指标连接数、消息延迟、丢消息率、重连次数

Python 客户端示例

Python 客户端示例
import asyncio, websockets

async def smoke():
    async with websockets.connect('wss://example.com/ws') as ws:
        await ws.send('{"type": "subscribe", "room": "news"}')  # 订阅消息
        msg = await asyncio.wait_for(ws.recv(), timeout=5)         # 等首条推送
        print(msg)  # 断言应为订阅成功的确认或首条新闻
        # 断线重连与心跳请另设计场景:主动关闭再重连,观察补发行为

asyncio.run(smoke())

典型使用场景

  • 消息推送:行情、通知、协作编辑,验证订阅过滤与推送正确性。
  • 断线恢复:模拟网络抖动与主动断开,验证重连与消息补发逻辑。
  • 并发连接:大量客户端同时在线时的服务端承载与内存占用。
  • 有序性验证:高频消息下检查乱序、丢失与重复。
  • 安全测试:未认证连接、越权订阅、消息伪造的拦截。
心跳要两端配合:只发不应的服务端与只应不识的客户端,都会在生产网络里暴露问题。
重连要带退避:客户端固定间隔重连,服务大面积抖动时会形成重连风暴。
压测要评估网关上限:长连接占用网关与负载均衡资源,先确认限额再定并发目标。

易错点

  • 只测单连接:并发规模与内存问题在成千上万连接时才会暴露。
  • 忽略消息边界:把分帧消息当完整消息解析,长消息下错乱。
  • 重连风暴:断线后全部客户端无退避重连,服务被瞬时打崩。
  • 无离线补发验证:重连后历史消息补不齐,用户侧数据缺失。
  • 心跳缺失:中间设备超时掐断空闲连接,问题被当成偶发故障排查很久。

数据来源与参考

  • RFC 6455(The WebSocket Protocol)
  • websocat 项目文档(github.com/vi/websocat)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌