目标:
我想访问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个请求。
如何实现理想的行为?
答案 0 :(得分:1)
如果没有看到整个计划,就无法100%确定,但我怀疑这是因为在达到${response}
条件后,您没有为下一次迭代取消true
。即。
${response}
为空/未定义==> while
内的某次迭代中,它会设置${response}
,${__javaScript('${response}'.indexOf("my string") == -1,)}
会true
==>退出时${response}
仍然与上一次迭代相同,则永远不会输入while
,因为它已经是真的。如果是这种情况,请在迭代开始时重置值。
要重置该值,请添加BeanShell Sampler并删除变量:
vars.remove("response");
或将其值设置为空/其他:
vars.put("response", "");
如果这不是问题,请在jmeter.log
中查找例外情况。可能是因为错误导致您的脚本退出。