【问题标题】:Iterating over each row and accessing every column in HTTP Sampler in JMeter遍历 JMeter 中的 HTTP 采样器中的每一行并访问每一列
【发布时间】:2020-05-10 05:52:46
【问题描述】:

我已经探索并尝试了 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 控制器,但无法产生预期的结果

【问题讨论】:

    标签: jmeter beanshell jmeter-5.0


    【解决方案1】:
    1. 首先,忘记 Beanshell,since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language 用于脚本。
    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++
          }
      })
      

      如果您执行脚本并查看Debug Sampler output,您将看到以下 JMeter 变量

    3. 为了迭代生成的变量,您可以使用ForEach Controller 配置如下:

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

    【讨论】:

    • 感谢 JSR223 的建议,我会研究一下。我想我的句子用错了。根据我的 csv 文件,我想进行 3 次迭代,每行一次迭代,对于每次迭代,我想使用这个特定行中的值来调用 HTTP 采样器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多