Гатлинг: Можно ли наращивать отдельные сценарии так же, как пользователи? - PullRequest
0 голосов
/ 23 мая 2018

Рассмотрим пример тестирования API с помощью Gatling.Для некоторых странных требований мне нужно было получить сценарий для каждого пользователя

var scenarioList // This is of type mutable list

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

Ex: scenarioList += scenario1. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario2. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario3. inject(rampUsers(1) over (1 minutes)
    .
    .
    .
    so on

Теперь в глобальной настройке, как показано ниже, при вызове всех этих сценариев

setUp(scenarioList: _*).assertions(
    forAll.successfulRequests.percent.gte(90)
  )

Предположим, у меня 1000 пользователей (scenarioList размер)это 1000), проблема здесь будет в том, что все 1000 пользователей будут запущены одновременно, но я хочу увеличить количество этих пользователей.Таким образом, встает вопрос об увеличении количества сценариев вместо параллельного их выполнения.

Возможно ли это?Если нет, есть ли другой подход, которому нужно следовать?Я не могу позволить себе роскошь запускать один и тот же сценарий с несколькими пользователями, так как тело запросов изменяется.Пожалуйста, дайте мне знать.

1 Ответ

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

Мне удалось решить эту проблему с помощью feeders в сценарии, поэтому мне не нужно создавать несколько сценариев.

С feeders Gatling предоставляет возможность параметризации тела вашего запроса любого http-запроса.

Пример кода:

  var randomSession = Iterator.continually(Map("randsession" -> ( req.replace("0000000000", randomStringGenerator.randomString(10)))))

  val httpConf = http
    .baseURL("http://localhost:5000")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .userAgentHeader("Mozilla/4.0(compatible;IE;GACv10. 0. 0. 1)")

  val scn = scenario("Activate")
    .feed(randomSession)
    .exec(http("activate request")
    .post("/login/activate")
    .body(StringBody("""${randsession}"""))
    .check(status.is(200)))
    .pause(5)

  setUp(
    scn.inject(atOnceUsers(5))
  ).protocols(httpConf)
}
...