Karate框架WebSocket调用返回null值,请求协助排查问题
Karate WebSocket测试listen超时问题解决
问题分析
核心原因是socketsbay的demo WebSocket服务采用广播机制:发送的消息会推送给除发送者之外的其他在线客户端,不会回发给发起请求的当前连接。因此你的测试代码中,同一个socket发送消息后,listen无法收到自身发送的内容,最终超时导致listenResult为null,匹配失败。
解决方案
通过创建两个独立的WebSocket连接,分别模拟“发送端”和“接收端”,让接收端监听发送端的广播消息。
修正后的测试代码
Scenario: WebSocket广播消息测试 # 启动接收端连接并异步监听 * def receiver = karate.webSocket("wss://socketsbay.com/wss/v2/1/demo/") * karate.exec(function(){ receiver.listen(5000) }) # 发送端连接并发送消息 * def sender = karate.webSocket("wss://socketsbay.com/wss/v2/1/demo/") * sender.send('Test Karate') # 验证接收端的监听结果 * match receiver.listenResult == 'Test Karate'
补充说明
karate.exec()用于异步执行监听逻辑,避免主线程被阻塞- 若出现连接时序问题,可在创建连接后添加短暂等待(如
* karate.sleep(1000))确保连接稳定 - 如需测试消息回显(echo)场景,需选择支持echo功能的WebSocket端点,而非广播类型服务
内容的提问来源于stack exchange,提问作者Dinesh Singh
相关产品推荐
相关产品推荐

