Scala 如何测量和显示单个测试的运行时间?
我有一个使用scalatest编写的可能长期运行的测试: 即使测试在超时限制内完成,它的运行时间对运行测试的人来说也是有价值的。如何在scalatest的输出中测量和显示这个特定测试的运行时间Scala 如何测量和显示单个测试的运行时间?,scala,duration,measurement,scalatest,Scala,Duration,Measurement,Scalatest,我有一个使用scalatest编写的可能长期运行的测试: 即使测试在超时限制内完成,它的运行时间对运行测试的人来说也是有价值的。如何在scalatest的输出中测量和显示这个特定测试的运行时间 更新:目前,我使用自己的函数测量运行时间,就像r.v的回答一样。我想知道scalatest是否已经提供了此功能。选项将给出测试的持续时间。例如,我在build.sbt中使用以下内容 testOptions in Test += Tests.Argument("-oD") 编辑: 您还可以将以下各项用于单
更新:目前,我使用自己的函数测量运行时间,就像r.v的回答一样。我想知道scalatest是否已经提供了此功能。选项将给出测试的持续时间。例如,我在build.sbt中使用以下内容
testOptions in Test += Tests.Argument("-oD")
编辑:
您还可以将以下各项用于单独运行:
> test-only org.acme.RedSuite -- -oD
看
此外,您可以为常规时间测量定义以下函数:
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)
除了r.v.的回答之外: 如果您有多项目生成,Test+=Tests.Argument(“-oD”)中的testOptions在build.sbt的根级别上不起作用,因为Test引用src/Test/scala。您必须将其放入子项目设置中
Project(id = "da_project", base = file("da_project"))
.settings(
testOptions in Test += Tests.Argument("-oDG"),
libraryDependencies ++= Seq(
...
)
)
谢谢,这很有帮助,但我只想测量一个测试,而不管sbt的配置如何。我不需要测量其他测试,我想一直测量这个。我正在考虑测量一块代码,并在测试结束时使用
info(…)
打印它的时间。我希望scalatest能够提供这样的测量功能,因为它已经使用这个选项进行了测量。我不知道info()
,但我认为我的答案是等效的和可行的。info()
在哪里?它做什么?是的,我现在就是这样做的,使用自己的函数,如time
。(可能更精确一点。)|info()
只是在scalatest的输出中添加了一条消息。在更新版本的sbt和scalatest中,我们应该设置测试框架:testOptions In test+=Tests.Argument(TestFrameworks.scalatest,“-oD”)
或者,我们可以在整个构建级别进行设置:testOptions in Test in ThisBuild+=Tests.Argument(TestFrameworks.ScalaTest,“-oD”)
test("a long running test") {
time("test running"){
failAfter(Span(60, Seconds)) {
// ...
}
}
Project(id = "da_project", base = file("da_project"))
.settings(
testOptions in Test += Tests.Argument("-oDG"),
libraryDependencies ++= Seq(
...
)
)