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

如何在For Each Controller中传递id与对应price等多组匹配参数?

解决方法

你当前用的For Each控制器只能遍历单组序列变量,无法同步匹配两组对应变量的索引,推荐用以下两种方案实现需求:


方案1:直接复用之前线程提取的id、price变量(无需读取本地文件)

你之前提取id时会生成id_1、id_2...id_N格式的序列变量,提取price时同理生成price_1、price_2...price_N的序列,两组变量同索引值天然配对,按以下步骤调整即可:

  1. 替换原For Each控制器为循环控制器,循环次数设置为${id_matchNr}(id_matchNr是JMeter提取器自动生成的变量,代表提取到的id总个数)
  2. 在循环控制器下新增用户参数前置处理器,添加两个自定义变量:
    • current_id:值为${__V(id_${__intSum(${__jm__循环控制器__idx},1,)})}
    • current_price:值为${__V(price_${__intSum(${__jm__循环控制器__idx},1,)})}

    注:如果你的循环控制器自定义了名称,需要把上面表达式里的循环控制器替换为你自己的控制器名称

  3. 直接在GraphQL请求的变量区域引用${current_id}和${current_price}即可,两组值完全一一对应。

方案2:从已保存的本地文本文件读取配对数据

如果你需要用已经导出的id:price文本文件作为数据源,调整BeanShell采样器逻辑即可:

  1. 把原BeanShell采样器的代码替换为以下内容,读取文件后拆分id和price为配对的序列变量:
import java.io.BufferedReader;
import java.io.FileReader;

int index = 1;
// 替换为你自己的文本文件绝对路径
BufferedReader br = new BufferedReader(new FileReader("D:/test/id_price.txt"));
String line;
while ((line = br.readLine()) != null) {
    line = line.trim();
    if(line.isEmpty()) continue;
    // 按冒号拆分每行内容,最多拆分为2段避免price里包含冒号的情况
    String[] parts = line.split(":",2);
    vars.put("id_"+index, parts[0].trim());
    vars.put("price_"+index, parts[1].trim());
    index++;
}
br.close();
// 存储总数据条数
vars.put("totalCount", String.valueOf(index-1));

注:JMeter 3.1及以上版本推荐把BeanShell采样器替换为JSR223采样器,选择groovy语言,执行效率更高。

  1. 后续步骤和方案1一致:循环控制器的循环次数设置为${totalCount},再通过用户参数配对取值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:03