如何在IF控制器和While控制器中使用JMeter属性

时间:2019-09-19 17:59:44

标签: groovy jmeter

我正在WHILE控制器外部使用JSR223设置JMeter属性-

if(jsonResponse.currentStatus == "Received")
{   
    props.put("pollCount", 0); 
    def requestId = jsonResponse.id;
    props.put("requestId", requestId); 
    props.put("currentStatus",jsonResponse.currentStatus);
}

然后我要像这样在“ WHILE”控制器中访问这些属性-

((("${__groovy(props.get('currentStatus'))}" == "Received") ||
("${__groovy(props.get('currentStatus'))}" == "Processing")) &&
(${__groovy(props.get('pollCount'))} < 24)) 

在WHILE控制器中,我正在发出HTTP请求以重新检查“ currentStatus”。如果“完成”,那么我的想法是,我将从“ WHILE”控制器中脱颖而出。

类似地,我在“ While Controller”中有一个“ IF Controller”。进行HTTP调用并检查“ currentStatus”之后。然后,我要重置“道具”属性。如果“ currentStatus”是“ Received”或“ Processing”,则进入“ IF Controller”内部,在此我将使用恒定计时器提供30秒的计时器延迟。在“ IF控制器”中,我应用了这样的条件-

(("${__groovy(props.get('currentStatus'))}" == "Received") ||
("${__groovy(props.get('currentStatus'))}" == "Processing"))

但是即使条件为“处理中”,它也不会进入IF控制器。

即使“ currentStatus”设置为“ Completed”,“ While Controller”也将继续无限处理。

看来条件对我不利。我该如何解决它,以便当“ currentStatus”为“ Completed”时,它从“ WHILE Con​​troller”中出来?

2 个答案:

答案 0 :(得分:0)

您是否检查了while控制器中仅放置一个条件?

答案 1 :(得分:0)

您的设置存在多个问题:

  1. 我看到您将pollCount设置为0,但是我看不到您将其递增的位置,因此我希望它始终是0
  2. 您的currentStatus似乎总是Received
  3. 您的props.get('pollCount'))} < 24表达式将失败,因为您正在将IntegerString进行比较
  4. 最重要的是,虽然Controller仅“了解” truefalse条件,但它不会计算3个__groovy()函数,因此您应将多个子句放在一个函数中,类似:

    ${__groovy((props.get('currentStatus').equals('Received') || props.get('currentStatus').equals('Processing')) && (props.get('pollCount') as int) < 24,)}
    

查看6 Tips for JMeter If Controller Usage文章,了解有关JMeter中条件采样器处理的更多详细信息

  

JMeter控制器使用的6条提示