If statement 如果控制器未按预期工作

If statement 如果控制器未按预期工作,if-statement,jmeter,If Statement,Jmeter,我正在编写一个JMeter脚本,并试图从采样器获取响应时间,将其存储到一个变量中,然后根据响应时间使用分解线程组中的用户IF控制器,即,如果响应时间大于300毫秒,则发送一封电子邮件 我使用Beanshell后处理器存储了如下响应时间 long duration=prev.getTime; vars.putduration,String.valueOfduration 并尝试使用以下条件在IF控制器下触发电子邮件采样器: ${duration}>“300” 我不知道我做错了什么。任何帮助都将不胜

我正在编写一个JMeter脚本,并试图从采样器获取响应时间,将其存储到一个变量中,然后根据响应时间使用分解线程组中的用户IF控制器,即,如果响应时间大于300毫秒,则发送一封电子邮件

我使用Beanshell后处理器存储了如下响应时间

long duration=prev.getTime; vars.putduration,String.valueOfduration

并尝试使用以下条件在IF控制器下触发电子邮件采样器:

${duration}>“300”

我不知道我做错了什么。任何帮助都将不胜感激


谢谢,线程之间不能共享变量。使用属性来存储持续时间,您将能够在拆卸线程组中使用它

long duration = prev.getTime();
props.put("duration", String.valueOf(duration));
之后,您可以使用:

${u更新时间,0}

如果找不到具有给定名称的属性,则默认值的位置为零

顺便说一句,您还可以使用Beanshell/Groovy来获取属性:

vars.putdurationVariable,props.getduration


您有两个错误:

变量只是当前线程组的本地变量,如果需要在线程组之间传递变量,则需要将它们转换为JMeter属性。有关详细信息,请参阅或使用,示例代码:

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

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

还要注意,持续时间是以毫秒为单位的,所以您的300毫秒阈值可能有点低

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


谢谢大家

谢谢你指出这些。我不知道变量是线程组的本地变量。我现在就试试这个。谢谢-这很有帮助,我的脚本现在运行得很好