这是我在这个网站上第一次提问,请耐心等待。
我想用Gatling为一个项目做一个http长轮询程序。虽然在stackoverflow上爬了很多问题,虽然我已经能够把独立的概念重新组合成一段语法正确的代码,但很遗憾,它并没有达到预期的效果。
当任何请求后获得状态码为200时,循环应该中断,测试将被认为是批准的。如果状态码与200不同,就应该保持连接的活力和轮询,而不是测试失败。
当达到.tryMax值,并且所有响应给出的状态都与200不同时,循环应该中断,测试应被视为失败。
使用差分运算符(!=)也不行,所以后来我决定交替使用.equals()并测试循环,但没有用。
作为Gatling和Scala的新手,我仍在试图找出这段代码的执行方面的问题。
def HttpPollingAsync() = {
asLongAs(session => session("statuss").validate[String].equals("200")) {
exec(
polling
.every(10 seconds)
.exec(
http("polling-async-response")
.post("/" + BaseURL + "/resource-async-response")
.headers(headers)
.body(RawFileBody("requestdata.json"))
.check(
status.is(200),
jsonPath("$.status").is("200"),
jsonPath("$.status").saveAs("statuss")
))
).exec(polling.stop)
}
}
val scn = scenario("asyncpolling")
.tryMax(60){
exec(HttpPollingAsync())
}
setUp(scn.inject(atOnceUsers(10))).protocols(httpProtocol)
当我运行这段代码时,我得到的异常是(它只是在语法上是正确的)。
Exception in thread "main" java.lang.UnsupportedOperationException: There were no requests sent during the simulation, reports won't be generated
at io.gatling.charts.report.ReportsGenerator.generateFor(ReportsGenerator.scala:49)
at io.gatling.app.RunResultProcessor.generateReports(RunResultProcessor.scala:59)
at io.gatling.app.RunResultProcessor.processRunResult(RunResultProcessor.scala:38)
at io.gatling.app.Gatling$.start(Gatling.scala:81)
at io.gatling.app.Gatling$.fromArgs(Gatling.scala:46)
at io.gatling.app.Gatling$.main(Gatling.scala:38)
at io.gatling.app.Gatling.main(Gatling.scala)
所以有些部分从未被访问或使用过
如果有任何帮助或者指点我正确的方向,我将感激不尽。
谢谢你!这是我有史以来在这个问题上的第一个问题。
一个 asLongAs
循环条件是在循环开始时评估的--所以在第一次执行时,由于没有会话值,该条件将失败。statuss
.
的 doWhile
loop在循环结束时提供检查。