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