#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, а график «Активные пользователи» даст вам лучшую визуализацию. я надеюсь, что это имеет для вас смысл.