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

如何在JMeter中通过JDBC从PostgreSQL获取随机ID数组并传入REST API JSON

解决JMeter中REST API多对象数组随机ID填充问题

方法一:一次性查询多个随机ID,直接拆分使用

  1. 修改JDBC预处理器的SQL语句,直接从PostgreSQL获取指定数量的随机ID,比如要3个就写:
    SELECT id FROM your_table ORDER BY RANDOM() LIMIT 3;
    
  2. 在JDBC预处理器的「变量名」栏填写ids,执行后JMeter会自动生成ids_1、ids_2、ids_3(对应每个ID)和ids_#(对应ID总数)这几个变量。
  3. 如果是固定数量的对象数组,直接在JSON请求体里逐个引用变量:
    [
      {"ID": "${ids_1}", "otherProp": "value1"},
      {"ID": "${ids_2}", "otherProp": "value2"},
      {"ID": "${ids_3}", "otherProp": "value3"}
    ]
    
  4. 如果数量不固定,用Groovy函数动态生成数组:
    ${__groovy(
    def idList = [];
    def count = vars.get('ids_#') as int;
    for(int i=1; i<=count; i++) {
        idList.add(['ID': vars.get('ids_' + i), 'otherProp': 'value' + i])
    }
    new groovy.json.JsonBuilder(idList).toPrettyString(),
    )}
    

方法二:循环生成单个ID,逐步组装数组

适合需要动态控制对象数量的场景:

  1. 添加「循环控制器」,设置循环次数为你需要的对象数量(可以用变量动态指定)。
  2. 在循环控制器内添加JDBC预处理器,每次查询一个随机ID,将结果存到临时变量current_id。
  3. 添加「JSR223后置处理器」,把每次生成的对象加入列表:
    // 从变量中获取已有的列表,没有则初始化空列表
    def itemList = vars.getObject('api_items') ?: []
    // 获取当前循环索引,用来生成其他属性的区分值
    def index = vars.get('__jm__Loop Controller__idx')
    // 添加新对象到列表
    itemList.add(['ID': vars.get('current_id'), 'otherProp': 'value' + index])
    // 更新变量中的列表
    vars.putObject('api_items', itemList)
    
  4. 在HTTP请求的JSON消息体中,用Groovy把列表转为JSON:
    ${__groovy(new groovy.json.JsonBuilder(vars.getObject('api_items')).toPrettyString(),)}
    

注意事项

  • 确保JDBC连接配置正确,能正常访问PostgreSQL数据库。
  • 使用Groovy时,注意语法格式,尤其是引号和括号的配对。
  • 变量名不要重复,避免覆盖已有值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:31:02