0

下面的代码在 While 控制器 ${__jexl3(${__jm__While Controller__idx} < 3 && "${responseCode}" != "200",)}

在此处输入图像描述

在此处输入图像描述

以上是正则表达式提取器

结果:对于成功的请求,它也循环了 3 次,但我只想为失败的请求循环,对于成功的请求,它应该执行一次提前谢谢

4

2 回答 2

0

您的正则表达式提取器配置不正确,您需要将其应用于Response Code,而不是Body

在此处输入图像描述

使用您当前的配置,它会从响应正文中提取第一个数值,并且HTTP 状态代码不存在,这是一个特殊的响应标头

于 2021-08-03T06:35:47.880 回答
0

采用While ControllerIf ControllersFlow Control Action (FCA) 控制器的另一个解决方案。

在此处输入图像描述

  1. 将以下内容添加到 While 控制器中
${__groovy(${__jm__WC__idx}.toInteger() < 5)}  

  1. 如图所示,添加请求及其下方的两个If控制器,带有Flow Control Action元素

  2. 将以下内容添加到第一个 If Controller

${JMeterThread.last_sample_ok}
  1. 在 FCA 元素中 选择Break Current Loop在此处输入图像描述

  2. 将以下内容添加到第二个 If Controller

${__jexl3(!${JMeterThread.last_sample_ok})}
  1. 将 FCA 设置为转到下一个循环的下一个迭代

如果您想做其他事情,此外,要重试,在 FCA 元素中设置暂停,在 FCA 中添加 JSR 223 元素并包含操作。例如,我想记录失败请求的用户名并重试。

String username = vars.get("username")
int current_loop_count = vars.get("__jm__WC__idx").toInteger()

log.warn("Attempt# ${current_loop_count.next()}  $username ")

current_loop_count.next()<5?:ctx.getThreadGroup().getOnErrorStartNextLoop()
于 2021-08-04T02:39:00.750 回答