【发布时间】:2019-08-20 19:33:21
【问题描述】:
我正在尝试设置执行此操作的 JMeter 运行:
- 发出 Rest API 请求
- 使用 JSON 提取器检查给定值数组的响应。
- 我将成功定义为所有“Items[*].Success”节点等于“true”
- 如果响应成功,则跳出循环(继续执行步骤#5)
- 如果响应失败,返回步骤 #1
- ...我的其余测试步骤
这是我为此设置的:
- 使用 BeanShell 断言来初始化循环变量:
${__setProperty(is_any_calc_pending,true)};
- 当控制器的条件设置为
${__BeanShell(props.get("is_any_calc_pending")}- 我的问题就在这里,循环永远不会停止
- 进行 Rest API 调用(按预期工作)
- JSON 提取器(这也可以按预期工作)
- 创建变量的名称 = api_successes
- JSON 路径表达式 = $.Items[*].Success
- 比赛编号 = -1
- 计算连接 = 已检查
- 默认值 = unset_api_successes
- 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