Как измерить и отобразить время выполнения одного теста?

У меня есть потенциально длительный тест, написанный с помощью scalatest:

test("a long running test") {
  failAfter(Span(60, Seconds)) {
    // ...
  }
}

даже если тест заканчивается в пределах тайм-аута, его время работы может быть ценным для человека, который запускает тест. Как я могу измерить и отобразить время работы этого один конкретный тест в выходе scalatest?

обновление: в настоящее время я измеряю время работы с моей собственной функцией, как и в r.ответ ви. Я хотел бы знать если scalatest уже предлагает эту функциональность.

2 ответов


на -oD опция даст продолжительность теста. Например, я использую следующее в своей сборке.sbt.

testOptions in Test += Tests.Argument("-oD")

EDIT:

вы можете также использовать следующие для отдельных запусков:

> test-only org.acme.RedSuite -- -oD

см.http://www.scalatest.org/user_guide/using_scalatest_with_sbt.

кроме того, вы можете определить следующую функцию для общих измерений времени:

def time[T](str: String)(thunk: => T): T = {
  print(str + "... ")
  val t1 = System.currentTimeMillis
  val x = thunk
  val t2 = System.currentTimeMillis
  println((t2 - t1) + " msecs")
  x
}

и использовать его в любом месте (не зависимо от ScalaTest)

test("a long running test") {
  time("test running"){
    failAfter(Span(60, Seconds)) {
    // ...
  }
}

В дополнение к R.в'ы. ответ: Если у вас есть multiproject строит testOptions in Test += Tests.Argument("-oD") не работает на корневом уровне в build.sbt, потому что Test относится к src/test / scala. Вы должны поместить его в настройки подпроекта

Project(id = "da_project", base = file("da_project"))
    .settings(
        testOptions in Test += Tests.Argument("-oDG"),
        libraryDependencies ++= Seq(
            ...
        )
    )