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

如何用JMeter的CSVRead()函数实现多线程逐行读取单列多行CSV文件?

用JMeter的CSVRead()函数实现多线程逐行读取单列CSV的方法

嘿,我来一步步教你实现这个需求:

1. 先搞定CSV文件准备

你的Perf_EC.csv是单列10行对吧?先确保文件格式没问题,比如内容大概是这样:

第一行内容
第二行内容
...
第十行内容

方便的话把它放到JMeter的bin文件夹里,这样后面调用的时候直接写文件名就行,省得输一堆绝对路径;要是不想放这儿,就记好它的完整路径,比如D:\test\Perf_EC.csv。

2. 配置线程组

在测试计划里加个线程组,然后这么设置:

  • 线程数:填10——刚好对应你的CSV行数,保证每个线程能分到一行
  • 循环次数:设为1——每个线程只跑一次,读完一行就结束
  • Ramp-Up时间:如果想让所有线程同时启动就设0,要是想分批启动就按需求调,比如1秒启动所有线程也行

3. 用CSVRead()读取内容

在你需要用到CSV内容的地方(比如HTTP请求的参数、BeanShell脚本里),直接插这个函数:

${__CSVRead(Perf_EC.csv,0)}

解释下参数:

  • 第一个参数是CSV的路径,刚才放bin目录就直接写文件名,不然就写绝对路径
  • 第二个参数0是列索引,因为你是单列,JMeter的列索引从0开始,所以就用0

4. 跑起来验证

启动测试后,10个线程会按你设置的方式启动,每个线程都会读取CSV里的一行,而且不会重复读——CSVRead函数默认就是按顺序给每个线程/循环分配行的。等所有线程都跑完一次循环,测试就自动停了,刚好把10行都读完。

额外小技巧:线程数比CSV行数多怎么办?

要是你设置的线程数比CSV行数多,想让文件读完就自动停线程,可以结合If Controller来搞:

  • 加个If Controller,条件写:
    ${__jexl3("${__CSVRead(Perf_EC.csv,0)}" != "EOF",)}
    
  • 把需要执行的取样器都放到这个控制器下面
  • 等CSV读到最后一行,函数会返回EOF,这时候If Controller就不会再执行里面的内容,线程也就自然停了

这样配置完,就完全符合你要的“每个线程读一行,文件读完就停线程”的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:04:11