如果控制器未按预期工作



我正在处理一个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 个错误:

    变量
  1. 仅是当前线程组的局部变量,如果需要在线程组之间传递它们,则需要将它们转换为 JMeter 属性(有关详细信息,请参阅编织一珍珠二:如何在不同线程组中使用变量(或使用 bsh.shared 命名空间进行相同的示例代码:

    long duration = prev.getTime();
    bsh.shared.duration = duration
    
  2. 用引号将数字括起来是错误的,因为 JavaScript 会将其视为字符串,您不需要引号。您也可以使用 __Beanshell(( 函数作为 If Controller 子句,如下所示:

    ${__BeanShell(bsh.shared.duration > 300)}
    

另请注意,持续时间以毫秒为单位,因此 300 毫秒的阈值可能有点低。

通过使用属性解决了问题,因为它们可以在线程组之间共享。

谢谢大家

最新更新