提问者:小点点

如何使用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)))