我尝试使用Jmeter
从特定文件夹中读取多个csv文件到现在为止,我读了一个csv文件,当X-是文件中的行数时,我可以用一个运行X次的线程循环它。 我在使用bean_shell的线程之前计算了csv文件中的行数:
import org.apache.jmeter.services.FileServer;
String DirPath = FileServer.getFileServer().getBaseDir();
FileReader fileReader = new FileReader(new File(DirPath + "/files/App1.csv"));
LineNumberReader lineReader = new LineNumberReader(fileReader);
int linenumber = 0;
while (lineReader.readLine() != null){
linenumber++;
}
props.put("rowsnumberApp", Integer.toString(linenumber));
现在,当文件夹中的文件数量可以动态更改时,我想从文件夹中读取多个文件,
文件名将是这样的:
APP1
APP2
APP3
...应用
我有这段代码来读取文件夹中的所有文件:
import org.apache.jmeter.services.FileServer;
String DirPath = FileServer.getFileServer().getBaseDir();
File folder = new File(DirPath + "/files");
File[] files = folder.listFiles();
int counter = 1;
for (File file : files) {
vars.put("file_" + counter, file.getAbsolutePath());
counter++;
}
每个文件都有不同的行数(但至少我对所有文件都有相同的soap请求)
我意识到在csv上使用循环控制器只能给出第一行。
正如您所看到的,我已经拥有了从文件夹中读取文件并计算行数的代码部分,
我只需要一种方法来连接所有这些,以便能够循环文件夹中的所有csv文件
所以任何想法?
答案 0 :(得分:0)
使用2个循环,首先保存多少个文件:
vars.put("fileLength", files.length);
使用$ {fileLength}作为循环计数
创建第一个循环添加计数器以0开始最大$ {fileLength}增量1参考名称cnt
内部循环读取为您的第一个beanshell更改为使用计数器
FileReader fileReader = new FileReader(new File(DirPath + "/files/file_" + vars.get("cnt")));
使用计数器更新您当前的实施:
import org.apache.jmeter.services.FileServer;
String currentFileIndex = vars.get("cnt");
String DirPath = FileServer.getFileServer().getBaseDir();
FileReader fileReader = new FileReader(new File(DirPath + "/files/file_" + currentFileIndex ));
LineNumberReader lineReader = new LineNumberReader(fileReader);
int linenumber = 0;
while (lineReader.readLine() != null){
linenumber++;
}
props.put("rowsnumberApp" + currentFileIndex , Integer.toString(linenumber));
答案 1 :(得分:0)
Directory Listing Config插件是最简单的选择
通过这种方式,您将获得一个JMeter变量,您可以在CSV Data Set Config中使用该变量来参数化您的API调用
有关详细信息,请参阅Introducing the Directory Listing Config Plugin on JMeter。
安装目录列表配置插件