如何检测&#34; CSV数据集配置的<eof>&#34;在JMeter的一个groovy脚本采样器中?

时间:2017-02-20 13:55:31

标签: groovy jmeter

我想知道,如何在一个时髦的剧本中做出反应。 我使用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是变量的名称。

Testplan

我也很欣赏更好的解决方案,它们遍历CSV文件的每个行,并根据我的惯例生成JMeter变量。一个约束是,它必须只在一个单个线程组中完成(=&gt;在EOF上没有停止线程)

3 个答案:

答案 0 :(得分:0)

您可以使用&#34; BeanShell&#34;阅读&#34; CSV文件&#34;,下面是示例csv文件,其中包含以下数据

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

要阅读此文件,请使用以下&#34; Beanshell&#34;脚本

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

参考link

进行参考检查

答案 1 :(得分:0)

您可以使用If ControllerWhile Controller组合处理此<EOF>个案,例如:

  • 当控制器:条件${__javaScript("${CSV_VALUE1}" != "<EOF>",)}
    • 如果控制器:条件"${CSV_VALUE1}" != "<EOF>"
      • 阅读 - 动作模型
      • JSR223采样器
      • ...

有关详细信息,请参阅Using the While Controller in JMeter文章

答案 2 :(得分:0)

通过使用带有引号的简单if条件,可以检测CSV数据集的文件结尾:

if ("${CSV_VALUE1}" != "<EOF>")
{
    //Code to execute if the condition is satisfied
}