Гатлинг: как выполнить первый запрос только один раз?

#scala #performance-testing #gatling

Вопрос:

Я пытаюсь запустить сценарий, в котором есть 2 запроса

  • Первый аутентифицирует пользователей через API и получает токен. Я хочу, чтобы каждый пользователь выполнял первый запрос только один раз.
  • Второй выполняет GET через другой API.

Вот код сценария:

 val slot: ScenarioBuilder = scenario("Get slot")
    .doIf(_("connected").asOption[String].isEmpty) {
      exec(
        http("Get_token")
          .post(my_endpoint)
          .headers(specific_headers)
          .formParam("username", "my_username")
          .formParam("password", "my_password")
          .check(regex("""id_token":"(.*?)"""").saveAs("my_token"))
      )
        .exec { session =>
          println("Before: "   session("connected").as[String]) //prints nothing as expected
          session
        }
        .exec(_.set("connected", "true"))
        .exec { session =>
          println("After: "   session("connected").as[String]) //prints "true" as expected
          session
        }
    }
    .feed(fsid)
    .exec(
      http("Get_slot")
        .get("/slots")
        .headers(other_specific_headers) //including "my_token" extraced above
        .queryParam("specific_id", "${specific_id}") //from feeder fsid
        .check(regex("""id":"(.*?)"""").findRandom.saveAs("slot_id"))
    )
 

Вот код моделирования:

 setUp(
    slot.inject(
      constantUsersPerSec(1).during(15.seconds)
    ).protocols(httpConfig)
  )
 

Когда я выполняю приведенную выше симуляцию, я вижу в журналах, что каждый из 2 запросов выполняется 15 раз. Я ожидаю, что будет выполнено меньше «Get_token», чем «Get_slot».

Я прочитал некоторую документацию о вечном элементе Гатлинга, и я думаю, что он мог бы выполнить эту работу. Но я хотел бы понять, почему это ведет себя не так, как я ожидаю.

Если оба запроса выполняются 15 раз, означает ли это, что:

  • Запущено 15 пользователей, и, следовательно, их сеанс вначале пуст, так что это нормально, что они выполняют get_token ?
  • Мое «Дойф» не очень хорошо написано ?
  • Что-то еще я упускаю ?

Любая помощь была бы отличной, заранее благодарю вас.

РЕДАКТИРОВАТЬ: Просто чтобы дать больше информации, согласно комментарию SimpleApp, я вижу только 2 активных пользователя во время теста (в среднем) введите описание изображения здесь

Вот почему я ожидаю увидеть 4 «Get_token», и не более.

Комментарии:

1. по-моему, все в порядке. ваша симуляция состоит в том, чтобы добавлять 1 пользователя каждую секунду в течение 15 секунд — таким образом, 15 пользователей, это уникальные 15 пользователей, поэтому каждому пользователю нужен свой собственный токен, прежде чем создавать Get_slot.

2. @SimpleApp дело в том, что, когда я смотрю отчет Гатлинга, я вижу, что во время теста был 1 активный пользователь, а не 15. Вы думаете, что каждую секунду новый пользователь запускается и останавливается после выполнения его запроса ? Thx заранее

3. вы видите только 1 активного пользователя, так как ваши пользователи не остаются в системе достаточно долго. Например, если вы сохраняете паузу». пауза(20) » при последнем действии при взаимодействии с пользователем, вы заметите, что ваши активные пользователи находятся в 15. В этой ситуации ваш запрос и пользователь будут на уровне 15, а график «Активные пользователи» даст вам лучшую визуализацию. я надеюсь, что это имеет для вас смысл.