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

如何在Ultimate Thread Group中分批读取CSV用户ID进行API压测?

解决JMeter分批读取CSV用户ID+压测场景配置问题

我来帮你搞定这个分批读取CSV的需求,同时解决Beanshell的问题——其实完全不用写Beanshell脚本,用JMeter原生组件就能稳妥实现你的压测场景,还能避免脚本错误。

核心思路

把你的压测流程拆成两个独立的线程组,分别控制前1000个用户和接下来2000个用户的读取与调用,再通过线程组顺序执行+定时器实现停顿逻辑。

详细配置步骤

1. 调整Test Plan基础设置

首先在Test Plan界面勾选 Run thread groups consecutively(按顺序运行线程组),这样第一个线程组执行完成后才会启动第二个,保证压测顺序符合你的要求。

2. 配置第一个线程组(前1000个用户,1000用户/秒并发)

  • 线程组参数:

    • 线程数:1000
    • Ramp-Up时间:1(1秒内启动所有线程,刚好达到1000用户/秒的并发)
    • 循环次数:1(每个线程只调用一次API)
  • CSV Data Set Config配置:
    给这个线程组添加CSV配置,关键是限制读取的行数范围:

    文件名:你的用户ID.csv文件路径
    变量名:userId
    分隔符:根据你的CSV实际分隔符设置(比如逗号`,`)
    忽略首行:勾选(如果CSV第一行是表头;没有表头就取消勾选)
    起始行:2(如果有表头,数据从第2行开始;无表头则设为1)
    结束行:1001(前1000个用户对应行:有表头时是2-1001,无表头是1-1000)
    循环次数:1
    共享模式:Current thread group(仅当前线程组共享CSV读取状态)
    
  • 添加停顿定时器:
    在第一个线程组的最后添加一个 Random Timer,实现10-15秒的停顿:

    • 固定延迟:10000(10秒)
    • 延迟范围:5000(额外0-5秒随机延迟,总停顿10-15秒)

3. 配置第二个线程组(接下来2000个用户)

  • 线程组参数:

    • 线程数:2000
    • Ramp-Up时间:0(瞬间启动2000个用户;如果需要渐变并发,可设置对应时间,比如1秒就是2000用户/秒)
    • 循环次数:1
  • CSV Data Set Config配置:
    同样添加CSV配置,调整起始和结束行,读取接下来的2000个用户:

    文件名:和第一个线程组相同的CSV路径
    变量名:userId
    分隔符:和之前一致
    忽略首行:和之前一致
    起始行:1002(有表头时,接第一个线程组的结束行;无表头则设为1001)
    结束行:3001(1000+2000=3000个用户,有表头时对应2-3001,无表头是1-3000)
    循环次数:1
    共享模式:Current thread group
    

4. 配置API请求

在两个线程组里分别添加HTTP Request,设置API路径为 <path>/user_id/${userId},确保变量 ${userId} 能正确引用CSV里的用户ID。

为什么不用Beanshell?

你之前遇到的Beanshell错误,大概率是脚本里的IO操作、变量作用域或者语法问题导致的。JMeter的CSV Data Set Config已经内置了起始/结束行的控制能力,完全满足分批读取的需求,用原生组件更稳定、易维护,还能避免手写脚本的各种坑。

如果后续还要处理剩下的7000个用户,只需要继续添加线程组,调整CSV的起始/结束行参数即可,扩展性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:39