Анализ ответа Json вернулся в Gatling

Я пытаюсь разобрать ответ json, возвращенный сервером в gatling.

Мой ответ с сервера:

SessionAttribute(
  Session(
    GetServices,
    3491823964710285818-0,
    Map(
      gatling.http.cache.etagStore -> Map(https://api.xyz.com/services -> ), 
      gatling.http.cache.lastModifiedStore -> Map(https://api.xyz.com/services -> ),
      myresponse -> {
        "created":"2014-12-16T22:06:59.149+0000",
        "id":"x8utwb2unq8uey23vpj64t65",
        "name":"myservice",
        "updated":"2014-12-16T22:06:59.149+0000",
        "version":null
      }),
    1418767654142,622,
    OK,List(),<function1>),id)

Я делаю это в своем скрипте:

val scn = scenario("GetServices")
          .exec(http("Get all Services")
          .post("/services")
          .body(StringBody("""{ "name": "myservice" }""")).asJSON
          .headers(sentHeaders)
          .check(jsonPath("$")
          .saveAs("myresponse"))
).exec(session => {
  println(session.get("id"))
  session
})

Ответ все еще печатается. Как я могу просто получить идентификатор "x8utwb2unq8uey23vpj64t65"?


person user1075958    schedule 16.12.2014    source источник


Ответы (1)


Возможно, проще всего использовать немного больше jsonPath, чтобы извлечь нужный id, сохранив это в собственной переменной для дальнейшего использования. Помните, что jsonPath по-прежнему является CheckBuilder, поэтому вы не можете просто получить прямой доступ к результату - он мог не соответствовать.

Однако преобразование его в Option[String] кажется разумным.

Итак, ваши последние несколько строк будут такими:

    ...
    .check(
      jsonPath("$.id").saveAs("myresponseId")
    )
  )
).exec(session => {
  val maybeId = session.get("myresponseId").asOption[String]
  println(maybeId.getOrElse("COULD NOT FIND ID"))
  session
})
person millhouse    schedule 17.12.2014
comment
Спасибо за этот ответ. Немного поздно для игры, но очень полезно для тех из нас, кто только начинает работать с Gatling. - person renderf0x; 12.10.2016
comment
Я потратил 2 дня, чтобы выяснить, что я не так делаю с регулярным выражением. jsonPath решил проблему. (чувствуя себя расслабленным) - person Amit Kumar Gupta; 20.02.2017
comment
Последние версии Gatling не имеют session.get API. Вместо этого просто сделайте session("myresponseId").asOption[String]. - person rosendin; 08.11.2018