我正在对Play进行性能测试!包含许多GET / POST API的应用程序。我想进行一些调试,因为一个测试在数百个测试中神秘地失败了(并且只有在全部运行时它才会失败)。如果返回的状态为500,如何有条件地添加println?
我尝试了以下操作,但是由于session.status
不是一个Int,所以它不起作用(即,它始终返回false)。另外,我不认为检查session.status
甚至是正确的选择,因为当我为每个呼叫仅打印session.status
时,它只会吐出几行OK
(甚至没有SEE_OTHER
或类似的功能(我希望它能成功运行),但我不确定替代方案是什么。
val postData: ChainBuilder = exec(http(s"[POST] Data sent to API")
.post(s"$baseUrl/post-data")
.formParam("id", s"$${id}")
.check(status.is(303))
.disableFollowRedirect)
.exec {
session =>
if (session.status == 500) {
println(session.attributes("id")) // whatever
}
session
}
我不确定如何进行此if
检查或放置位置。如何根据结果的status
有条件地检查测试中的某些数据?
答案 0 :(得分:0)
在下面尝试一下
exec(Actions.Job()).pause(Configuration.THINK_TIME_AFTER_PUT second)
.asLongAs(session => (session("responseStatus").as[String], session("statusCode").as[Int], session("reqInfo").as[String])) {
println ("test")
}
答案 1 :(得分:0)
您正在尝试用困难的方式做到这一点。 Gatling使用Log4J基础结构具有良好的日志记录功能,但是Internet上的大多数地方都告诉您使用log4j.xml文件,但我认为这比仅在使用Scala代码的测试中启用Gatling调试要困难得多:
这只是一个例子。您可以简化此过程,并在Gatling测试开始时添加以下代码:
val LOG_LEVEL = sys.env.getOrElse("LOG_LEVEL", "WARN")
val context: LoggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]
if (LOG_LEVEL.equals(Level.TRACE)) {
context.getLogger("io.gatling.http.engine.response").setLevel(Level.valueOf(LOG_LEVEL))
} else if (LOG_LEVEL.equals(Level.DEBUG)) {
context.getLogger("io.gatling.http.engine.response").setLevel(Level.valueOf("DEBUG"))
} else {
context.getLogger("io.gatling.http").setLevel(Level.valueOf("INFO"))
}