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

如何在JMeter中将数据库列100行数据存储到变量并跨线程使用

解决JMeter中JDBC查询结果全量存储与跨线程共享问题

你的问题出在每次循环都用新值覆盖了同一个ContractNumber变量,所以最终只保留了最后一行数据。以下是修正后的脚本,能把指定列的所有值存入集合,同时支持跨线程使用:

脚本实现(JSR223元素中执行)

// 初始化列表存储所有ASSET_NUM值
def allAssetNumbers = []
// 获取JDBC请求返回的结果集合(对应你设置的Result variable name: AccountNumber)
def jdbcResults = vars.getObject("AccountNumber")

// 遍历结果集,提取目标列的值
jdbcResults.each { row ->
    def assetNum = row.get("ASSET_NUM")?.toString()
    if (assetNum) {
        allAssetNumbers.add(assetNum)
        log.info("已收集ASSET_NUM: ${assetNum}")
    }
}

// 1. 存入线程局部变量(当前线程组内可用)
vars.putObject("AllAssetNumbers", allAssetNumbers)
// 2. 存入全局属性(跨线程组共享)
props.put("GlobalAllAssetNumbers", allAssetNumbers)

使用方式

线程组内调用

在当前线程组的其他元素中,可通过以下方式获取集合中的值:

  • 脚本中获取整个集合:vars.getObject("AllAssetNumbers")
  • 用Groovy函数取指定索引的值(比如第1个元素):${__groovy(vars.getObject("AllAssetNumbers").get(0),)}

跨线程组调用

在其他线程组中,通过全局属性获取集合:

  • 脚本中获取整个集合:props.get("GlobalAllAssetNumbers")
  • 用Groovy函数取指定索引的值:${__groovy(props.get("GlobalAllAssetNumbers").get(ctx.getThreadNum()),)}

注意:如果用线程号作为索引,需确保线程数不超过集合的元素数量,避免数组越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:13