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

JMeter中如何使用vars.put传递数组对象?脚本问题求助

在JMeter中传递数组/集合对象的解决方案

问题背景

你的场景是:父文件夹C:\Downloads\RANDOMDICOMIMAGES\下有SMALL、MEDIUM、LARGE三个主文件夹,每个主文件夹下有若干子文件夹,子文件夹里是单张或多张图片。目标是随机选一个主文件夹,再随机选其子文件夹,统计图片数量并获取所有图片的完整路径。但用Groovy写JSR223前置处理器时,vars.put()只能存String类型,没法直接传递存储路径的ArrayList,报错提示类型不兼容。

两种可行解决方法

方法1:用vars.putObject()存储对象

JMeter的vars对象自带putObject()方法,专门用来存储非String类型的Java对象,ArrayList、HashMap这类集合都能直接存。之后在其他JSR223元件里,用vars.getObject()就能取回原对象直接使用。

示例代码:

// 假设已经获取到图片路径的ArrayList
def imagePaths = new ArrayList<String>()
// 这里写填充路径的业务逻辑...

// 将数组存储到JMeter变量
vars.putObject("IMAGE_PATHS", imagePaths)

// 在其他JSR223元件中取回使用
def retrievedPaths = vars.getObject("IMAGE_PATHS")
retrievedPaths.each { path ->
    log.info("图片路径:${path}")
}

方法2:转成字符串存储,用时拆分还原

如果需要兼容不支持getObject()的元件(比如部分非Groovy脚本元件),可以把ArrayList转成用特定分隔符分隔的字符串,存到变量后,后续通过拆分字符串还原数组。注意选的分隔符别在图片路径中出现,比如分号;或竖线|。

示例代码:

// 假设已经获取到图片路径的ArrayList
def imagePaths = new ArrayList<String>()
// 填充路径逻辑...

// 转成分号分隔的字符串
def pathsStr = imagePaths.join(";")
vars.put("IMAGE_PATHS_STR", pathsStr)

// 在其他元件中还原数组
def pathsStr = vars.get("IMAGE_PATHS_STR")
def retrievedPaths = pathsStr.split(";") as ArrayList
retrievedPaths.each { path ->
    log.info("图片路径:${path}")
}

适配你业务场景的完整脚本

以下是适配需求的完整Groovy脚本(可直接放到JSR223前置处理器中):

// 父文件夹路径
def parentDir = new File("C:\\Downloads\\RANDOMDICOMIMAGES\\")
// 筛选存在的主文件夹
def mainFolders = ["SMALL", "MEDIUM", "LARGE"]
    .collect { new File(parentDir, it) }
    .findAll { it.exists() && it.isDirectory() }

// 随机选取一个主文件夹
def randomMainFolder = mainFolders.get(new Random().nextInt(mainFolders.size()))
// 获取主文件夹下的所有子文件夹
def subFolders = randomMainFolder.listFiles()?.findAll { it.isDirectory() } ?: []
// 随机选取一个子文件夹
def randomSubFolder = subFolders.get(new Random().nextInt(subFolders.size()))

// 获取子文件夹内的所有图片(可根据实际扩展名调整,比如.dcm/.jpg)
def imageFiles = randomSubFolder.listFiles()?.findAll { 
    it.isFile() && (it.name.endsWith(".dcm") || it.name.endsWith(".jpg")) 
} ?: []

// 统计图片数量并存入变量
vars.put("IMAGE_COUNT", imageFiles.size().toString())

// 方法1:存储路径数组对象
def imagePaths = imageFiles.collect { it.getAbsolutePath() }
vars.putObject("IMAGE_PATHS", imagePaths)

// 可选方法2:存储为分隔字符串
vars.put("IMAGE_PATHS_STR", imagePaths.join(";"))

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:15:31