3

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

4

2 回答 2

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")

}
于 2018-12-04T17:19:53.967 回答
0

你正试图以艰难的方式做到这一点。Gatling 使用 Log4J 基础架构具有良好的日志记录,但互联网上的大多数地方都告诉您使用 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"))
  }
于 2018-12-11T23:51:33.207 回答