根据Gatling documentation,我可以在执行场景时使用会话属性。
但是,每次我使用函数文字来访问场景中的会话时,我都会遇到以下异常:
[error] java.lang.UnsupportedOperationException: There were no requests sent during the simulation, reports won't be generated
[error] at io.gatling.charts.report.ReportsGenerator$.generateFor(ReportsGenerator.scala:45)
[error] at io.gatling.app.Gatling.generateReports(Gatling.scala:198)
[error] at io.gatling.app.Gatling.start(Gatling.scala:82)
[error] at io.gatling.app.Gatling$.fromArgs(Gatling.scala:59)
[error] at io.gatling.sbt.GatlingTask.liftedTree1$1(GatlingTask.scala:49)
[error] at io.gatling.sbt.GatlingTask.execute(GatlingTask.scala:48)
[error] at sbt.ForkMain$Run$2.call(ForkMain.java:296)
[error] at sbt.ForkMain$Run$2.call(ForkMain.java:286)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[error] at java.lang.Thread.run(Thread.java:745)
[error] Simulation FooBarSimulation failed.
[info] Simulation(s) execution ended.
更具体地说,虽然这种表示法给了我正确的结果:
val scn = scenario("Foobar").feed(feeder).exec {
http("foo").httpRequest("GET", "http://example.org")
}.pause(5)
由于上述例外而失败:
val scn = scenario("Foobar").feed(feeder).exec { session =>
http("foo").httpRequest("GET", "http://example.org")
session
}.pause(5)
答案 0 :(得分:4)
场景是模拟的计划。所以当你说val scn = ...
时你并没有执行模拟,而是建立一个后来由gatling执行的AST。
所以当你说
时val scn = scenario("Foobar").feed(feeder).exec { session =>
http("foo").httpRequest("GET", "http://example.org")
session
}.pause(5)
部分http("foo").httpRequest("GET", "http://example.org")
是一个没有副作用的声明,其值从未使用过。 所以它可能不存在。就收集而言,你的情景是
val scn = scenario("Foobar").feed(feeder).exec { session =>
session
}.pause(5)
绝对没有,因此在生成报告时会产生错误。
要实现您的目标,会话操作必须是一个单独的exec语句。像这样:
val scn = scenario("Foobar").feed(feeder)
.exec ( session => session.set("foo", "bar") )
.exec (
http("foo").httpRequest("GET", "http://example.org")
)
}.pause(5)