我需要每次创建一个随机正整数并将其发送到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从馈线获取馈线值.查看更多有关馈线这里.
建议:如果您的场景很简单,请从第一个解决方案开始.如果需要更复杂的考虑馈线.
请享用