Java 如何使用jmeter动态读取多个csv文件

Java 如何使用jmeter动态读取多个csv文件,java,jmeter,Java,Jmeter,我正在尝试使用Jmeter从特定文件夹读取多个csv文件 直到现在,我读了一个csv文件,我可以用一个线程循环它,当X-是文件中的行数时,该线程运行X次。 我正在计算csv文件中的行数,然后使用bean_shell执行线程,如下所示: import org.apache.jmeter.services.FileServer; String DirPath = FileServer.getFileServer().getBaseDir(); FileReader fileReader =

我正在尝试使用Jmeter从特定文件夹读取多个csv文件

直到现在,我读了一个csv文件,我可以用一个线程循环它,当X-是文件中的行数时,该线程运行X次。 我正在计算csv文件中的行数,然后使用bean_shell执行线程,如下所示:

    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));
现在,我想从一个文件夹中读取多个文件,当文件夹中的文件数量可以动态变化时

文件名如下所示:

    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));
附件1

附件2

附件3

应用程序

我使用以下代码读取文件夹中的所有文件:

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文件


有什么想法吗?

使用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));

使用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));
插件将是最容易继续的选择

这样,您将获得一个JMeter变量,您将能够在中使用该变量来参数化API调用

有关更多详细信息,请参阅

您可以使用安装目录列表配置插件

插件将是最简单的选择

这样,您将获得一个JMeter变量,您将能够在中使用该变量来参数化API调用

有关更多详细信息,请参阅

您可以使用安装目录列表配置插件


要动态循环每个文件吗?是的,每个文件都有不同的行数要动态循环每个文件吗?是的,每个文件都有不同的行数谢谢,但此解决方案只读取每个文件的第一行,不是吗?当我尝试使用循环控制器循环一个csv文件时,它只读取第一行否,您有一个脚本可以读取所有行,它将在每个文件的循环中调用。我应该如何使用此脚本?因此,我应该对文件夹中的文件量使用循环->对每个文件使用循环->对文件中的行数使用循环->我的soap->,并且每个循环的类型应为:“循环控制器”我理解正确了吗?好的,谢谢。我会尝试一下,如果很快奏效,我会在这里更新。谢谢。谢谢。但是这个解决方案只会读取每个文件的第一行,不是吗?当我尝试使用循环控制器循环一个csv文件时,它只读取第一行否,您有一个脚本可以读取所有行,它将在每个文件的循环中调用。我应该如何使用此脚本?因此,我应该对文件夹中的文件量使用循环->对每个文件使用循环->对文件中的行数使用循环->我的soap->,并且每个循环的类型应为:“循环控制器”我理解正确了吗?好的,谢谢。我会尝试一下,如果它能很快工作,我会在这里更新。谢谢你,当我尝试使用线程时,例如,我输入了线程属性:“线程数”文件数,以及线程属性:“循环计数”我输入了我想要读取的行数,所以有时候它不会循环所有的文件,这看起来很随机,所以我希望你能添加一些例子,当我尝试使用线程时,比如我在线程属性中输入:“线程数”文件数,在线程属性中输入:“循环计数”我输入我想要读取的行数,所以有时候它不会循环所有的文件,而且看起来非常随机,所以如果你能添加一些例子,我会很高兴