В Gatling, как я могу генерировать случайное число каждый раз, когда выполняется вызов? (не используя фидер) - PullRequest
0 голосов
/ 02 февраля 2020

Мне нужно найти способ генерировать случайное число каждый раз, когда выполняется вызов REST.

У меня следующий вызов GET:

    exec(http("Random execution")
      .get("/randomApi")
      .queryParam("id", getRandomId()))
  }

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

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

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

object RANDOM_ID {
  toString() { return RandomId().toString() }
}
... 
exec( _.set( "RANDOM_ID", RANDOM_ID ) )
...
.exec( 
  http("Random execution")
  .get("/randomApi")
  .queryParam( "id", "${RANDOM_ID}" )
)

Вы можете применить тот же принцип к генерации случайных имен, адресов, телефонных номеров, называйте его.

Так какое решение лучше? Фидер или объект в сеансе?

В большинстве случаев это будет фидер, потому что вы контролируете, когда он обновляется. Объект в сеансе каждый раз будет отличаться, в то время как решение фидера контролирует, когда значение обновляется, а затем вы можете ссылаться на него несколько раз, прежде чем его изменить.

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

2 голосов
/ 03 февраля 2020

.queryParam принимает выражения в качестве аргументов, а поскольку выражение является псевдонимом для функции сеанса, вы можете просто сделать ...

.queryParam("id", session => getRandomId())

Вы также можете определить второй фидер, который использует функцию для генерировать значения - не нужно обновлять существующий фидер или добавлять другой файл CSV. Это было бы полезно, если бы у вас были более сложные логи c для получения / генерации идентификатора

val idFeeder = Iterator.continually(Map("id" -> Random.nextInt(999999)))

//in your scenario...
.feed(idFeeder)
.exec(http("Random execution")
  .get("/randomApi")
  .queryParam("id", "${id}")
)
...