当前位置: 首页 > 知识库问答 >
问题:

在JMeter中的HTTP采样器中迭代每行并访问每列

严易安
2023-03-14

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

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

这是我的CSV文件

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());
        }

虽然循环执行了两次(而不是csv文件中的三行执行了三次),并且总是使用最后一行值
,但我也使用了ForEach控制器,但无法产生所需的结果

共有1个答案

方河
2023-03-14

>

  • 首先,忘记Beanshell,因为JMeter3.1应该使用JSR223测试元素和Groovy语言编写脚本。
  • 其次,如果我正确地理解了您的观点,并且您希望迭代所有的值,即从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变量

    为了迭代生成的变量,您可以使用ForEach控制器,配置如下:

  •  类似资料:
    • null 有什么主意吗?我该怎么做?我知道我不能只使用Once Controller,因为每个请求也是由每个线程执行的。

    • 我创建了一个定制的jmeter java采样器,它在循环中向HTTPendpoint发送请求并解析响应。希望多个线程在单个线程组中运行此采样器。 有人建议,我可以在安装线程组中使用beanshell采样器从csv读取,创建hashmap并使用之类的内容将其存储在JMeter属性中。有人能告诉我这是否是一个合理的方法吗?如果是,我如何访问自定义采样器中的特定JMeter属性? 我找到了这个答案:使用

    • 我在jmeter中有一个测试计划,只有很少的SOAP采样器,我在那里追加请求体计数器值,我正在寻找如何在每个采样器请求之前增加计数器值的方法。 在下面的设置中,jmeter按以下顺序执行请求: 我想实现这样的行为: 计数器起始值:1增量:1最大值:2 我该怎么做呢?我想我应该引入循环控制器?

    • 嗨,伙计们,我把这个作为面试问题来回答,但我遇到了麻烦。我熟悉泛型/集合 问题是:所提供的工作区中包含cocI,它是一个类的开始,该类实现了一个迭代器,可用于迭代集合集合。集合集合被传递到类的构造函数中。迭代器应该首先遍历内容深度。 例如,如果集合集合如下所示: 然后迭代器应按以下顺序返回内容:“A”、“B”、“C”、“D”、“E”、“F” Q.在cocI中提供hasNext()和next()方法

    • 测试结构: Thread1-Sampler1(例如:访问登录表单) 我试着把计时器当作取样器,不管是父母还是孩子。也许我错过了什么,因为没有一个计时器在为我工作。 我已经找到了类似的问题解决方案,但没有一个对我有用:JMeter——在多个线程组之间共享请求之间的延迟Ultimate thread Group中每个线程的延迟

    • 但是根据目前的需求,我们需要从mongodb中获取数据,将这些动态值传递给HTTP请求采样器,我的意思是我们需要根据数据库中的动态值构建HTTP请求采样器? 你能不能请谁帮我一下。