使用加特林进行调试-如果状态为500

时间:2018-12-03 15:47:14

标签: scala performance-testing gatling scala-gatling

我正在对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有条件地检查测试中的某些数据?

2 个答案:

答案 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"))
  }