在JMeter中迭代每一行,访问HTTP Sampler中的每一列。

问题描述 投票:0回答:1

我已经探索并尝试了Google或StackOverflow上提到的解决方案,但无法解决我的问题。我试图在CSV的每一行中进行迭代,并在 "HTTP Sampler "中使用每一行的每一列。

这是我到现在为止所尝试的。我的测试计划结构

enter image description here

这是我的CSV文件

enter image description here

这是我的CSV数据集配置

enter image description here

我正在使用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控制器,但没有得到我想要的输出。

当控制器

enter image description here

当循环执行两次(而不是对csv文件中的三条记录执行三次)并且总是使用最后一行的值时,我也使用了ForEach控制器,但不能产生预期的结果。

jmeter beanshell jmeter-5.0
1个回答
0
投票
  1. 首先,忘记Beanshell。从JMeter 3.1开始,你应该使用JSR223测试元素和Groovy语言。 的脚本。
  2. 第二,如果我没有理解错,你想迭代所有的值,即从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变量

    enter image description here

  3. 为了迭代生成的变量,你可以使用 对于每个控制器 配置一样。

    enter image description here

  4. 并使用 ${value} 在HTTP请求采样器中访问下一个 "单元格 "的值,每次迭代。

    enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.