我每次都需要创建一个随机正整数,并将其发送到加特林的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/