#scala #gatling #scala-gatling
Вопрос:
Я пишу нагрузочный тест для api и хочу создать фидер, который генерирует случайные значения для ввода в тело запроса POST. Сначала я попытался скопировать случайный пример электронной почты из документации и добавить дополнительные поля в сгенерированную карту, но когда это не сработало, я перешел к одному полю, в основном скопировав документацию; однако даже это по какой-то причине не работает. Здесь есть куча решений, которые также используют этот синтаксис, но что-то в том, как я это делаю, приводит к тому, что поля, которые я пытаюсь ввести в тело, становятся пустыми при выполнении запроса.
Текущий Код:
val userFeeder: Iterator[Map[String, Unit]] =
Iterator.continually(Map("userName" -> ("user_" Random.alphanumeric.take(15).mkString)))
var scn: ScenarioBuilder = scenario("GENERATE USER")
.feed(userFeeder)
.exec(
http("CREATE USER")
.post(userBaseUrl)
.headers(userHeaders)
.body(StringBody("userName: ${userName}")))
setUp(
scn.inject(atOnceUsers(1))
)
В идеале я хотел бы иметь возможность расширить фидер, включив в него несколько значений, т. Е.
val userFeeder: Iterator[Map[String, Unit]] =
Iterator.continually(Map("userName" -> ("user_" Random.alphanumeric.take(15).mkString),
"userEmail" -> (Random.alphanumeric.take(15).mkString) "@random.edu"),
"address" -> Random.alphanumeric.take(15).mkString)))
и так далее, но я немного озадачен тем, почему мой текущий код даже не работает, поскольку, похоже, он довольно точно следует примеру документации. В моих запросах значения всегда равны нулю, несмотря на то, что я пробовал несколько разных стратегий.
Вывод журнала
body:StringChunksRequestBody{contentType='application/json', charset=UTF-8, content=userName: ()}
Ответ №1:
Понял это. Оказывается, что, несмотря на то, что Feeder является оболочкой для итератора, правильный способ сделать то, что я хочу, — это объявить его следующим образом:
val userFeeder: Feeder[Any] =
Iterator.continually(Map("userName" -> ("user_" Random.alphanumeric.take(15).mkString),
"userEmail" -> (Random.alphanumeric.take(15).mkString) "@random.edu"),
"address" -> Random.alphanumeric.take(15).mkString)))