要记录测试场景的总时间,我在JSR223 PostProcessors中使用Groovy脚本来捕获脚本之前和之后的时间戳。
捕获场景开始时间戳的脚本:
def scenario_start = System.currentTimeMillis().toString();
vars.put("scenario_start", scenario_start);
当我想为一个客户附加结果时,我想使用第二个groovy脚本将结果附加到输出文件:
def scenario_end = System.currentTimeMillis().toString();
def scenario_start = vars.get("scenario_start");
def cm = vars.get("CUSTOMER_NUMBER");
log.debug("scenario_start = " + scenario_start);
log.debug("scenario_end = " + scenario_end);
log.debug("CUSTOMER_NUMBER = " + cm);
File file = new File("logs/output/scenario_times_idtv.txt").newOutputStream().withWriter { out ->
out.append(cm + ";" + scenario_start + ";" + scenario_end);
}
实际结果是我日志中的第一行:每次都会覆盖scenario_times_idtv.txt。
我已使用out.append
,out.println
,new File("...").withWriter {...}
,new File("...").newOutputStream().withWriter {...}
但我每次都会在日志中获得一行数据。
我无法找到如何正确地将新结果附加到日志文件中。
感谢您经验丰富的投入!
答案 0 :(得分:1)
我不是非常Groovy专家,但回忆起在JMeter soap response - data analysis
回答类似问题使用Beanshell。
我想如果你改变你的代码行
File file = new File("logs/output/scenario_times_idtv.txt").newOutputStream().withWriter { out ->
out.append(cm + ";" + scenario_start + ";" + scenario_end);
类似于:
FileOutputStream file = new FileOutputStream("logs/output/scenario_times_idtv.txt", true);
file.append((cm + ";" + scenario_start + ";" + scenario_end).getBytes());
file.flush();
file.close();
您的脚本将按预期运行。注意FileOutputStream的true
参数。它告诉流附加现有文件。也许有一个Groovy模拟,但这一点应该也可以。