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

Gatling-Scala:解决String类型CursorID转scala.Option失败问题

Gatling游标分页脚本错误修复

错误原因分析

  1. 类型转换异常:你在doWhile中尝试将session里的CursorID强制转换为Option[String],但实际当nextCursor存在时,saveAs存储的是String类型值,而非Option,触发ClassCastException。
  2. 游标变量不统一:初始请求将游标存为TestCursorID,但循环内的请求一直使用这个初始值,没有更新为每次返回的新游标,会导致重复请求同一页数据。

修复方案

  • 统一游标变量名,初始请求直接将游标存入CursorID,循环内复用该变量并更新。
  • 使用Gatling提供的asOption[String]方法安全获取游标值,避免强制类型转换异常;通过判断游标是否存在且非空来控制循环终止。

修复后的完整代码

.exec(http("Test:Generate Cursor ID")
  .get("/test")
  .queryParam("sortField", "ID")
  .queryParam("limit", 100)
  .queryParam("cursor", "")
  .check(status.is(200))
  // 初始游标直接存入CursorID,统一变量名
  .check(jsonPath("$.nextCursor").saveAs("CursorID"))
)
// 使用asOption安全获取游标,判断是否存在且非空来继续循环
.doWhile(session => session("CursorID").asOption[String].exists(_.nonEmpty)) {
  exec(http("Test:Cursor Pagination")
    .get("/test")
    .queryParam("sortField", "ID")
    .queryParam("limit", 100)
    // 使用当前CursorID作为请求参数
    .queryParam("cursor", "#{CursorID}")
    .check(status.is(200))
    // 用optional处理无游标场景,更新CursorID为新值(无值时该属性会被移除)
    .check(jsonPath("$.nextCursor").optional.saveAs("CursorID"))
  )
}

关键说明

  • asOption[String]:Gatling提供的安全类型转换方法,会尝试将session属性转换为Option[String],存在有效值时返回Some(String),不存在或类型不匹配时返回None,避免强制转换异常。
  • .optional:当接口返回的nextCursor不存在时,该check不会失败,也不会更新session中的CursorID,此时session("CursorID").asOption[String]会返回None,循环自动终止。
  • 统一变量名:确保每次循环都使用最新的游标值,避免重复请求同一页数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:05:19