微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当控制器运行无限循环时

如何解决当控制器运行无限循环时

在对 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控制器的详细信息,

enter image description here

我正在使用 JSON 提取获取状态

enter image description here

执行快照,

enter image description here

在这里做错了什么

解决方法

你的表达有误,改成:

${__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

,

一些东西配置错了,遇到类似情况这是我们实现的解决方案,

  1. 第一个 http requestjson extractor 看起来不错。 [无需更改]

  2. 现在请在 while 控制器中进行更改 ${__javaScript("${task_status}"!="Success" && parseInt(vars.get("statusCounter"))<=30)}

  3. 在 while 控制器下启动一个 counter,其值如下

    starting value0

    increment1

    exported variable name : statusCounter [根据你的选择给出这个名字]

  4. 在 while 控制器下放置相同的 http request 并添加一个类似于 step 1 的 json 提取器。

  5. 在此请求下添加一个 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?