【问题标题】:How to measure and display the running time of a single test?如何测量和显示单个测试的运行时间?
【发布时间】:2013-03-04 09:57:12
【问题描述】:

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

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

即使测试在超时限制内完成,它的运行时间对于运行测试的人来说也很宝贵。如何在 scalatest 的输出中测量和显示这个 single 特定测试的运行时间?

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

【问题讨论】:

    标签: scala duration measurement scalatest


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这有帮助,但我只想测量一个测试,而不考虑 sbt 的配置。我不需要测量其他测试,我想总是测量这个。我正在考虑测量一段代码并在测试结束时使用info(...) 打印它的时间。我希望 scalatest 提供这样的测量功能,因为它已经使用此选项执行测量。
    • 我已经编辑了这个问题。我不知道info(),但认为我的回答是等效且可行的。 info() 在哪里,它有什么作用?
    • 是的,我现在就是这样做的,使用我自己的函数,如time。 (也许nanoTime 可能更精确一些。) | info() 只是在 scalatest 的输出中添加一条消息。
    • 在更新版本的 sbt 和 ScalaTest 中,我们应该设置测试框架:testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-oD")
    【解决方案2】:

    除了 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(
                ...
            )
        )
    

    【讨论】:

    • 或者,我们可以在整个构建级别设置它:testOptions in Test in ThisBuild += Tests.Argument(TestFrameworks.ScalaTest, "-oD")
    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2021-08-11
    • 2016-03-25
    • 2013-02-12
    相关资源
    最近更新 更多