如何用JMeter CSV Data Set Config按BATCH_SIZE分批读取CSV调用AWS API
JMeter 使用 CSV Data Set Config 实现大CSV分批调用AWS API方案
CSV Data Set Config 本身采用流式读取逻辑,不会一次性加载全量文件到内存,完全适配1GB-2GB的大文件场景,且本方案的文件读取完全依赖该元件原生能力,没有使用JSR223实现CSV读取操作,符合要求。
步骤1:配置线程组基础属性
- 线程数设置为
1,保证CSV按顺序逐行读取不会出现乱序 - 循环次数设置为
永远,后续通过元件规则自动控制停止时机
步骤2:配置CSV Data Set Config
将该元件放在线程组下,参数按如下设置:
- Filename:填写CSV文件的绝对路径
- Variable Names:按CSV列顺序定义变量名,多列用英文逗号分隔,示例:
order_id,user_id,amount - Delimiter:填写CSV实际的列分隔符,默认是
, - Recycle on EOF:设置为
False,文件读完不循环读取 - Stop thread on EOF:设置为
True,文件读完自动终止线程 - Sharing mode:设置为
Current thread group,保证单线程顺序读取的一致性
步骤3:添加计数器统计已读行数
依次点击添加 > 配置元件 > 计数器,参数设置:
- Start:
0 - Increment:
1 - Reference Name:
row_counter - 勾选
Track counter independently for each user
步骤4:添加If控制器判断批次阈值
依次点击添加 > 逻辑控制器 > If Controller,条件填写如下内容:${__jexl3(${row_counter} % ${BATCH_SIZE} == 0,)}
提前在用户自定义变量中配置BATCH_SIZE的取值,比如设置为100就代表每读取100行触发一次AWS API调用
步骤5:配置AWS API调用逻辑
将你需要调用的AWS API请求(HTTP请求或JMeter AWS插件请求)放在If控制器的子节点下:
- 请求参数可直接引用CSV Data Set Config读取到的列变量
- 如果需要传递批次内所有行的聚合数据,可在CSV Data Set Config后添加一个前置的
用户参数元件,每次读取一行后执行变量拼接:${__jexl3(vars.put("batch_data",vars.get("batch_data") + "," + vars.get("order_id") + "|" + vars.get("amount")),)},触发API请求后再清空batch_data变量即可
性能优化注意事项
- 没有带引号的字段时不要勾选CSV Data Set Config的
Allow quoted data选项,开启会小幅降低读取性能 - 1-2GB的CSV不需要提前做分片,CSV Data Set Config的流式读取机制实测内存占用不会超过500MB,不会出现内存溢出问题
- 如果需要多线程并发处理,可提前将CSV拆分为多个分片文件,每个线程对应读取一个分片,避免多线程读取同一份CSV出现行乱序问题
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

