使用 scala 测试记录每个测试(and/or testSuite)的时间

Logging the time for each test (and/or testSuite) with scala test

我正在使用 scala test 进行测试,前段时间构建有时会失败,因为某些(可能是新的)测试需要超过 CI 允许的限制。

乍一看,任何测试都不应超过超时时间(顺便说一句,10 分钟),并且根据 CI 输出,很难看出哪个测试花费了这么多时间(或每次测试花费多少时间需要)

我可以使用简单的基于 println 的语句在每个测试的 beginning/end 打印当前时间,但我想知道 scala 测试是否为此提供了一些内置功能?

如果没有,其他任何 Scala 测试 framework/library 有吗?

EDIT: tried to wrap the test

我更喜欢 lib 本身的一些本机方法。我试图用一种方法包装 specs2 测试,该方法将获取描述并记录时间,但我在 运行 测试时遇到了困难。我做了这样的事情:

class SomeSpec {
    private def withTimeLog(x: Fragment) = {
        println(s"Starting test: ${x.description}(${DateTime.now()})")

        //what now?
        x.executionResult

        println(s"End of test: ${x.description}(${DateTime.now()})")
      }

      withTimeLog("Feature" should {
        "stuff" in {
          println(s"test: ${DateTime.now()}")
          None.isEmpty must beTrue
        }
      })
}

结果:

Starting test: End(2016-07-28T18:11:53.101+01:00)
End of test: End(2016-07-28T18:11:53.191+01:00)
[info] FeatureSpecV2
[info]
test running at 2016-07-28T18:11:54.037+01:00
[info] A test should
[info]   + stuff

意思是,测试最后执行了,而不是在 2 个打印语句之间。也许 Fragment.execution 结果不 运行 测试。和其他几个人一起试过。知道我应该使用哪种方法吗?

您可以通过在命令行上传递 showtimes 选项来在 specs2 中显示执行时间

sbt>testOnly *MySpec -- showtimes

此外,如果您使用未来的匹配器,您可以使用 timeFactor 命令行选项调整 "time factor"。