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

Gol*_*een 18 json gatling

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

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

val  r = new scala.util.Random;
val OrderRef = r.nextInt(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

但是,如何将随机生成的值提供给json体?

我试过了:

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

但是,这似乎不起作用.请给我任何线索.

谢谢!

Tel*_*tko 39

首先,你想每次生成随机数,因此OrderRef必须是一个方法,如:

def orderRef() = Random.nextInt(Integer.MAX_VALUE)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }" )).asJSON
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅Gatling文档中的Request Body,并阅读有关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
  )
Run Code Online (Sandbox Code Playgroud)

这里情况不同,首先我们定义馈线,然后我们将它附加到会话,然后通过Gatling EL字符串在请求体中使用它的值.这适用于在每个虚拟用户附加到会话之前由Gatling从馈线获取馈线值.查看更多有关馈线这里.

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

请享用

  • 非常感谢...您为我节省了很多时间:) (2认同)