JMeter分布式执行时自定义变量未解析,目录命名异常求助
解决方案
1. 同步远程节点的脚本路径
分布式执行时,FileServer.getFileServer().getBaseDir()返回的是远程节点本地的脚本存放目录,而非发起测试的本地路径。如果远程节点上的脚本路径和本地不一致,或者脚本未同步到对应位置,会导致SCRIPT_DIR无法正确解析。
- 确认远程节点已同步测试脚本及目录结构,确保
myscript.jmx在远程节点的/home/user/script/目录下(和本地路径一致)。 - 若远程节点路径不同,需调整
SCRIPT_DIR的Groovy逻辑,或通过全局属性统一传递路径。
2. 改用全局属性传递路径
避免依赖测试计划内的Groovy解析,直接通过命令行-G参数传递全局属性,确保所有节点使用统一的路径定义:
修改启动命令,添加路径相关的全局属性:
$JMETER_HOME/bin/jmeter.sh -r -n -t /home/user/script/myscript.jmx \ -GSCRIPT_DIR=/home/user/script/ \ -GRESULT_DIR=/home/user/resultat/ \ -G/home/user/config/myconf.properties \ -j /home/user/resultat/jmeter.log
之后在测试计划中,将变量替换为全局属性引用:
SCRIPT_DIR ${__P(SCRIPT_DIR,)} RESULT_DIR ${__P(RESULT_DIR,)}
3. 优化路径生成逻辑
手动拼接./../容易引发解析歧义,改用Groovy直接生成父目录路径:
修改SCRIPT_DIR的定义:
SCRIPT_DIR ${__groovy(new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir()).getParent() + File.separator,)}
这样通过Groovy的File API直接获取脚本目录的父路径,避免手动拼接路径的问题。
4. 检查远程节点的JMeter配置
确保远程节点的jmeter.properties开启了属性传递功能,且版本与本地一致:
# 开启系统属性传递 remote.system.properties=system.properties # 确保保存服务配置一致 remote.save.saveservice.output_format=xml
版本不一致可能导致变量解析逻辑存在差异,引发未预期的问题。
内容的提问来源于stack exchange,提问作者Broshet
相关产品推荐
相关产品推荐

