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

从Java Selenium转JMeter:WebSocket单读采样器等待文件响应问题

问题分析与修复方案

核心问题

  1. UPLOADING变量未初始化,导致While控制器执行时触发"No such Property: Uploading"错误,循环逻辑异常
  2. WebSocket单读采样器超时配置不合理,或消息提取规则错误,引发"Read timed out"失败

分步修复

1. 初始化状态变量

在文件上传步骤之前添加「用户定义的变量」元件,配置:

  • 变量名:UPLOADING
  • 变量值:true
    确保循环启动时变量存在,避免初始判断报错。

2. 修正While控制器条件

将原JavaScript判断替换为更稳定的JEXL3表达式:

${__jexl3("${UPLOADING}" != "false",)}

避免字符串转义导致的逻辑判断失效。

3. 调整WebSocket单读采样器

  • 若使用预建立连接,确认采样器的「Connection」选项选择已创建的连接名称,不要选「New Connection」
  • 提升「Read Timeout」值(建议设为30000毫秒),适配文件上传的耗时
  • 修正JSON提取器配置:
    • 应用范围选「Main Sample Only」
    • JSON路径表达式要精准匹配服务端返回的is-in-progress字段,例如服务端响应为{"upload": {"is-in-progress": true}},则路径写$.upload.is-in-progress
    • 匹配编号设为1
    • 默认值设为true,防止提取失败时变量为空

4. 优化调试日志

修改JSR223采样器代码(用Groovy语言),增加变量判空:

def uploadStatus = vars.get("UPLOADING") ?: "未获取状态"
log.info("当前上传状态: " + uploadStatus)

避免因变量不存在导致日志报错,同时更清晰输出状态。

5. 验证WebSocket通信逻辑

  • 确认WebSocket URL与服务端一致(注意ws:///wss://协议)
  • 检查服务端是否在上传过程中主动推送状态消息,若需客户端触发(如心跳),需在循环内添加WebSocket写采样器发送对应指令

内容的提问来源于stack exchange,提问作者Cormac Close

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:55:06