如何在JMeter中通过JDBC从PostgreSQL获取随机ID数组并传入REST API JSON
解决JMeter中REST API多对象数组随机ID填充问题
方法一:一次性查询多个随机ID,直接拆分使用
- 修改JDBC预处理器的SQL语句,直接从PostgreSQL获取指定数量的随机ID,比如要3个就写:
SELECT id FROM your_table ORDER BY RANDOM() LIMIT 3; - 在JDBC预处理器的「变量名」栏填写
ids,执行后JMeter会自动生成ids_1、ids_2、ids_3(对应每个ID)和ids_#(对应ID总数)这几个变量。 - 如果是固定数量的对象数组,直接在JSON请求体里逐个引用变量:
[ {"ID": "${ids_1}", "otherProp": "value1"}, {"ID": "${ids_2}", "otherProp": "value2"}, {"ID": "${ids_3}", "otherProp": "value3"} ] - 如果数量不固定,用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,逐步组装数组
适合需要动态控制对象数量的场景:
- 添加「循环控制器」,设置循环次数为你需要的对象数量(可以用变量动态指定)。
- 在循环控制器内添加JDBC预处理器,每次查询一个随机ID,将结果存到临时变量
current_id。 - 添加「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) - 在HTTP请求的JSON消息体中,用Groovy把列表转为JSON:
${__groovy(new groovy.json.JsonBuilder(vars.getObject('api_items')).toPrettyString(),)}
注意事项
- 确保JDBC连接配置正确,能正常访问PostgreSQL数据库。
- 使用Groovy时,注意语法格式,尤其是引号和括号的配对。
- 变量名不要重复,避免覆盖已有值。
内容的提问来源于stack exchange,提问作者NPAL
相关产品推荐
相关产品推荐

