将一个 API 的响应传递给另一个后续 API 调用 [Gatling]

问题描述 投票:0回答:1

我有这个脚本,它有 3 个 api 调用,其中第一个 api 调用的响应包含一个“id”字段,应该传递给其他两个后续 api 调用。

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")
    .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")))
    .exec(session => {
      val walkInId = session("walkInId").as[String]
      session
    })
    .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": ["[email protected]"]
      }""")).asJson)
    .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)
}

当我运行这个脚本时,我收到如下错误消息

not found: value walkInId
                .put(s"/organizations/${organizationId}/locations/${locationId}/walkins/${walkInId}/fields")
                                                                                          ^
13:42:33.204 [ERROR] i.g.c.ZincCompiler$ - ./user-files/simulations/Test2.scala:63:89: not found: value walkInId
                .put(s"/organizations/${organizationId}/locations/${locationId}/resources/walkins/${walkInId}")
                                                                                                    ^
scala gatling
1个回答
0
投票

问题的原因是你使用了字符串插值。

s"/organizations/${organizationId}/locations/${locationId}/walkins/${walkInId}/fields" 


String 之前的

s
表示使用代码中的变量而不是 Gatling 的 Session 变量,而您的
${walkInId}
正试图在类中找到这个变量。为避免这种情况,您需要转义字符,只需添加额外的
$
s"/organizations/${organizationId}/locations/${locationId}/walkins/$${walkInId}/fields"

© www.soinside.com 2019 - 2024. All rights reserved.