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

JMeter中如何验证User1接收User2 WebSocket连接的服务器通知?

验证跨线程组WebSocket消息接收的解决方案

你的测试计划结构如下:

TestPlan
|-Thread1
|--HTTP Sample 1
|--HTTP Sample 2
|--WebSocket Connection Open for User1
|-Thread2
|--HTTP Sample 1
|--HTTP Sample 2
|--WebSocket Connection Open for User2

需求明确:当Thread2中User2完成WebSocket连接后,服务器会向Thread1中的User1推送“User2已连接”的消息,需要验证User1是否成功收到该消息。以下是可行的实现方法:

方法一:WebSocket Read Sampler + 全局变量共享

  1. 在Thread1的WebSocket Connection Open for User1之后,添加WebSocket Read Sampler:设置监听超时为足够长的时间(比如30秒),确保能覆盖Thread2的连接流程,捕获服务器推送的消息。
  2. 在Thread1的WebSocket Read Sampler中,用__setProperty()函数将捕获到的消息存入全局变量,示例:
    __setProperty(user1_received_msg, ${response_data}, true)
    
  3. 调整线程组执行顺序:开启测试计划的“Run Thread Groups consecutively”选项,强制Thread1先启动监听,再执行Thread2的连接流程。
  4. 在Thread2的WebSocket Connection Open for User2之后,添加JSR223 Sampler,读取全局变量并验证内容:
    def receivedMsg = props.get("user1_received_msg")
    if (!receivedMsg.contains("User2已连接")) {
        AssertionResult.setFailure(true)
        AssertionResult.setFailureMessage("User1未收到User2连接通知,收到的消息:${receivedMsg}")
    }
    

方法二:WebSocket Listener全局监听

  1. 在测试计划根节点添加WebSocket Listener,配置连接匹配规则(比如通过User1的WebSocket URL或连接ID),用以捕获所有推送消息。
  2. 在Thread1建立WebSocket连接后,用正则表达式提取连接ID,存入全局变量(比如user1_connection_id)。
  3. Thread2完成连接后,添加JSR223 Assertion,遍历WebSocket Listener捕获的消息,筛选出User1连接对应的消息并验证:
    def allMessages = ctx.getSamplerContext().get("WebSocketListener.messages")
    def user1Msg = allMessages.findAll { it.connectionId == props.get("user1_connection_id") }
    if (!user1Msg.any { it.payload.contains("User2已连接") }) {
        AssertionResult.setFailure(true)
        AssertionResult.setFailureMessage("未找到User1收到的User2连接通知")
    }
    

关键注意点

  • 必须保证Thread1的WebSocket连接在Thread2执行期间持续活跃,不要提前关闭,可在Thread1末尾添加WebSocket Close Sampler并设置延迟执行。
  • 使用JSR223元件时优先选择Groovy语言,避免性能问题。
  • 监听超时时间需根据实际业务场景调整,避免因网络延迟导致漏捕消息。

内容的提问来源于stack exchange,提问作者Oleksandr Holyshevskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:45