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

如何使用JMeter并行执行多组用户的API请求

无需拆分CSV实现多组用户并行执行API请求的方案

针对你不想维护大量拆分后CSV文件的需求,这里提供几个实用方案(以JMeter为例,你提到线程组,推测使用该工具):

方案1:CSV配置+If Controller条件过滤

  • 保留原始500行的CSV文件,在CSV Data Set Config里配置好文件路径、变量名,关闭Recycle on EOF,开启Stop thread on EOF。
  • 给每个用户组对应创建一个If Controller,在条件里用线程编号过滤范围:
    • Set1的条件:${__jexl3(${__threadNum()} <= 100,)}
    • Set2的条件:${__jexl3(${__threadNum()} > 100 && ${__threadNum()} <= 200,)}
    • 以此类推,每个If Controller下放置该组要执行的API请求逻辑。
  • 把线程组的线程数设为500,启动后每个线程对应CSV里的一行数据,只有符合条件的线程才会执行对应组的请求,天然实现并行。

方案2:Parallel Controller插件+CSV行范围配置

  • 通过JMeter插件管理器安装Parallel Controller插件。
  • 在Parallel Controller下创建对应数量的子线程组(比如Set1到Set4各一个),每个子线程组设置线程数为100。
  • 给每个子线程组单独配置CSV Data Set Config,指定Start row和End row:
    • Set1:起始行1,结束行100
    • Set2:起始行101,结束行200
    • 后续组依此类推,这样每个子线程组只会读取CSV里的指定行,不用拆分文件。
  • Parallel Controller会自动让所有子线程组并行执行,完美匹配你的分组并行需求。

方案3:Groovy脚本+Switch Controller动态分组

  • 在测试计划根节点添加JSR223 PreProcessor,用Groovy脚本根据线程编号给当前用户分配组:
    def threadRow = ctx.getThreadNum() + 1 // 线程编号从0开始,加1对应CSV行号
    if (threadRow <= 100) {
        vars.put("userGroup", "Set1")
    } else if (threadRow <= 200) {
        vars.put("userGroup", "Set2")
    } else if (threadRow <= 400) {
        vars.put("userGroup", "Set3")
    } else {
        vars.put("userGroup", "Set4")
    }
    
  • 添加Switch Controller,把Switch Value设为${userGroup},然后在Controller下给每个组创建对应的请求分支。
  • 线程组设500个线程,启动后每个线程会自动匹配到对应的组分支执行请求,实现并行。

这些方案都不需要拆分CSV,哪怕后续组数增加到20-30组,只要调整条件判断或脚本里的范围即可,维护成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:42