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

如何在JMeter的JSON POST请求中关联匹配两个CSV文件的变量

JMeter 按公司ID匹配Profile批量生成请求方案

全程无需Java编码,所有脚本可直接复制使用,仅需修改对应文件路径即可。

测试计划层级结构参考

你可以按照以下层级添加对应组件:

  • 测试计划
    • 线程组(按需求设置并发用户数、循环次数)
      • CSV数据集配置(读取用户登录信息)
      • JSR223 前置处理器(全局预加载Profile数据,仅执行1次)
      • 登录接口请求(你已有的登录配置保持不变)
      • JSR223 前置处理器(生成当前用户对应Profile的JSON数组)
      • 生成报告POST请求

步骤1:配置用户登录CSV数据集

右键线程组添加 -> 配置元件 -> CSV数据集配置,参数设置如下:

  • 文件名:选择你存储userid、companyid、password的CSV文件路径
  • 变量名称:userid,companyid,password
  • 分隔符:,
  • 勾选每次迭代重新读取、在所有线程间共享,其余选项保持默认即可。

步骤2:配置全局Profile预加载脚本

右键线程组添加 -> 前置处理器 -> JSR223 前置处理器,脚本语言选择Groovy,将以下脚本复制到输入框中,仅需修改profile CSV的路径:

// 测试启动时仅执行1次,避免重复加载数据
if (props.get("profilesLoaded") != "true") {
    // 替换为你第二个存储profileid、companyid的CSV文件绝对路径
    def profileCsvPath = "C:/xxx/xxx/profiles.csv"
    def companyProfileMap = [:]
    
    new File(profileCsvPath).eachLine { line, lineNum ->
        // 跳过CSV表头行,如果你没有表头就删掉这行
        if (lineNum == 1) return
        def fields = line.split(",").collect { it.trim() }
        def pid = fields[0]
        def cid = fields[1]
        // 按companyid分组存储所有对应profileid
        if (!companyProfileMap.containsKey(cid)) {
            companyProfileMap.put(cid, [])
        }
        companyProfileMap.get(cid).add(pid)
    }
    // 存储到全局属性,所有线程共用
    props.put("companyProfileMap", companyProfileMap)
    props.put("profilesLoaded", "true")
}

步骤3:配置Profile数组生成脚本

在你的生成报告POST请求前,添加一个JSR223 前置处理器,同样选择Groovy语言,复制以下脚本:

// 读取当前登录用户的companyid
def currentCompanyId = vars.get("companyid")
// 从全局分组数据中拿到对应所有profileid
def matchedProfiles = props.get("companyProfileMap").get(currentCompanyId)
// 直接生成JSON数组格式的字符串存入变量
def jsonArray = new groovy.json.JsonBuilder(matchedProfiles).toString()
vars.put("profileJsonArray", jsonArray)

执行完该脚本后,你会得到一个名为profileJsonArray的变量,里面就是当前用户所有符合要求的profileid组成的JSON数组。

步骤4:配置POST请求体

在生成报告的POST请求的Body Data中,直接引用变量即可,示例结构如下:

{
    "userId": "${userid}",
    "reportType": "custom",
    "profiles": ${profileJsonArray}
}

不需要做任何循环处理,不管符合条件的profile有多少条,都会一次性全部填入数组中。


注意事项

  • 两个CSV文件不要包含多余空行,确保字段分隔符为英文逗号
  • 如果你不需要跳过CSV表头,将步骤2脚本中的if (lineNum == 1) return删掉即可
  • Groovy为JMeter默认支持的脚本语言,不需要额外安装任何插件

内容的提问来源于stack exchange,提问作者simón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:03