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

JMeter中如何实现API返回COMPLETED时仅执行一次End Ride API并停止?

解决打车预订JMeter测试中End Ride API的执行控制问题

我在打车预订应用的JMeter测试场景中,需要在API响应返回COMPLETED状态时,仅执行一次End Ride API并停止后续执行。目前用While控制器实现时出现了无限循环问题。

已通过jsonlint.com验证的API响应:

{"id":3820,"status":"COMPLETED","rider":{"id":2019,"firstname":"test","lastname":"rider","phoneNumber":"9000000124","email":"Test_rider_10002@popp1.com","rating":5.0,"user":{},"fullName":"test rider"},"startLocationLat":36.10805389068134,"startLocationLong":-115.16570490025539,"endLocationLat":36.10805389068134,"endLocationLong":-115.16570490025539,"startAddress":"73 South Martin Luther King Boulevard","endAddress":"920 West Bonanza Road","start":{"address":"73 South Martin Luther King Boulevard","zipCode":"89106"},"end":{"address":"920 West Bonanza Road"},"surgeFactor":1.00,"driverPayment":"4.00","requestedCarType":{"title":"STANDARD","carCategory":"REGULAR","plainIconUrl":"https://media.ride-vegas.com/regular.png","configuration":"{\"skipRideAuthorization\": false}"},"requestedDriverTypes":[],"freeCreditCharged":"0.00"}

当前实现代码与问题

JSR223采样器代码(放在While控制器内)

import groovy.json.JsonSlurper;

def jsonSlurper = new JsonSlurper();
def apiDetails = new groovy.json.JsonSlurper().parse(current.getResponseData())
def eventStatus=apiDetails.status
def shouldRun = "1"

if(eventStatus =="COMPLETED") {
  shouldRun = "0"
}
vars.put("shouldRun", shouldRun+"")
log.info("shouldRun: " + vars.get("shouldRun"));

While控制器条件

${__jexl3("${shouldRun}" != "0" && ${__jm__While Controller__idx} < 2,)}

修复方案

问题核心

  1. shouldRun变量每次进入循环都会被重置为"1",即使之前因状态为COMPLETED设置为"0",也会被覆盖,导致循环无法终止。
  2. 循环条件里的次数限制逻辑冗余,且无法精准匹配"状态达标即执行一次End Ride并停止"的需求。

正确实现步骤

  1. 初始化变量:在While控制器外部添加JSR223采样器,仅初始化一次shouldRun:
vars.put("shouldRun", "1")
  1. 修改循环内的JSR223采样器代码:去掉每次重置shouldRun的逻辑,仅在状态为COMPLETED时更新变量:
import groovy.json.JsonSlurper

def apiDetails = new JsonSlurper().parse(current.getResponseData())
def eventStatus = apiDetails.status

if (eventStatus == "COMPLETED") {
    vars.put("shouldRun", "0")
}
log.info("shouldRun: " + vars.get("shouldRun"))
  1. 调整While控制器条件:仅保留shouldRun的判断,确保状态达标后立即终止循环:
${__jexl3("${shouldRun}" != "0",)}
  1. 精准控制End Ride API执行:在While控制器内,将End Ride API请求放在JSR223采样器之后,添加If控制器,条件设为:
${__jexl3("${shouldRun}" == "0",)}

这样只有当状态变为COMPLETED时,才会执行一次End Ride API。

执行流程说明

  • 初始化shouldRun为"1"
  • 进入While循环,调用查询订单状态的API
  • JSR223采样器解析响应,若状态为COMPLETED则将shouldRun设为"0"
  • If控制器检测到shouldRun为"0",执行End Ride API
  • 下一轮循环时,While控制器判断shouldRun为"0",直接终止循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:40:20