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

Gatling循环传递continuationToken报错:属性未定义

解决Gatling中continuationToken未定义的问题

你的代码里有几处关键错误导致了continuationToken未定义的报错,下面逐一说明并给出修正方案:

错误点分析

  • 保存会话属性时误用${}语法:Gatling中saveAs的参数直接写属性名字符串即可,你写的saveAs("${continuationToken}")会把属性名存成带${}的字符串,后续自然找不到正确的属性。
  • 访问会话属性时误用${}:doWhile的判断逻辑里,session("${continuationToken}")是错误写法,应该直接用session("continuationToken")访问会话属性。
  • 循环条件判断不严谨:如果第一个请求的响应头没有返回continuationToken,会话中不会存在该属性,直接调用as[String]会抛出异常,得先检查属性是否存在再判断值是否有效。

修正后的代码

val httpProtocol = http
  .baseUrl("some-base-url")

val scn = scenario("Scenario for 'Get store assortments by storeId'")
  .exec(http("request_1")
    .get("endpoint1")
    .header("api-key","api-key")
    .queryParam("param", true)
    .check(header("continuationToken").optional.saveAs("continuationToken"))) // 加optional避免无header时直接报错
  .doWhile(session => session.contains("continuationToken") && session("continuationToken").as[String].nonEmpty) {
    exec(http("request_2")
      .get("endpoint1")
      .header("api-key", "api-key")
      .queryParam("param", true)
      .queryParam("continuationToken", "${continuationToken}") // 请求参数里用${}是正确的表达式语法
      .check(header("continuationToken").optional.saveAs("continuationToken")))
  }

setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)

关键修改说明

  1. 把saveAs("${continuationToken}")改为saveAs("continuationToken"),正确设置会话属性名。
  2. 在check中添加.optional,如果响应头没有continuationToken,不会直接报错,而是不设置该属性,避免第一个请求就失败。
  3. 修改doWhile条件:先检查会话中是否存在continuationToken,再判断属性值不为空字符串,避免空指针或属性不存在的错误。
  4. 请求参数里的${continuationToken}是正确用法,这里是Gatling的表达式语法,用来引用会话中的属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:32:33