我有一个测试计划,其中有两个线程组,第一个线程组将运行,并将结果记录到文件中,记录的文件将作为第二个线程组的输入。 现在,为了在线程组一中执行此操作,我如下添加了BeanShell PostProcessor脚本,但是它的工作原理如下
如何清除文件并为每次运行重写记录(不关闭jemeter)
import org.apache.jmeter.util.JMeterUtils;
threadName=ctx.getThread().getThreadName();
log.info("threadName: "+threadName);
isHeaderWritten = JMeterUtils.getPropDefault("isHeaderWritten","false");
fileName="C:\\response\\testing.csv";
log.info("isHeaderWritten: "+isHeaderWritten);
if(isHeaderWritten == "true"){
f = new FileOutputStream(fileName, true);
fileHeader = "requestStatus,cNumber,pId,id,token";
}else{
log.error("isHeaderWritten:"+isHeaderWritten);
f = new FileOutputStream(fileName, false);
fileHeader = "requestStatus,cNumber,pId,id,token";
}
p = new PrintStream(f);
this.interpreter.setOut(p);
if(isHeaderWritten == "false"){
print(fileHeader);
JMeterUtils.setProperty("isHeaderWritten", "true");
}
log.info("Test results will be written to file "+fileName);
cNumber=vars.get("cNumber");
log.info("cNumber"+cNumber);
pId = vars.get("pId");
log.info("pId"+pId);
pmId = vars.get("pmId");
log.info("pmId"+pmId);
tTxt = vars.get("tTxt");
log.info("tTxt"+tTxt);
responseCode=prev.getResponseCode();
log.info("responseCode of "+requestString+ " is "+responseCode);
requestStatus = "Success";
if(!"201".equals(responseCode)){
requestStatus = "Failure"+","+cNumber+","+pId+","+pmId+","+tTxt;
}
result = requestStatus;
if("Success".equals(requestStatus)){
responseData=new String(data);
log.info("responseData of "+requestString+ " is "+responseData);
requestString=requestStatus+","+cNumber+","+pId+","+pmId+","+tTxt;
result = requestString;
log.info("result"+result);
}
log.debug(result);
print(result);
f.close();
答案 0 :(得分:0)
属性是JMeter的全局属性,因此可用于在线程和线程组之间进行通信
属性与变量不同。变量是线程本地的;属性是所有线程共有的
因此,一旦执行此行:
JMeterUtils.setProperty("isHeaderWritten", "true");
属性isHeaderWritten
将变为true
,并且将保持true
直到重新启动JMeter。
最简单的解决方案是在测试计划中添加tearDown Thread Group(正在其他线程组之后执行此线程组)并添加JSR223 Sampler使用以下代码:
SampleResult.setIgnore();
org.apache.jmeter.util.JMeterUtils.setProperty("isHeaderWritten", "false");
Since JMeter 3.1 users are encouraged to switch to JSR223 Test Elements and Groovy language用于任何形式的脚本,主要是因为Groovy performance is much better than Beanshell,因此请考虑在下一个可用机会时迁移到JSR223 PostProcessor和Groovy语言