Artillery WS中如何检查WebSocket服务器响应并实现数据回传
Artillery WebSocket响应捕获与回传解决方案
你当前的capture配置是针对HTTP请求的语法,WebSocket的异步消息需要通过websocket场景下的onMessage事件来处理,这是导致fooBody显示undefined的核心原因。
下面是实现捕获响应字段、打印日志、回传数据的完整配置示例:
config: target: "ws://your-websocket-server-url" phases: - duration: 10 arrivalRate: 1 scenarios: - name: "WebSocket消息交互" engine: "websocket" flow: - connect: onOpen: - send: '{"type": "init"}' # 初始化发送的消息,根据业务需求调整 - onMessage: match: json: "$.fooBody" # 过滤出包含fooBody字段的目标消息 capture: json: "$.fooBody" as: "fooBody" then: - log: "收到服务器数据: {{ fooBody }}" - send: '{"echo": "{{ fooBody }}"}' # 将捕获的fooBody回传给服务器
关键说明:
onMessage事件:WebSocket消息是异步推送的,必须通过这个钩子监听并处理服务器返回的消息,不能直接用HTTP场景的capture语法。match规则:可选但建议添加,用来过滤你需要处理的特定消息,避免无关消息干扰捕获逻辑。- 变量复用:在
onMessage的capture中提取的变量,可直接在后续的send或log步骤中调用。 - 格式校验:确保服务器返回的是标准JSON格式;如果是纯文本消息,需去掉
json捕获规则,改用regex或直接捕获整个$message变量。
额外排查点:
- 临时添加
log: "原始消息内容: {{ $message }}",打印完整的服务器返回数据,确认fooBody字段是否存在、JSON路径是否正确。 - 如果服务器返回二进制消息,需在
onMessage中添加binary: true配置项。
内容的提问来源于stack exchange,提问作者thilak
相关产品推荐
相关产品推荐

