我需要每次创建一个随机正整数并将其发送到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)
但是,这似乎不起作用。请提供任何线索。
谢谢!
答案 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。
建议:如果您的方案很简单,请从第一个解决方案开始。如果需要更复杂的考虑馈线。
享受