【问题标题】:JMeter - repeatedly run a While ControllerJMeter - 重复运行 While 控制器
【发布时间】:2017-09-08 16:34:35
【问题描述】:

目标:

我想访问 http:localhost/path/item/${id} 形式的 10 个不同 URL,其中 id 是一个随机变量。对于这些 URL 中的每一个,我都想请求它们,直到响应返回指定的字符串。

当前设置:

我有一个带有 Http 请求的 While 控制器。条件类似于${__javaScript('${response}'.indexOf("my string") == -1,)}response 变量通过 JSON 提取器保存)。我还将线程组中的循环计数设置为 10。

问题:

我的测试计划运行良好,但仅适用于一个 URL。就好像它忽略了循环计数设置。假设 While Controller 每个 URL 发出两个请求,它总共只发出两个请求,而不是预期的 20 个。

这很令人费解,因为如果我使用循环数为 5 的循环控制器,它总共会发出 50 个请求。

我怎样才能达到预期的行为?

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    在没有看到整个计划的情况下无法 100% 确定,但我怀疑这是因为在达到 true 条件后,您没有为下一次迭代取消设置 ${response}。即

    1. 第一次迭代开始,${response} 为空/未定义 ==> 进入 while
    2. while 内的某个迭代中,它设置了${response},所以${__javaScript('${response}'.indexOf("my string") == -1,)} 给出true ==> 而退出时
    3. 下一次迭代开始。如果此时${response} 仍与之前的迭代相同,则永远不会进入while,因为它已经是真的了。

    如果是这种情况,请在迭代开始时重置值。

    要重置该值,请添加一个 BeanShell 采样器并删除一个变量:

    vars.remove("response");
    

    或将其值设置为空/其他:

    vars.put("response", "");
    

    如果这不是问题,请在jmeter.log 中查找异常。可能是您的脚本由于错误而退出。

    【讨论】:

    • 这听起来是对的,但我将如何取消设置 response 变量?目前它在 while 控制器内的 JSON 提取器中被分配。如何在线程组循环计数的每次迭代中取消设置它?
    • @JaimeTur 将其添加到解决方案中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2022-07-15
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多