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

Gatling API响应参数传递报错:未找到walkInId变量

Gatling会话参数传递错误解决方案

错误根源

编译报错not found: value walkInId的核心原因:你试图用Scala字符串插值(s""中的${walkInId})引用Gatling运行时会话(Session)中的变量,但walkInId并不是Scala代码层面的变量——它仅存在于Gatling的会话上下文里,因此编译器找不到该变量。

修正步骤

1. 替换会话变量引用语法

把后续API URL中的${walkInId}改成Gatling专属的会话变量引用语法#{walkInId}。这样Scala编译器不会尝试解析它,而是留给Gatling在运行时从Session中取值。全局常量(如organizationId)可继续用Scala的s""插值,因为它们是编译时存在的固定值。

2. 删除无用的Session调试代码

中间那段仅取值不做任何操作的exec(session => { ... })完全多余,直接删除即可。

3. 修正JSON Body格式错误

第二个请求的Body是多个字段对象,必须用数组[]包裹(原代码直接用逗号分隔多个对象,不符合JSON规范),否则会触发运行时格式错误。

修正后的完整代码

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class MySimulation extends Simulation {
  val httpProtocol = http
    .baseUrl("https://api.example.com")
    .header("Content-Type", "application/json")

  val organizationId = "org123"
  val locationId = "loc123"
  val serviceId = "svc123"

  val scn = scenario("My Scenario")
    // 创建Walkin并保存响应id到Session
    .exec(http("Create Walkin")
      .post(s"/organizations/${organizationId}/locations/${locationId}/services/${serviceId}/resources/walkins")
      .body(StringBody("""{ "source": "WEB_KIOSK" }""")).asJson
      .check(jsonPath("$.id").saveAs("walkInId")))
    // 更新Walkin字段:用#{walkInId}引用会话变量
    .exec(http("Update Walkin Fields")
      .put(s"/organizations/${organizationId}/locations/${locationId}/walkins/#{walkInId}/fields")
      .body(StringBody("""[
        {
          "internalName": "First Name",
          "values": ["Steve"]
        },
        {
          "internalName": "Phone Number",
          "values": ["+11010101010"]
        },
        {
          "internalName": "Email",
          "values": ["abc@abc.com"]
        }
      ]""")).asJson)
    // 调度Walkin:同样引用会话变量
    .exec(http("Schedule Walkin")
      .put(s"/organizations/${organizationId}/locations/${locationId}/resources/walkins/#{walkInId}")
      .body(StringBody("""{ "action": "SCHEDULE", "source": "WEB_KIOSK" }""")).asJson)

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

额外提示

  • Gatling中优先用#{variableName}引用会话变量,避免与Scala字符串插值混淆。
  • 仅当需要修改会话变量值时,才需要用exec(session => ...)的方式操作Session,单纯取值无需额外代码。
  • 始终验证JSON格式正确性,Gatling的asJson会自动检查格式错误,提前修正可避免运行时异常。

内容的提问来源于stack exchange,提问作者Khursaid Ansari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:15:14