首先你想每次生成随机数,因此OrderRef
必须是一种方法,例如:
def orderRef() = Random.nextInt(Integer.MAX_VALUE)
旁注:按照Scala约定:命名为camelCase,()在生成新值时,不带;
到底。
要使用准备好的方法,您不能使用加特林 EL 弦。语法非常有限,基本上"${OrderRef}"
搜索具有名称的变量OrderRef
在加特林会议中。
正确的方法是使用表达功能 as:
.exec(
http("OrderCreation")
.post("/abc/orders")
.body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON
)
在这里,您正在创建采用加特林的匿名函数Session
并返回String
作为身体。字符串通过标准 Scala 字符串插值机制组成,并使用 before prepared 函数orderRef()
.
当然你可以省略 Scala 字符串插值,如下所示:
.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }" )).asJSON
使用 Scala 时,这不是很受欢迎的风格。
请参阅加特林文档以了解更多详细信息请求正文 http://gatling.io/docs/2.1.7/http/http_request.html#request-body并阅读更多有关加特林 EL 语法 http://gatling.io/docs/2.1.7/session/expression_el.html.
另一种方法是定义 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
)
这里的情况有所不同,首先我们定义 feeder,然后将其附加到会话,然后通过以下方式在请求正文中使用它的值加特林 EL 弦。当加特林在附加到每个虚拟用户的会话之前从馈送器获取馈送器值时,此方法有效。查看有关喂食器的更多信息here http://gatling.io/docs/2.1.7/session/feeder.html.
建议:如果您的场景很简单,请从第一个解决方案开始。如果需要更复杂,请考虑喂食器。
Enjoy