我想知道,如何在一个时髦的剧本中做出反应。 我使用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变量。一个约束是,它必须只在一个单个线程组中完成(=&gt;在EOF上没有停止线程)
答案 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 Controller和While Controller组合处理此<EOF>
个案,例如:
${__javaScript("${CSV_VALUE1}" != "<EOF>",)}
"${CSV_VALUE1}" != "<EOF>"
有关详细信息,请参阅Using the While Controller in JMeter文章
答案 2 :(得分:0)
通过使用带有引号的简单if条件,可以检测CSV数据集的文件结尾:
if ("${CSV_VALUE1}" != "<EOF>")
{
//Code to execute if the condition is satisfied
}