Gatling-Scala:解决String类型CursorID转scala.Option失败问题
Gatling游标分页脚本错误修复
错误原因分析
- 类型转换异常:你在
doWhile中尝试将session里的CursorID强制转换为Option[String],但实际当nextCursor存在时,saveAs存储的是String类型值,而非Option,触发ClassCastException。 - 游标变量不统一:初始请求将游标存为
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
相关产品推荐
相关产品推荐

