JMeter随机文件上传后JSR223获取上传文件名报错如何解决
报错根因
你遇到的语法报错核心原因是:JSR223 元件使用 Groovy 引擎时,不支持直接用 ${变量名} 格式引用 JMeter 变量。你存储的是 Windows 路径,路径中的反斜杠 \ 会被 Groovy 识别为转义字符,直接破坏代码语法结构,因此抛出编译异常。
解决方法
方法1:无需修改预处理器,直接调整后置处理器代码
直接通过 vars.get() 方法获取变量,再提取文件名即可,代码如下:
// 正确获取JMeter存储的全路径变量 def fullFilePath = vars.get("CURRENT_FILE") // 从全路径中解析得到纯文件名 def uploadFileName = new File(fullFilePath).getName() // 打印日志 log.info("File Uploaded Is : {}", uploadFileName) // 若需要将文件名存为JMeter变量供其他元件调用,可添加下行 vars.put("UPLOAD_FILE_NAME", uploadFileName)
方法2:预处理器阶段提前存储文件名(性能更优)
如果后续多个元件都需要用到纯文件名,可以直接修改 Beanshell 预处理器代码,一次性存储全路径和文件名两个变量:
// 注意Windows路径反斜杠需要转义,写为\\ File folder = new File("C:\\User\\SYSTEMTESTING\\SAMPLENEWFILES\\REUPLOADFILES"); File[] fileForUpload = folder.listFiles(); Random rnd = new Random(); File selectedFile = fileForUpload[rnd.nextInt(fileForUpload.length)]; // 存储全路径供上传请求使用 vars.put("CURRENT_FILE", selectedFile.getAbsolutePath()); // 直接存储纯文件名,后续无需重复解析 vars.put("CURRENT_FILE_NAME", selectedFile.getName());
后续在 JSR223 后置处理器中直接调用即可:
log.info("File Uploaded Is : {}", vars.get("CURRENT_FILE_NAME"))
注意:你请求体中看到的
filename属性值和本地选中文件的文件名完全一致,以上两种方法获取的文件名和请求中实际上传的文件名完全匹配。
内容的提问来源于stack exchange,提问作者user16923013
相关产品推荐
相关产品推荐

