我尝试在JSR223 PostProcessor
中使用以下代码在每次迭代中保存对CSV
文件的响应。
if(${__groovy(ctx.getPreviousResult().getResponseCode(),)} == "200"){
vars.put("response", prev.getResponseDataAsString());
String res="${response}";
FileWriter fstream = new FileWriter("logresult.csv",true);
fstream.write(res+"\n");
fstream.close();
}
我假设csv文件应与jmx放在同一文件夹中创建,但执行后不存在。我在一个线程中执行测试。
答案 0 :(得分:1)
请勿在JSR223脚本中使用${}
语法作为JMeter best practices的一部分
if(prev.getResponseCode() == "200"){
String res=prev.getResponseDataAsString();
vars.put("response", res);
FileWriter fstream = new FileWriter("logresult.csv",true);
fstream.write(res+"\n");
fstream.close();
}
确保脚本不使用
${varName}
使用任何变量,因为缓存将仅使用${varName}
的第一个值。而是使用:vars.get("varName")
答案 1 :(得分:1)
您的语法不正确,您需要将第一行修改为:
if(prev.getResponseCode().equals('200')){
您也根本不需要此行
String res="${response}";
请使用以下内容:
fstream.write(vars.get('response')+"\n");
有关全面的解释,请参见JSR223 Sampler documentation,相关引用:
JMeter在将脚本字段传递给解释器之前先处理函数和变量引用,因此这些引用将只解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这可能会导致语法错误。
通常,您会走错方向,以防万一如果您使用> 1个线程运行测试,则可能会遇到race condition的情况,因为有2个线程将写入同一文件。
如果您必须将响应存储到单独的文件中,我建议: