有没有办法从一个模拟文件访问会话变量到另一个模拟文件。我可以在同一个模拟文件中访问场景内的会话变量,如下所示,它工作正常。由于 OrderId 在我的用例中应该只创建一个,我无法在第二个模拟文件中重新创建订单,因此我需要在第二个模拟文件中重用前一个模拟文件中的 OrderId 和 OrderUri。 一旦使用 session => session.setAll() 设置会话,是否可以在模拟之间访问该会话?你能建议一下吗?
SimulationFile_1
var OrderId = ""
var OrderUri = ""
private val order: ScenarioBuilder =
scenario("order creation")
.exec(createorders)
.exec(submitOrders)
.exec(session => {
OrderId = session("OrderId").as[String].trim
OrderUri = session("OrderUri").as[String].trim
println(session)
session
})
private val openRound: ScenarioBuilder =
scenario("Open Bidding")
.exec(session => session.setAll(Map("OrderId" -> OrderId, "OrderUri" -> OrderUri)))
.exec(placeOrder)
.exec(addOrder)
**SimulationFile_1** setup looks like below.
setUp(
order.inject(
nothingFor(1),
atOnceUsers(1),
).andThen(openRound.inject(nothingFor(1),
atOnceUsers(1)).
andThen(order_round1.inject(nothingFor(1),
atOnceUsers(1),
rampUsers(1).during(50))).
andThen(closeRound.inject(nothingFor(1),
atOnceUsers(1))))
I should not be calling order api again, should reuse the same order id from the previous rest call.(previous simulation file)
**SimulationFile_2**
setUp(
openRound.inject(
nothingFor(1),
atOnceUsers(1),
).andThen(order_round2.inject(nothingFor(1),
atOnceUsers(1),
rampUsers(1).during(50)).
andThen(closeRound2.inject(nothingFor(1),
atOnceUsers(1)))))
编辑:
.exec(session => {
val writer = new PrintWriter(new FileOutputStream(new File("src/gatling/resources/myFile.csv"), true))
writer.write(session("orderId").as[String] + "," + session("OrderUri").as[String] + "," + session("OrderYear").as[String])
writer.write("\n")
writer.close()
session
})
不同的 Gatling 模拟存在于不同的 JVM 实例中,因此您需要一些外部持久存储:文件、Redis 等。