我正在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 Controller”中出来?
答案 0 :(得分:0)
您是否检查了while控制器中仅放置一个条件?
答案 1 :(得分:0)
您的设置存在多个问题:
pollCount
设置为0
,但是我看不到您将其递增的位置,因此我希望它始终是0
currentStatus
似乎总是Received
props.get('pollCount'))} < 24
表达式将失败,因为您正在将Integer与String进行比较最重要的是,虽然Controller仅“了解” true
或false
条件,但它不会计算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条提示