如何解决当控制器运行无限循环时
在对 http 请求的 http 响应中,我正在使用 while 控制器检查从一种状态到另一种状态的特定字段。但是即使在条件满足之后,while 控制器也不会中断循环。
{
"data": {
"uri": null,"taskId": "f5b6aaf3-8b14-49ba-a495-788eef5c523b","taskStatus": "Ongoing"
},"apiUrl": "http:\/\/.int:8081\/release01-nightly-api\/\/2192_IND_1_40","statusCode": "102"
}
所以上面的响应 "taskStatus": "Ongoing"
将在一段时间后变为 "Successfull"
可能是 20-30 seconds
所以我使用了一个 while 控制器,即使在条件满足后也不会中断。
下面是while控制器的详细信息, 我正在使用 JSON 提取器获取状态 执行快照, 我在这里做错了什么
解决方法
你的表达有误,改成:
${__groovy((!vars.get('task_status').equals('Success') && (vars.get('__jm__While Controller__idx') as int ) < 30),)}
无需其他更改。
今后使用 Debug Sampler 来评估您的表达式
有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - Why and How You Should Use It
,一些东西配置错了,遇到类似情况这是我们实现的解决方案,
-
第一个
http request
和json extractor
看起来不错。 [无需更改] -
现在请在 while 控制器中进行更改
${__javaScript("${task_status}"!="Success" && parseInt(vars.get("statusCounter"))<=30)}
-
在 while 控制器下启动一个
counter
,其值如下starting value
:0
increment
:1
exported variable name
:statusCounter
[根据你的选择给出这个名字] -
在 while 控制器下放置相同的
http request
并添加一个类似于step 1
的 json 提取器。 -
在此请求下添加一个 beanshell 断言和以下代码,
断言的代码块:
try {
if (vars.get("task_status").equals("Success")) {
Failure = true;
FailureMessage = "Workflow Status is not changed : " + vars.get("task_status_Upd");
SampleResult.setStartNextThreadLoop(true);
}
if (vars.get("statusCounter") == 30) {
Failure = true;
FailureMessage = "RequestTimeOut";
SampleResult.setStartNextThreadLoop(true);
}
} catch (Exception ex) {
log.info("Error in beanshell",ex);
throw ex;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。