我已经探索并尝试了Google或StackOverflow上提到的解决方案,但无法解决我的问题。我试图在CSV的每一行中进行迭代,并在 "HTTP Sampler "中使用每一行的每一列。
这是我到现在为止所尝试的。我的测试计划结构
这是我的CSV文件
这是我的CSV数据集配置
我正在使用Bean Shell Sampler读取整个CSV并将其值存储在JMeter属性变量中。 以下是Bean Shell Sampler的代码
import java.text.*;
import java.io.*;
String filename = "load_test_date.csv";
ArrayList strList = new ArrayList();
try{
log.info("starting bean shell");
File file = new File(filename);
if(!file.exists()){
throw new Exception ("ERROR: file " + filename + " not found");
}
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = null;
log.info("while loop starting");
headerLine = br.readLine();
while((line = br.readLine())!=null){
log.info(line);
String[] variables = line.split(",");
props.put("header_1",variables[0]);
props.put("header_2",variables[1]);
props.put("header_3",variables[2]);
props.put("header_4",variables[3]);
props.put("header_5",variables[4]);
}
}catch(Exception ex){
log.error(ex.getMessage());
}
现在我想遍历props变量并获取每一列。我试着使用While控制器和ForEach控制器,但没有得到我想要的输出。
当控制器
当循环执行两次(而不是对csv文件中的三条记录执行三次)并且总是使用最后一行的值时,我也使用了ForEach控制器,但不能产生预期的结果。
第二,如果我没有理解错,你想迭代所有的值,即从1到15,你需要不同的方法,例如将整个文件读到内存中,用逗号分割每一行,并为每个 "单元格 "的值创建一个JMeter变量,Groovy代码的例子是这样的。
SampleResult.setIgnore()
def lines = new File('load_test_date.csv').readLines()
def counter = 1
1.upto(lines.size() - 1, { index ->
def line = lines.get(index)
line.split(',').each { column ->
vars.put('value_' + counter, column)
counter++
}
})
如果你执行脚本,并寻找到 调试采样器输出 您将看到以下JMeter变量
为了迭代生成的变量,你可以使用 对于每个控制器 配置一样。
并使用 ${value}
在HTTP请求采样器中访问下一个 "单元格 "的值,每次迭代。