我正在尝试设置一个JMeter运行来执行以下操作:
1.发出Rest API请求
- 使用JSON提取器检查给定值数组的响应。
- 我将成功定义为所有“Items[*].Success”节点等于“true”
- 如果响应成功,则退出循环(继续步骤#5)
- 如果响应失败,返回步骤#1
- ...我的其余测试步骤
下面是我为此所做的设置:
- 使用BeanShellAssert初始化循环变量:
- 第一个月
- 当控制器的条件设置为
${__BeanShell(props.get("is_any_calc_pending")}
- "我的问题就在这里,循环永不停止"
- 进行Rest API调用(按预期工作)
- JSON提取器(也按预期工作)
- 创建变量的名称= API_successs
- JSON路径表达式= $.Items[*]。成功
- 匹配编号= -1
- 计算串联=选中
- 默认值=未设置API成功
- JSR 223后处理器设置为Javascript以更新循环变量的值。
下面是第5步的代码,它只是检查JSON提取器创建的api_successes_ALL
变量中是否存在“false”。
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控制器会一直运行直到条件为false。从我在日志中看到的情况来看,条件总是false。我也不明白While控制器为什么从来没有看到我的is_any_calc_pending
的值发生了变化。我可以在调试采样器中看到值发生了变化。
变量被重新初始化了吗?我想知道我的变量或属性是否超出了作用域。
2条答案
按热度按时间3b6akqbq1#
我明白了。我是这么做的:
我没有预料到,但是While控制器可以访问JSON提取器中生成的变量。我认为简单控制器可能导致了这一点。
我把log.warn()调用留在那里,以显示我是如何调试这个条件的。
gojuced72#
找到了
JSON后处理器必须是请求的子级,而不是While循环的子级。
在这上面浪费了几个小时。