【问题标题】:How can I detect <EOF> of a "CSV data set config" in a groovy script sampler in JMeter?如何在 JMeter 的 groovy 脚本采样器中检测“CSV 数据集配置”的 <EOF>?
【发布时间】:2017-02-21 16:52:49
【问题描述】:

我想知道,如何在 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 是变量名。

Testplan

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

【问题讨论】:

  • 解决方案:我发现,我的问题实际上是一个格式错误的 CSV 文件,其中的每个值都带有引号。所以我的方法实际上是正确的并且是可能的,因此我自己也回答了这个问题。

标签: groovy jmeter


【解决方案1】:

您可以使用“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());
}

参考link查看

【讨论】:

  • 谢谢,这也是可能的,但实际上对我来说没有必要。
【解决方案2】:

您可以使用If ControllerWhile Controller 组合处理这种&lt;EOF&gt; 案例:

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

详见Using the While Controller in JMeter文章

【讨论】:

  • 是的,我以前试过这个,但它从来没有为我工作过。使用 调用 Sampler 的次数比允许的多 1 倍我实际上看到日志中有错误:jmeter.control.IfController: If Controller: error while processing [""e1e78ffd-f900-42fd-a8fa-f3ff9f2fc8e6"" != "&lt;EOF&gt;"] org.mozilla.javascript.EvaluatorException: missing ; before statement (&lt;cmd&gt;#1)
  • 我认为问题出在“。似乎具有现有 id 的“”是一个问题,另一方面,如果我删除“这是 的问题:jmeter.functions.JavaScript: Error processing Javascript: [${ACTIONMODELID} != "&lt;EOF&gt;"] org.mozilla.javascript.EvaluatorException: missing ; before statement (&lt;cmd&gt;#1) 跨度>
  • 我终于把它带到了工作中!我的 CSV 文件包含其中每个值的引号!这阻止了成功执行。我需要调整 CSV 的生成方式。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2016-10-18
    • 2018-04-10
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多