You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于条件更新数组值并在JMeter中模拟Chrome报表请求重试逻辑

JMeter模拟Chrome报表请求循环逻辑实现

需求说明

我们需要模拟Chrome的报表请求行为:

  • 首次运行:基于matchNr计数遍历报表数组,一次性发送所有报表请求(请求结构一致,仅请求体中的报表名称不同)
  • 后续循环:每间隔10秒,仅发送上一轮未完成的报表请求,请求数量逐轮递减或保持不变
  • 注意:不同用户的报表数量不固定,无法设置固定值

JMeter实现步骤

1. 提取报表名称列表

通过前置处理器(如JSON Extractor)从接口响应中提取所有报表名称:

  • 设置Match No.为-1,自动生成:
    • ${reportNames_matchNr}:存储报表总数量
    • ${reportNames_1}、${reportNames_2}...:存储单个报表名称

2. 首次批量发送请求

添加For Each Controller遍历所有报表:

  • 配置参数:
    • 输入变量前缀:reportNames
    • 开始索引:1
    • 结束索引:${reportNames_matchNr}
    • 输出变量名称:currentReport
  • 在控制器下添加HTTP请求,请求体中引用${currentReport}作为报表名称参数
  • 为请求添加响应断言,将请求完成状态存入变量(如report_${currentReport}_status,值为success或failed)

3. 循环重试未完成请求

添加While Controller实现循环重试,条件设为${__jexl3(${unfinishedCount} > 0,)}:

  • 控制器内依次添加以下组件:
    1. 固定定时器:设置延迟10秒,控制重试间隔
    2. 用户定义变量:初始化unfinishedCount为0,用于统计本轮未完成请求数
    3. For Each Controller:遍历所有报表,配置同首次请求
    4. If控制器:条件设为${__jexl3("${report_${currentReport}_status}" != "success",)},仅处理未完成请求
    5. HTTP请求:复用首次请求的配置,请求体引用${currentReport}
    6. 响应断言:更新对应报表的状态变量
    7. JSR223后置处理器:统计未完成请求数,脚本示例:
      def reportStatus = vars.get("report_${vars.get('currentReport')}_status")
      if (reportStatus != "success") {
          def count = Integer.parseInt(vars.get("unfinishedCount"))
          vars.put("unfinishedCount", String.valueOf(count + 1))
      }
      

关键注意事项

  • 用__escapeOgnl()函数转义报表名称中的特殊字符,避免变量解析错误
  • 响应断言逻辑要和实际业务中"请求完成"的定义一致(如状态码、响应字段)
  • 可给While Controller添加最大重试次数限制,避免无限循环(比如条件改为${__jexl3(${unfinishedCount} > 0 && ${retryCount} < 5,)},配合递增retryCount变量)

内容的提问来源于stack exchange,提问作者user20497679

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:31