首页 > 解决方案 > Jmeter:使用 While Controller 进行失败的请求重试,ThreadGroup 循环计数不起作用

问题描述

我添加了一个 While 控制器并尝试多次发送此请求,以防它第一次不起作用或只是尝试实现重试逻辑。

线程组配置为:

  1. 线程(用户) - 1
  2. 循环 - 10

问题:根据线程组配置,它应该运行( while controller * 10 )但它只运行 1 次。

在此处输入图像描述

在我的 Bean 后处理器中:

vars.remove("response_code");
vars.put("response_code",prev.getResponseCode());

在 WhileController 中:

${__jexl3(${response_code} != 200 && ${retries} < 3,)}

任何帮助,将不胜感激!

标签: javajmeterload-testingjmeter-5.0

解决方案


在您的线程组的第二次迭代中,您的${response_code}变量变为200因此它不会进入 While 循环。

${response_code}解决方案是将和${retries}变量都重置为0

  1. JSR223 Sampler添加为线程组中的第一个 Sampler
  2. 将以下代码放入“脚本”区域:

    SampleResult.setIgnore()
    vars.put('response_code', '0')
    vars.put('retries', '0')   
    

另请注意,从 JMeter 3.1 开始,您不应该使用 Beanshell,因此请考虑从 Beanshell PostProcessor 迁移到JSR223 PostProcessor。更多信息:Apache Groovy - 为什么以及如何使用它


推荐阅读