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
相关产品推荐
相关产品推荐

