首页 > 解决方案 > IfController 未在 forEach 控制器下定义的 Jmeter 中执行

问题描述

在此处输入图像描述IfController 没有在 forEach 控制器下定义的 Jmeter 中执行。

尝试使用 Jmeter 执行以下场景。这可以实现吗?

"- 连接到数据库(使用 JDBC 连接)- 运行 SQL 以获取批处理记录列表,说它返回 B1、B2 和 B3 批处理(使用 JDBC 请求)- 对于获得的每个批处理记录,运​​行 SQL获取相应的货物(使用 ForEach 控制器和 JDBC 请求)- 如果每批中的货物数量小于 5(使用 If 控制器)- 运行新 SQL 以获取同一批次的新货物集(使用ForEach Controller) - 每次发货,调用一个应用程序 API(使用 HTTP 请求)"

我看到第一个 ForEach 控制器已执行,但我没有看到 if 控制器正在执行。为了使 if 控制器中的条件简单,我使用了这个条件 - 1==1 并尝试了这个 (${__jexl3(vars.get("JMeterThread.last_sample_ok")=="true" && (vars.getObject(" shipCount1").size() < 2 ),)})

标签: jmeter

解决方案


您需要从 If Controller 的条件中删除括号,因为它导致(true)无法强制转换为,true因此您的 If Controller 的子级没有执行

正确表达:${__jexl3(vars.get("JMeterThread.last_sample_ok")=="true" && (vars.getObject("shipmentCount1").size() < 2 ),)}

演示:

在此处输入图像描述

如果控制器设置以防万一:

在此处输入图像描述

始终使用调试采样器和查看结果树侦听器组合检查JMeter 函数和/或变量


推荐阅读