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

如何循环发送HTTP请求直至返回400并批量删除JDBC查询记录?

解决方法

一、实现批量删除所有查询到的记录

你当前的JSR223脚本只提取了第一条记录的ID,要删除所有查询结果,推荐两种实现方式:

方式1:用ForEach Controller遍历所有ID

  1. 确认JDBC请求的「变量名」设置为unavailabilityid,JMeter会自动生成unavailabilityid_1、unavailabilityid_2这类变量,同时unavailabilityid_#会存储记录总数。
  2. 添加ForEach Controller,配置:
    • 输入变量前缀:unavailabilityid
    • 输出变量名称:current_del_id
  3. 把HTTP删除请求放到该控制器下,请求中用${current_del_id}作为要删除的ID参数。
  4. 你的Scenario判断逻辑可以保留,放到ForEach Controller外层的JSR223 PreProcessor中即可。

方式2:修改JSR223脚本+Loop Controller

如果更倾向用脚本处理:

  1. 先在全局的JSR223 PreProcessor中初始化总记录数:
def scenario = vars.get("Scenario")
if (scenario.contains("epx_diary_Unavailability_Del_old")) {
    def resultList = vars.getObject("unavailabilityid")
    vars.put("total_count", String.valueOf(resultList.size()))
    vars.put("loop_index", "0")
}
  1. 添加Loop Controller,循环次数填${total_count}。
  2. 在HTTP请求的JSR223 PreProcessor中获取当前循环对应的ID:
def index = Integer.parseInt(vars.get("loop_index"))
def resultList = vars.getObject("unavailabilityid")
vars.put("unavailabilityid", resultList.get(index).get("id"))
vars.put("loop_index", String.valueOf(index + 1))

二、循环发送请求直到返回400状态码(完全可行)

用While Controller就能实现:

  1. 添加While Controller,条件设置为:${__jexl3(${JMeterThread.last_sample_ok},)},这个条件表示只要上一个请求执行成功(状态码非4xx/5xx),就继续循环。
  2. 把HTTP删除请求放到该控制器内部。
  3. 可选:添加Response Assertion,设置「响应代码」不匹配400,这样当请求返回400时,JMeterThread.last_sample_ok会变为false,循环自动终止。

注意:如果400是因为记录已删完,建议在循环前先通过JDBC获取所有ID,避免无效循环;也可以在While Controller内部每次循环前重新执行JDBC查询,确认还有待删记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:18:37