【问题标题】:Controller inside While Controller in jmeter控制器在 jmeter 中的 While 控制器
【发布时间】:2018-06-26 01:03:05
【问题描述】:

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

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

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

里面有一个JSR223 PreProcessor,里面有:

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

想法很简单,while循环使用预处理器检查变量TypeCode的值(根据JSON响应可以是ADT、CHD或INF),然后使用这个变量根据此变量在特定的 POST 请求之间进行选择。

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

它是这样的:

【问题讨论】:

    标签: jmeter


    【解决方案1】:

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

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

    SampleResult.setIgnore()
    

    还可以考虑在您的 While 控制器中切换到 __groovy() function,因为它是 recommended 以使用 the most performing scripting option

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

    【讨论】:

    • 谢谢!这在第一次尝试jaja时有效。如何将当前的开关条件 (${state}) 更改为 groovy 函数
    【解决方案2】:

    如果你想在while循环中执行特定的代码块

    您可以通过在 while loop.. 中使用 If controller 来做到这一点。

    在你的 while 循环中添加一个 if 控制器 ..

    对于类型代码 ADT,您可以使用

    ${__javaScript(vars.get("TypeCode")=="ADT")}
    

    条件必须被评估为真或假,所以如果你使用${TypeCode}=="ADT" 它不起作用

    有关 while 循环的更多信息,请关注 this link

    如果有帮助请告诉我..

    【讨论】:

    • 谢谢,但我已经尝试过了,无论条件评估为真还是假,我都不会工作。我想这是因为正如下面的答案所说,预处理器只在采样器之前执行,而不是控制器。将我的 PreProcessor JSR223 切换到 JSR223 采样器是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多