如何测量和显示单个测试的运行时间?

时间:2013-03-15 15:47:34

标签: scala duration measurement scalatest

我有一个可能长时间运行的测试,用 scalatest 编写:

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

即使测试在超时限制内完成,其运行时间对于运行测试的人来说也是有价值的。如何在scalatest的输出中测量和显示此单个特定测试的运行时间?

更新:目前我使用自己的功能测量运行时间,就像在r.v的答案中一样。我想知道 scalatest 是否已提供此功能。

2 个答案:

答案 0 :(得分:12)

-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)) {
    // ...
  }
}

答案 1 :(得分:0)

除了r.v.的回答: 如果您有多项目构建,则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(
            ...
        )
    )