如何在Gatling的Json Body中添加随机值?

时间:2016-03-07 12:08:58

标签: json gatling

我需要每次创建一个随机正整数并将其发送到Gatling的Json主体。

我使用下面的代码创建一个随机的正向ineger:

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)  

但是,这似乎不起作用。请提供任何线索。

谢谢!

1 个答案:

答案 0 :(得分:32)

首先,您希望每次都生成随机数,因此OrderRef必须是一种方法,例如:

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

旁注释:通过Scala约定:名称camelCase,(),但它生成新值,最后没有;

要使用准备好的方法,您不能使用 Gatling EL字符串。语法非常有限,基本上"${OrderRef}"在Gatling Session中搜索名为OrderRef的变量。

正确的方法是使用表达式函数

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

在这里,您正在创建匿名函数,将Gatling Session作为正文返回String。字符串由标准Scala字符串插值机制组成,并使用之前准备的函数orderRef()

当然,您可以将Scala字符串插值省略为:

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

使用Scala时不是非常首选的样式。

在Gatling文档中查看Request Body的详细信息,并详细了解Galting EL syntax

另一种方法是定义一个馈线:

// 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 string 在请求体中使用它的值。这适用于在每个虚拟用户附加到会话之前由Gatling从馈线获取馈线值。详细了解馈线here

建议:如果您的方案很简单,请从第一个解决方案开始。如果需要更复杂的考虑馈线。

享受