Установка тайм-аута для асинхронного вызова в Gatling - PullRequest
0 голосов
/ 21 мая 2018

Я использую Gatling, чтобы выполнить нагрузочный тест для архитектуры микросервиса.Я тестирую две службы REST;POST при обслуживании A запускает выполнение механизма, в то время как GET при обслуживании B в конечном итоге получает результат такого выполнения.

Использование asLongAsпостроить, я повторяю, чтобы сделать вызов GET REST, пока результат не будет готов.Однако я не хочу зацикливаться вечно.Мне нужно установить время ожидания или максимальное время попыток.

Ниже приведен фрагмент кода, который я использую.

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", ""))
  .asLongAs(session => session("result").validate[String].get != "") {
    exec(
      http("get-to-B")
        .get("/result")
        .check(status.is(200))
        .check(jsonPath("$.result").saveAs("result"))
    )
  }

Как установить время ожидания в приведенном выше коде?

Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Немного погуглив, я нашел очень мало документации и примеров по разработке сложных сценариев в 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, до тех пор, пока результат не будет достигнут.

Единственным недостатком является то, что

неудачный запрос засчитываетсяк неудавшимся запросам, что в нашем случае резко искажает результаты.

Надеюсь, это поможет.

0 голосов
/ 28 мая 2018

Вместо asLongAs вы можете использовать during для прохождения цикла в течение определенного промежутка времени (ознакомьтесь с документацией Gatling Session API для использования).Кроме того, вы можете проверить свое состояние.Пока что ваш цикл выполняется только в том случае, если значение result не является пустой строкой, что означает, что он не будет выполнен вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...