如果Controller未按预期工作

时间:2017-05-11 06:51:01

标签: if-statement jmeter

我正在研究JMeter脚本并尝试从采样器获取响应时间,将其存储到变量中,然后根据响应时间将用户IF Controller置于拆卸线程组中,即如果响应时间为,则发送电子邮件大于300毫秒。

我使用Beanshell post processor

将响应时间存储如下

long duration = prev.getTime(); vars.put("duration", String.valueOf(duration));

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

${duration} > '300'

不确定我在这里做错了什么。任何帮助将不胜感激。

由于

3 个答案:

答案 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个错误:

  1. 变量只是当前线程组的本地变量,如果需要在线程组之间传递它们需要将它们转换为JMeter属性(有关详细信息,请参阅Knit One Pearl Two: How to Use Variables in Different Thread Groups)或使用bsh.shared namespace对于相同的示例代码:

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

    ${__BeanShell(bsh.shared.duration > 300)}
    
  3. 另请注意,持续时间为毫秒,因此您的300 ms阈值可能略低。

答案 2 :(得分:0)

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

全部谢谢