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

如何在JMeter中的groovy脚本采样器中检测“CSV数据集配置”的?

储毅
2023-03-14

我想知道,如何在groovy脚本中对a做出反应。我正在使用While控制器迭代CSV中的所有行,并在实际测试计划之前生成JMeter变量。对于不同的CSV文件,我需要多次执行此操作,因此我不想在While控制器中停止线程。

我想象了这样的事情:

if (${CSV_VALUE1} != "<EOF>")
{
    def variableName = sprintf('%1$sVALUE',[${CSV_VALUE2}])
    vars.put(variableName,${CSV_VALUE1});
}

CSV_VALUE1是JMeter变量的值,CSV_VALUE2是变量的名称。

测试计划

我也很欣赏更好的解决方案,它遍历CSV文件的每一行,并根据我的约定生成JMeter变量。一个限制是,它必须只在一个单个线程组中完成(=>在EOF上不停止线程)

共有2个答案

李俊雅
2023-03-14

您可以使用If控制器和While控制器组合来处理此 情况,如下所示:

  • While Controller:condition${__javascript(“${CSV_VALUE1}”!=“ ”,)}
    • if Controller:condition“${CSV_VALUE1}”!=“
      • 读取操作模型
      • JSR223采样器
      • ...

      有关详细信息,请参见在JMeter文章中使用While控制器

汤洋
2023-03-14

您可以使用“BeanShell”读取“csv文件”,下面是示例csv文件,其数据如下

answer1,0
answer2,1
answer3,2
...
answerX,X-1

要阅读此文件,请使用下面的“BeanShell”脚本

import java.text.*;
import java.io.*;
import java.util.*;

String filename = "oprosnik_" + vars.get("fileNum") + ".csv";

ArrayList strList = new ArrayList();     

try {
    File file = new File(filename);

    if (!file.exists()) {
        throw new Exception ("ERROR: file " + filename + " not found");
    }

    BufferedReader bufRdr = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
    String line = null;
    Integer i = 0;

    while((line = bufRdr.readLine()) != null) {
        strList.add(line);
        i++;
    }

    bufRdr.close();            
    counter = Integer.parseInt(vars.get("counter"));
    if (counter != i) {
        String[] variables = strList.get(counter).split(",");
        vars.put("answer",variables[0]);
        vars.put("answerNum",variables[1]);
        counter++;
        vars.put("counter",Integer.toString(counter));
    }
    else {
            vars.put("answer","<EOF>");
            vars.put("eol","<EOF>");
            vars.put("counter","0");
    }
}
catch (Exception ex) {
    IsSuccess = false; 
    log.error(ex.getMessage());
    System.err.println(ex.getMessage());
}
catch (Throwable thex) {
    System.err.println(thex.getMessage());
}

For reference check以下链接

 类似资料:
  • 从JSR223采样器,我可以使用变量访问当前测试元素。 从那里,我如何导航< code>TestElement对象的树?例如,我如何访问父测试元素(然后它是父的,等等)或者我如何访问< code>TestPlan测试元素? 背景: 我想使用Groovy从JSR223采样器中动态创建一个JDBC连接配置元素。 从其他问题(例如,这里)和网络搜索(例如,这里),我知道如何自上而下地创建测试计划元素(例

  • 我在jmeter中面临一个问题,我想知道我能否解决这个问题。我需要在远程计算机上运行一个脚本。当我在电脑上通过命令行运行脚本时,它正在工作。 我想在我的计算机上用Jmeter运行它(与脚本运行相同)。我尝试了ssh采样器,但没有成功。我想使用操作系统采样器。可以吗?我可以在远程计算机上运行脚本吗?我找到的唯一解释来自blazemeter网站,并提到:“同样,由于通过操作系统进程采样器运行“plin

  • 我正在创建一个Jmeter docker容器。测试输入由CSV(数据集配置)驱动。我需要在脚本中设置什么文件名路径

  • 我有一个包含CSV文件的目录。每个文件都包含我想用JMeter发出的GET请求列表。我想要做的是读取一个目录中的所有文件,然后循环通过每个CSV在JMeter中发送请求。文件的数量不一致,所以我不想将文件名硬编码到CSV采样器中。 因此,实际上,我希望读取目录中的所有文件,并将这些文件存储在一个数组变量中。循环遍历数组并将CSV文件发送给CSV采样器,然后CSV采样器读取CSV文件并将内容传递给H

  • 你能建议如何用contains语法重写下面的动态名称代码吗?请参考所附的屏幕截图。多谢.

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