问题的背景:
通过WebSocket进行通信用于实现web应用中的实时功能(聊天、通知、实时统计)。随着动态web UI的发展,自动化测试web-socket连接和消息交换的需求逐渐增加。过去,使用手动或低级脚本来实现,现在出现了更专业的工具(例如,测试框架的WebSocket客户端)。
问题:
主要难点在于web-socket依赖于实时服务器状态,双向流动,消息的发送/接收同步更复杂,也更难验证其正确性。此外,还要测试意外断开连接的处理,重连,延迟,顺序投递,以及在竞争连接情况下的正确性。
解决方案:
使用专业的库(例如,Node.js的ws,Python的WebSocket API)并将其集成到自动化测试管道中。
制定控制握手、消息交换、错误处理和验证重连的场景。
使用模拟服务器(或仿真器),如果需要验证不仅是前端,还要验证服务器的“不正常”行为场景。
增加对时序、顺序交付和重连的额外检查。
关键特点:
一个成功的连接够不够算web-socket服务器可用?
不够,必须测试不仅是连接的启动,还包括其处理正确的往来、异常/不完整消息的处理和非正常断开的能力。
可以使用HTTP测试工具来检查WebSocket API吗?
不可以,虽然握手部分地实现了HTTP,主要交换是通过其他协议进行的,完整的检查需要专业工具。
如果测试在“本地”通过,那在CI服务器上也应该可以工作吗?
不可以,异步性、网络时序和相关问题通常只在CI环境中显现。总是要考虑环境之间的差异。
工程师实现了web-socket的自动测试:仅检查握手并发送1条消息。测试通过,但一次出现了bug:重连后应用不再接收事件。测试没有捕捉到。
优点:
缺点:
测试构建为场景:握手、交换10条不同的消息(正确/损坏)、延迟、强制断开、自动重连、重新会话和并发处理。所有步骤都被记录并根据消息ID进行验证。
优点:
缺点: