我正在处理一个JMeter脚本,并试图从采样器获取响应时间,将其存储到变量中,然后用户IF Controller在响应时间的基础上拆卸线程组,即如果响应时间大于300毫秒,则发送电子邮件。
我使用以下Beanshell post processor
存储了响应时间
long duration = prev.getTime();
vars.put("duration", String.valueOf(duration));
并尝试使用以下条件在 IF 控制器下触发电子邮件采样器:
${duration} > '300'
不知道我在这里做错了什么。任何帮助将不胜感激。
谢谢
变量不能在线程之间共享。使用属性来存储持续时间,您将能够在拆解线程组中使用它。
long duration = prev.getTime();
props.put("duration", String.valueOf(duration));
之后,您可以使用:
${__P(duration,0(}
"零"是默认值的位置,以防找不到具有给定名称的属性。
顺便说一句,你也可以使用Beanshell/Groovy来获得财产:
vars.put("durationVariable", props.get(duration((;
您那里有 2 个错误:
- 变量
仅是当前线程组的局部变量,如果需要在线程组之间传递它们,则需要将它们转换为 JMeter 属性(有关详细信息,请参阅编织一珍珠二:如何在不同线程组中使用变量(或使用 bsh.shared 命名空间进行相同的示例代码:
long duration = prev.getTime(); bsh.shared.duration = duration
用引号将数字括起来是错误的,因为 JavaScript 会将其视为字符串,您不需要引号。您也可以使用 __Beanshell(( 函数作为 If Controller 子句,如下所示:
${__BeanShell(bsh.shared.duration > 300)}
另请注意,持续时间以毫秒为单位,因此 300 毫秒的阈值可能有点低。
通过使用属性解决了问题,因为它们可以在线程组之间共享。
谢谢大家