我在一个文件夹中有多个测试CSV文件(大约20个文件,每个文件中有一百万条记录(只有一列ID))。我想使用这些数据进行性能测试。
要循环浏览文件,我已取得进展,但我遇到了一个问题。首先,我将解释到目前为止我所取得的成就,然后是我遇到的问题。
file_1 = /Users/Code/JMeter-Campaign/data/file_1.txt
import java.io.*;
File fileDir = new File("/Users/Code/JMeter-Campaign/data");
File[] fList = fileDir.listFiles();
int counter = 1;
for (File file:fList) {
if (! file.isHidden()) {
vars.put("file_" + counter, file.getAbsolutePath());
log.info("file_" + counter + "=" + vars.get("file_" + counter));
counter++;
}
}
ForEach
控制器添加到循环中。字段和值如下。 输入变量前缀:文件
启动循环索引:0
输出变量名称:USER_FILE
在编号前添加_ - 选中
添加Beanshell预处理器作为ForEach
控制器的子代。
转换道具中的变量。
props.put("UserFile", vars.get("USER_FILE"));
添加了CSV数据集配置作为ForEach
控制器的子项。
文件名:$ {__ P(UserFile,)}
Delimeter:,
首先,我正在测试一个简单的场景 - 3个文件(file_1,file_2和file_3),每个文件有1个记录。
它循环遍历所有3个文件(使用log.info,debug sampler,view results tree调试),但数据仅来自最后一个文件。 因此对于file_1,数据来自file_3
jmeter.log中的观察者,jmeter.services.FileServer始终指向第3个文件。
是否有更好的方法来参数化测试CSV文件?我想用第一个文件中的所有记录运行测试,然后是第二个文件,依此类推。这将阻止服务器端缓存。
答案 0 :(得分:2)
您无法以这种方式参数化CSV数据集配置,因为在测试树加载期间正在填充文件路径。您所能做的就是通过-J
命令行参数来定义属性,如
jmeter -Jpath=/some/path.csv -n -t ....
并在CSV数据集配置中使用__P()函数,例如${__P(path,)}
。但是这样你就无法进行迭代。
所以我建议考虑在执行期间评估的__CSVRead()函数,因此它可能包含变量。
有关上述和其他JMeter功能的更多详细信息,请参阅Functions and Variables用户手册章节和How to Use JMeter Functions帖子系列。