jmeter - 在 JMeter 的 HTTP 采样器中遍历每一行并访问每一列
问题描述
我已经探索并尝试了 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 控制器,但它没有给我想要的输出。
而控制器
While 循环执行两次(而不是 csv 文件中的三行执行三次)并且始终使用最后一行值
,我也使用了 ForEach 控制器,但无法产生所需的结果
解决方案
- 首先,忘记 Beanshell,从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言编写脚本。
其次,如果我正确理解了您的观点并且您想要迭代所有值,即从 1 到 15,您需要不同的方法,例如将整个文件读入内存,用逗号分隔每一行并为每个“创建一个 JMeter 变量” cell" 值,示例 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++ } })
如果您执行脚本并查看Debug Sampler 输出,您将看到以下 JMeter 变量
为了迭代生成的变量,您可以使用配置如下的ForEach 控制器:
并
${value}
在 HTTP 请求采样器中使用以在每次迭代时访问下一个“单元格”值:
推荐阅读
- javascript - 如何使用javascript检查上传到服务器的文件是否为空白?
- django - 如何关联模型并使用它
- perl - 如果文件不存在,则从目录中删除文件时的 Perl 警告
- c++ - 查找数组中重复(重复)数字的索引
- javascript - React - 如何从令牌网址查看图像?
- css - Angular Material 图标按钮格式
- regex - 使用正则表达式提取具有特定模式的第一行
- python - 如何过滤 pydatatable 列中的 NA 值?
- javascript - 将带有js结果的jsp注入html>body>div
- rust - 除非我使用临时变量,否则为什么我不能推入 Vec 的 dyn Trait?