从Java Selenium转JMeter:WebSocket单读采样器等待文件响应问题
问题分析与修复方案
核心问题
UPLOADING变量未初始化,导致While控制器执行时触发"No such Property: Uploading"错误,循环逻辑异常- 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
相关产品推荐
相关产品推荐

