JMeter - 反复运行While Controller

时间:2017-09-08 16:34:35

标签: jmeter

目标:

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

当前设置:

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

问题:

我的测试计划工作正常,但只适用于一个网址。它好像忽略了循环计数设置。假设While Controller每个URL发出两个请求,它只会产生两个请求,而不是预期的20个。

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

如何实现理想的行为?

1 个答案:

答案 0 :(得分:1)

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

  1. 首次迭代开始,${response}为空/未定义==>
  2. 进入
  3. while内的某次迭代中,它会设置${response}${__javaScript('${response}'.indexOf("my string") == -1,)}true ==>退出时
  4. 下一次迭代开始。如果此时${response}仍然与上一次迭代相同,则永远不会输入while,因为它已经是真的。
  5. 如果是这种情况,请在迭代开始时重置值。

    要重置该值,请添加BeanShell Sampler并删除变量:

    vars.remove("response");
    

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

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

    如果这不是问题,请在jmeter.log中查找例外情况。可能是因为错误导致您的脚本退出。