Как измерить и отобразить время выполнения одного теста?
У меня есть потенциально длительный тест, написанный с использованием Scales:
test("a long running test") {
failAfter(Span(60, Seconds)) {
// ...
}
}
Даже если тест завершается в течение установленного времени, его время может быть полезным для человека, проводящего тест. Как я могу измерить и отобразить время выполнения этого отдельного теста в выходных данных самого высокого уровня?
Обновление: в настоящее время я измеряю время выполнения своей собственной функцией, как в ответе rv. Я хотел бы знать, предлагает ли scalatest эту функцию уже.
2 ответа
-oD
Опция даст продолжительность теста. Например, я использую следующее в моем build.sbt.
testOptions in Test += Tests.Argument("-oD")
РЕДАКТИРОВАТЬ:
Вы также можете использовать следующее для отдельных прогонов:
> 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)) {
// ...
}
}
В дополнение к ответу rv: если у вас есть мультипроектная сборка 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(
...
)
)