Немного погуглив, я нашел очень мало документации и примеров по разработке сложных сценариев в Gatling.Отличный пост, к которому пришли мои аналогичные выводы: Стресс-тестирование асинхронной службы REST с Gatling .
Отсутствие нативных конструкций, которые выполняют то, что я хочу, лучшее решение, которое мы можем построить, этоиспользуя вместе методы tryMax
и asLongAs
.
Код, размещенный в моем вопросе, становится следующим:
scenario("my-scenario")
.feed(feeder)
.exec(
http("post-to-A")
.post("/execution")
.body(StringBody(
"""{
| "information": ${INFORMATION}
|}""".stripMargin
))
.asJSON
.check(status.is(200))
)
.exec(_.set("result", ""))
.tryMax(10) {
asLongAs(session => session("result").validate[String].get != "") {
exec(
http("get-to-B")
.get("/result")
.check(status.is(200))
.check(jsonPath("$.result").saveAs("result"))
)
}
}
Гатлинг будетПопробуйте вызвать второй сервис REST 10 раз, пока вызов не будет успешным.Очевидно, что служба REST должна быть спроектирована правильно, отвечая на состояние HTTP, отличное от 200, до тех пор, пока результат не будет достигнут.
Единственным недостатком является то, что
неудачный запрос засчитываетсяк неудавшимся запросам, что в нашем случае резко искажает результаты.
Надеюсь, это поможет.