Nano Hash - криптовалюты, майнинг, программирование

Как добавить случайное значение в Json Body в Gatling?

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

Я использовал приведенный ниже код для создания случайного положительного числа:

val  r = new scala.util.Random;
val OrderRef = r.nextInt(Integer.MAX_VALUE);

но как я могу передать случайно сгенерированное значение в тело json?

Я пытался:

.exec(http("OrderCreation")
.post("/abc/orders")
.body(StringBody("""{    "orderReference": "${OrderRef}"}""").asJson)  

Но, похоже, это не работает. Любые подсказки, пожалуйста.

Спасибо!

07.03.2016

Ответы:


1

Прежде всего, вы хотите каждый раз генерировать случайное число, поэтому OrderRef должен быть методом, например:

def orderRef() = Random.nextInt(Integer.MAX_VALUE)

Боковой комментарий: по соглашению Scala: назовите camelCase, (), пока он генерирует новые значения, без ; в конце.

Для использования подготовленного метода нельзя использовать строку Gatling EL. Синтаксис очень ограничен и в основном "${OrderRef}" ищет переменную с именем OrderRef в сеансе Gatling.

Правильный способ - использовать функцию выражения как:

.exec(
   http("OrderCreation")
  .post("/abc/orders")
  .body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON
)

Здесь вы создаете анонимную функцию, принимающую Гатлинга Session и возвращающую String в качестве тела. Строка составляется с помощью стандартного механизма интерполяции строк Scala и использует заранее подготовленную функцию orderRef().

Конечно, вы можете опустить строковую интерполяцию Scala как:

.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }" )).asJSON

что не является предпочтительным стилем при использовании Scala.

См. Дополнительную информацию в документации Gatling, чтобы тело запроса и узнать больше о Синтаксис Galting EL.

Альтернативный способ - определить фидер:

// Define an infinite feeder which calculates random numbers 
val orderRefs = Iterator.continually(
  // Random number will be accessible in session under variable "OrderRef"
  Map("OrderRef" -> Random.nextInt(Integer.MAX_VALUE))
)

val scn = scenario("RandomJsonBody")
  .feed(orderRefs) // attaching feeder to session
  .exec(
     http("OrderCreation")
    .post("/abc/orders")
    // Accessing variable "OrderRef" from session
    .body(StringBody("""{ "orderReference": "${OrderRef}" }""")).asJSON
  )

Здесь ситуация иная: сначала мы определяем источник, затем присоединяем его к сеансу, а затем используем его значение в теле запроса через строку Gatling EL. Это работает, пока значение фидера берется из фидера Gatling перед присоединением к сеансу для каждого виртуального пользователя. Дополнительную информацию о фидерах см. здесь.

Рекомендация: Если ваш сценарий прост, начните с первого решения. Если сложнее, подумайте о кормушках.

Наслаждаться

07.03.2016
  • Первый правильный способ сделать это у меня не сработал. Альтернативный способ сработал. Спасибо. 25.05.2016
  • Ни один из вариантов у меня не работал. @Teliatko какую версию гатлинга вы используете? 17.12.2018
  • Поцарапайте это, первый вариант действительно работает для меня, а второй вариант - нет. 17.12.2018
  • @VivekRao В то время я использовал Gatling 2.2. Какая у вас версия? Я хотел бы обновить ответ для новой версии, было изменение. 26.04.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..