如何在JMeter For Each Controller中使用列表/数组内存储的ID参数
步骤1:调整前置处理器位置并修正代码
你当前将BeanShell PreProcessor放在GraphQL请求的子节点,会导致每次循环都重复读取ID文件,建议先将该前置处理器移动到For Each Controller的同级位置(线程组下、For Each Controller之前),只需读取一次文件即可生成所有ID变量。
修正后的完整代码如下,补充了将ID存入JMeter变量域的逻辑,供For Each Controller识别读取:
// 用vars.get获取JMeter变量,避免占位符解析异常 String filePath = vars.get("filePath"); FileReader fr = new FileReader(filePath); BufferedReader br = new BufferedReader(fr); String line; List idList = new ArrayList(); while ((line = br.readLine()) != null) { idList.add(line.trim()); } // 关闭流避免资源占用 br.close(); fr.close(); // 按「前缀+序号」格式存储ID变量,后缀序号从1开始 for (int i = 0; i < idList.size(); i++) { vars.put("input_id_" + (i+1), idList.get(i)); } // 存储ID总数,可选,方便后续校验 vars.put("id_total", String.valueOf(idList.size()));
步骤2:配置For Each Controller
打开For Each Controller的配置面板,填写以下参数:
- 输入变量前缀:填上一步定义的前缀
input_id - 起始索引(可选):填
1(和我们生成变量时的序号起始值匹配) - 结束索引(可选):留空即可,控制器会自动识别所有带对应前缀的变量,也可以填
${id_total}明确指定范围 - 输出变量名称:自定义,比如填
current_id,这个就是每次循环时存储当前ID的变量名 - 勾选「数字之前加下划线」选项,和我们生成的
input_id_1格式匹配
步骤3:在GraphQL请求中引用ID
在GraphQL HTTP Request的请求体、参数等任何需要用到ID的位置,直接用${current_id}引用即可,每次循环控制器会自动替换成下一个ID。
内容的提问来源于stack exchange,提问作者Shankar PK
相关产品推荐
相关产品推荐

