【问题标题】:Why does my JMeter While Controller Loop Infinitely?为什么我的 JMeter While Controller 无限循环?
【发布时间】:2019-08-20 19:33:21
【问题描述】:

我正在尝试设置执行此操作的 JMeter 运行:

  1. 发出 Rest API 请求
  2. 使用 JSON 提取器检查给定值数组的响应。
    • 我将成功定义为所有“Items[*].Success”节点等于“true”
  3. 如果响应成功,则跳出循环(继续执行步骤#5
  4. 如果响应失败,返回步骤 #1
  5. ...我的其余测试步骤

这是我为此设置的:

  1. 使用 BeanShell 断言来初始化循环变量:
    • ${__setProperty(is_any_calc_pending,true)};
  2. 当控制器的条件设置为
    • ${__BeanShell(props.get("is_any_calc_pending")}
    • 我的问题就在这里,循环永远不会停止
  3. 进行 Rest API 调用(按预期工作)
  4. JSON 提取器(这也可以按预期工作)
    • 创建变量的名称 = api_successes
    • JSON 路径表达式 = $.Items[*].Success
    • 比赛编号 = -1
    • 计算连接 = 已检查
    • 默认值 = unset_api_successes
  5. JSR223 PostProcessor 设置为 Javascript 以更新循环变量的值。

这是我的第 5 步代码。它只是检查 JSON 提取器创建的 api_successes_ALL 变量中是否存在“假”。

var api_successes_ALL = vars.get('api_successes_ALL')
var all_successful = api_successes_ALL.indexOf('false') < 0
props.put('is_any_calc_pending',!all_successful)

大部分都按我的预期工作;我可以使用调试采样器检查这一点。我遇到的问题是循环永远不会停止。该条件永远不会导致循环中断。

在日志中,我看到了这一行:

DEBUG o.a.j.c.WhileController: Condition value: 'false'

文档说 While 控制器将继续运行,直到条件为假。从我在日志中看到的情况来看,条件总是错误的。我也不明白为什么 While 控制器永远不会看到我的 is_any_calc_pending 的值发生变化。我可以在 Debug Sampler 中看到值发生了变化。

变量是否以某种方式重新初始化?我想知道我的变量或属性是否超出范围。

【问题讨论】:

    标签: javascript while-loop jmeter beanshell


    【解决方案1】:

    我明白了。这是我所做的:

    • 简单控制器(我不确定这是否必要)
      • 调用 Rest API 来启动进程
      • 当控制器时,请参阅下面的条件代码
        • 调用 Rest API 来检查状态
        • JSON 提取器具有我在问题中列出的相同属性值

    我没想到,但 While 控制器可以访问 JSON 提取器中生成的变量。我认为简单控制器可能导致了这种情况。

    当控制器条件。我将 log.warn() 调用留在了那里,以显示我是如何调试条件的。

    ${__javaScript(
        log.warn( vars.get("api_successes_ALL") );
    
        !!vars.get("api_successes_ALL") ?
        (vars.get("api_successes_ALL").indexOf("false") >= 0) :
        "true";
    )}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2018-04-30
      • 2016-07-27
      • 2011-11-15
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多