You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gatling中捕获GraphQL触发的后续WebSocket响应?

Gatling WebSocket 多响应捕获解决方案

问题描述

  • 发送一次WebSocket原始消息后,收到多条同ID但内容不同的响应,后续响应由GraphQL POST请求触发
  • 现有.exec(ws("Web Socket Request").await(5))仅能捕获第一条响应,无法捕获后续触发的第二条响应
  • 开发者控制台显示:发送ID为"11"的消息后,先收到同ID响应,执行GraphQL调用后又收到另一条同ID响应
  • 当前测试代码如下:
.exec(graphQlRequests.onlineStatus(false))
.exec(graphQlRequests.chatRooms())
.exec(
    ws("Video Watch").sendText(subscriptionQueries.videoWatch()).await(5)
        .on(ws.checkTextMessage("Video Watch").check(jsonPath("\$..choices[0].id")
            .saveAs("choice")))
)
.exec(ws("New Messages").sendText(subscriptionQueries.newMessages()))
.pause(1)
.exec(graphQlRequests.startVideo())
.exec(graphQlRequests.chatRoom())
.exec(graphQlRequests.onlineStatus(false))
.exec(graphQlRequests.chatRoom())
.exec(graphQlRequests.onlineStatus(true))
.pause(9)
.exec(graphQlRequests.onlineStatus(true))
.pause(3)
.exec(graphQlRequests.videoChoice())
// Capture the second WebSocket message here.....
.exec(graphQlRequests.onlineStatus(true))
.pause(15)
.exec(graphQlRequests.onlineStatus(false))

解决方案

  • 不需要单独建立SSE连接:所有响应都是通过已建立的WebSocket连接推送的,复用现有连接即可。
  • 在触发响应的GraphQL请求后显式调用ws.await捕获:在graphQlRequests.videoChoice()之后,添加单独的WebSocket等待检查步骤,针对第二条响应设置匹配条件(比如ID、内容特征):
.exec(graphQlRequests.videoChoice())
// Capture the second WebSocket message here.....
.exec(ws("Capture Second Video Watch Response").await(5)
    .on(ws.checkTextMessage("Second Video Watch Check")
        .check(jsonPath("$.id").is("11")) // 匹配响应ID
        .check(jsonPath("$..choices[0].id").saveAs("updatedChoice")))) // 捕获目标字段
.exec(graphQlRequests.onlineStatus(true))
  • 关键说明:
    • await(5)指定等待响应的超时时间(单位秒),可根据实际情况调整
    • 通过jsonPath检查响应的ID或内容,确保捕获的是第二条目标响应
    • 如果需要区分多条同ID响应,可以结合响应中的其他字段(比如更新后的choices值)来设置检查条件

内容的提问来源于stack exchange,提问作者christopher harris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:01:20