如何在 Gatling 的 Json Body 中添加随机值?
How to add random value in Json Body in Gatling?
我需要每次创建一个随机正整数并将其发送到加特林中的 Json body。
我使用下面的代码创建了一个随机正整数:
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
的变量。
正确的方法是使用表达式函数作为:
.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 时不是很喜欢的风格。
在 Request Body and read more about Galting EL syntax 的 Gatling 文档中查看更多详细信息。
另一种方法是定义 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,然后我们将它附加到session,然后通过Gatling EL string在请求体中使用它的值。这在为每个虚拟用户附加到会话之前由加特林从馈线中获取馈线值时起作用。查看更多关于喂食器的信息 here。
建议:如果您的场景很简单,请从第一个解决方案开始。如果需要更复杂的考虑喂食器。
享受
我需要每次创建一个随机正整数并将其发送到加特林中的 Json body。
我使用下面的代码创建了一个随机正整数:
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
的变量。
正确的方法是使用表达式函数作为:
.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 时不是很喜欢的风格。
在 Request Body and read more about Galting EL syntax 的 Gatling 文档中查看更多详细信息。
另一种方法是定义 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,然后我们将它附加到session,然后通过Gatling EL string在请求体中使用它的值。这在为每个虚拟用户附加到会话之前由加特林从馈线中获取馈线值时起作用。查看更多关于喂食器的信息 here。
建议:如果您的场景很简单,请从第一个解决方案开始。如果需要更复杂的考虑喂食器。
享受