首页 > 解决方案 > 控制器在 jmeter 中的 While 控制器

问题描述

我有一个 while 控制器重复相同的请求,直到满足条件。在这个控制器内部,我想根据while 循环外的 GET 请求给出的JSON 响应来选择一个特定的 HTTP 请求。

因此我的逻辑是设置一个while控制器(当前工作)

${__javaScript(parseInt(${counterApis})<=parseInt(vars.get("FirstNames_matchNr")),)}

其中内部有一个 JSR223 PreProcessor,具有以下内容:

vars.put("TypeCode",vars.get("TypeCodes_"+vars.get("counterApis")));

思路很简单,while 循环使用预处理器检查变量 TypeCode 的值(可以是 ADT、CHD 或 INF,具体取决于 JSON 响应),然后使用此变量根据此变量在特定 POST 请求之间进行选择.

问题:由于某种原因,当我尝试在 while 控制器中添加 IF 控制器或 SWITCH 控制器时,脚本崩溃并且无法访问任何 POST 请求。

这是它的样子: 如果控制器 开关控制器

标签: jmeter

解决方案


您使用了错误的 JSR223 测试元素。JSR223 PreProcessors在采样器之前执行,因此您的 Switch Controller 根本不会收到必要的输入。

将 JSR223 PreProcessor 更改为JSR223 Sampler,我相信您的脚本将按预期开始工作。如果您不想在测试结果中看到 JSR223 采样器,可以将以下行放在某处:

SampleResult.setIgnore()

还可以考虑在您的 While 控制器中切换到__groovy() 函数,因为建议使用性能最高的脚本选项

javaScript 不是用于 JMeter 性能的最佳脚本语言。如果您的计划需要大量线程,建议使用__jexl3or__groovy函数。


推荐阅读