我正在研究JMeter脚本并尝试从采样器获取响应时间,将其存储到变量中,然后根据响应时间将用户IF Controller置于拆卸线程组中,即如果响应时间为,则发送电子邮件大于300毫秒。
我使用Beanshell post processor
long duration = prev.getTime();
vars.put("duration", String.valueOf(duration));
尝试使用以下条件在IF Controller下触发电子邮件采样器:
${duration} > '300'
不确定我在这里做错了什么。任何帮助将不胜感激。
由于
答案 0 :(得分:1)
线程之间无法共享变量。使用property存储持续时间,您将能够在tearDown Thread Group中使用它。
long duration = prev.getTime();
props.put("duration", String.valueOf(duration));
之后你可以使用:
$ {__ P(持续时间,0)}
如果找不到具有给定名称的属性,则“零”为默认值。
不过,您还可以使用Beanshell / Groovy获取属性:vars.put(“durationVariable”,props.get(duration));
答案 1 :(得分:0)
你有2个错误:
变量只是当前线程组的本地变量,如果需要在线程组之间传递它们需要将它们转换为JMeter属性(有关详细信息,请参阅Knit One Pearl Two: How to Use Variables in Different Thread Groups)或使用bsh.shared namespace对于相同的示例代码:
long duration = prev.getTime();
bsh.shared.duration = duration
带引号的周围数字是错误的,因为JavaScript会将其视为字符串,您不需要引号。您也可以使用__Beanshell() function作为If Controller子句,如:
${__BeanShell(bsh.shared.duration > 300)}
另请注意,持续时间为毫秒,因此您的300 ms阈值可能略低。
答案 2 :(得分:0)
使用属性解决问题,因为它们可以在线程组之间共享。
全部谢谢