WebSocket和HTTP接口测试的差别是通信模型不同。HTTP是请求-响应方式,测试一般是一次请求对应一次断言;WebSocket 是握手后建立长连接,客户端和服务端都能主动发消息,测试更像在测试一条连接上的事件流和消息流。
1. 通信模型不同
HTTP 接口测试围绕请求和响应展开。客户端发请求,服务端返回响应,测试用例天然同步、容易对应。
WebSocket 测试围绕连接和消息展开。先通过 HTTP Upgrade 握手建立连接,之后双方可以随时发消息,测试需要监听事件、等待消息,并管理连接生命周期。
2. 状态性不同
HTTP 协议本身无状态,业务状态一般靠 Token、Cookie、Session 维持。测试时每次请求可以相对独立。
WebSocket 连接本身有状态,鉴权、订阅、房间、上下文都绑定在当前连接上。连接断开后,状态可能丢失,需要重连和重新订阅。
3. 消息关联方式不同
HTTP 的请求和响应天然一一对应,断言响应即可。
WebSocket 的消息不一定有响应,服务端可能主动推送,也可能一条请求对应多条推送。自动化测试一般要靠消息类型、requestId、业务 ID 来关联和断言。
4. 测试入口不同
HTTP 测试入口是 URL、Method、Header、Body,然后检查状态码和响应体。
WebSocket 测试入口先看握手:URL、Header、Token、Origin 是不是正确,是不是返回 101。握手成功后,才进入发消息、收消息、订阅、心跳等测试。
5. 断言重点不同
HTTP 主要断言状态码、响应头、响应体、字段类型、业务错误码、响应时间。
WebSocket 主要断言消息内容、消息类型、消息顺序、消息数量、推送时机、连接状态、关闭码、心跳是不是正常、重连后是不是恢复订阅。
6. 超时和异常处理不同
HTTP 重视连接超时、请求超时、服务端 4xx/5xx、限流、幂等重试。
WebSocket 重视心跳超时、空闲超时、消息等待超时、异常关闭、close code、错误事件、Token 过期踢下线、断线重连失败等。
7. 重试和恢复不同
HTTP 接口如果幂等,失败后可以直接重试。
WebSocket 断线后一般需要重连、重新鉴权、重新订阅,还要考虑消息去重、消息补偿、顺序恢复等问题。
8. 并发和性能测试不同
HTTP 性能测试重视 QPS、TPS、响应时间、P95/P99、错误率、吞吐量。
WebSocket 性能测试重视并发连接数、消息吞吐、端到端延迟、广播能力、消息丢失率、连接稳定性、内存和句柄占用、重连风暴等。
9. 安全测试重点不同
HTTP 安全测试重视 HTTPS、CSRF、CORS、越权、注入、敏感信息泄露。
WebSocket 安全测试重视 WSS、Origin 白名单、跨站 WebSocket 劫持、握手鉴权、消息级鉴权、连接数限制、消息频率限制、Token 过期处理。
10. 工具和自动化方式不同
HTTP 常用 Postman、curl、requests、RestAssured、JMeter、k6。自动化一般是“发请求,断言响应”。
WebSocket 常用 wscat、websocat、Postman、JMeter WebSocket Sampler、k6、Gatling,以及 Python websockets、Node ws 等库。自动化一般是“建连,监听,发消息,等待事件,断言,关闭连接”,必须处理异步等待和连接生命周期。
HTTP接口测试测试单次请求是不是正确。
WebSocket接口测试重测试连接生命周期和消息流是不是可靠
WebSocket 往往也要先测HTTP握手和鉴权接口。建议消息协议里统一设计 type、requestId、timestamp 等字段,方便自动化断言和问题定位。