我每次都需要创建一个随机正整数,并将其发送到加特林的Json正文。

我使用以下代码创建了一个随机正整数:

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)

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

谢谢!

最佳答案

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

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

旁注:根据Scala约定:名称camelCase,()会生成新值,但最后不带;

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

正确的方法是将Expression函数用作:
.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的更多信息。

另一种方法是定义Feeder:
// 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
  )

这里的情况有所不同,首先定义供稿器,然后将其附加到 session ,然后通过Gatling EL字符串在请求正文中使用其值。在每个虚拟用户附加到 session 之前,Gatling从馈线中获取馈线值时,此方法有效。查看更多有关支线here的信息。

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

请享用

关于json - 如何在加特林的Json Body中添加随机值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35843371/

10-12 22:30