如何检测<;EOF>;一个「;CSV数据集配置";在JMeter中的groovy脚本采样器中?

如何检测<;EOF>;一个「;CSV数据集配置";在JMeter中的groovy脚本采样器中?,groovy,jmeter,Groovy,Jmeter,我想知道,在groovy脚本中,如何对一个事件做出反应。 我正在使用While控制器迭代CSV中的所有行,并在实际测试计划之前生成JMeter变量。我需要对不同的CSV文件执行多次,因此我不想在While控制器中停止线程 我想象的是这样的: if (${CSV_VALUE1} != "<EOF>") { def variableName = sprintf('%1$sVALUE',[${CSV_VALUE2}]) vars.put(variableName,${CSV

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

我想象的是这样的:

if (${CSV_VALUE1} != "<EOF>")
{
    def variableName = sprintf('%1$sVALUE',[${CSV_VALUE2}])
    vars.put(variableName,${CSV_VALUE1});
}
if(${CSV\u VALUE1}!=“”)
{
def variableName=sprintf(“%1$s值”,[${CSV_值2}])
vars.put(variableName,${CSV_VALUE1});
}
CSV_VALUE1是JMeter变量的值,CSV_VALUE2是变量的名称

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

您可以使用“BeanShell”读取“CSV文件”,下面是示例CSV文件,其中包含以下数据

answer1,0
answer2,1
answer3,2
...
answerX,X-1
要阅读此文件,请使用下面的“Beanshell”脚本

import java.text.*;
导入java.io.*;
导入java.util.*;
String filename=“oprosnik_”+vars.get(“fileNum”)+“.csv”;
ArrayList strList=新的ArrayList();
试一试{
文件=新文件(文件名);
如果(!file.exists()){
抛出新异常(“错误:文件“+文件名+”未找到”);
}
BufferedReader bufRdr=新的BufferedReader(新的InputStreamReader(新文件InputStream(文件),“UTF8”));
字符串行=null;
整数i=0;
而((line=bufRdr.readLine())!=null){
strList.add(行);
i++;
}
bufRdr.close();
计数器=Integer.parseInt(vars.get(“计数器”);
如果(计数器!=i){
字符串[]变量=strList.get(counter.split(“,”);
变量put(“答案”,变量[0]);
变量put(“answerNum”,变量[1]);
计数器++;
变量put(“计数器”,Integer.toString(计数器));
}
否则{
变位放置(“回答”,“回答”);
变位放置(“eol”和“);
变容放置(“计数器”,“0”);
}
}
捕获(例外情况除外){
IsSuccess=false;
log.error(例如getMessage());
System.err.println(例如getMessage());
}
捕获(可丢弃的thex){
System.err.println(thex.getMessage());
}

参考检查如下

您可以使用和组合如下方式处理此
案例:

  • While Controller:condition
    ${uuuu javaScript(${CSV\u VALUE1}“!=”,)}
    • 如果控制器:条件<代码>“${CSV_VALUE1}”!=“”
      • 阅读行为模型
      • JSR223取样器

有关详细信息,请参阅文章

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

if ("${CSV_VALUE1}" != "<EOF>")
{
    //Code to execute if the condition is satisfied
}
如果(“${CSV\u VALUE1}”!=”)
{
//满足条件时要执行的代码
}

是的,我以前试过,但对我来说从来都不起作用。调用采样器的次数是允许的次数的1倍,我实际看到日志中有错误:
jmeter.control.IfController:If Controller:error-when-processing[“e1e78ffd-f900-42fd-a8fa-f3ff9f2fc8e6”!=”]org.mozilla.javascript.EvaluatorException:missing;before语句(#1)
我认为问题在于“.”似乎现有id的“”是个问题,另一方面,如果我删除“
jmeter.functions.JavaScript:处理JavaScript时出错:[${ACTIONMODELID}!=”]org.mozilla.JavaScript.evaluatexception:missing;在声明(#1)
之前,我终于让它开始工作了!我的CSV文件包含每个值的引号!这妨碍了一次成功的处决。我需要调整生成CSV的方式。解决方案:我发现,我的问题实际上是一个格式错误的CSV文件,其中每个值都有引号。所以我的方法实际上是正确的,也是可能的,所以我自己也回答了这个问题。谢谢,那也是可能的,但实际上对我来说不是必要的。
if ("${CSV_VALUE1}" != "<EOF>")
{
    //Code to execute if the condition is satisfied
}