使用scala测试记录每个测试(和/或测试套件)的时间

使用scala测试记录每个测试(和/或测试套件)的时间,scala,scalatest,specs2,Scala,Scalatest,Specs2,我正在使用scala测试进行测试,不久前构建开始失败,有时是因为某些(可能是新的)测试占用的时间超过了CI允许的限制 乍一看,任何测试都不应超过超时时间(顺便说一句,10分钟),通过CI输出,很难看出哪个测试占用了这么多时间(或者每个测试占用了多少时间) 我可以在每个测试的开始/结束时使用简单的基于println的语句来打印当前小时,但我想知道scala测试是否为此提供了一些内置功能 如果没有,其他scala测试框架/库是否有 编辑:尝试包装测试 我更喜欢lib本身的一些本地方法。我试图用一种方

我正在使用scala测试进行测试,不久前构建开始失败,有时是因为某些(可能是新的)测试占用的时间超过了CI允许的限制

乍一看,任何测试都不应超过超时时间(顺便说一句,10分钟),通过CI输出,很难看出哪个测试占用了这么多时间(或者每个测试占用了多少时间)

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

如果没有,其他scala测试框架/库是否有

编辑:尝试包装测试

我更喜欢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

也就是说,测试是在最后执行的,而不是在两条打印语句之间执行的。可能Fragment.execution结果没有运行测试。和其他几个人一起试过。知道我应该使用哪种方法吗?

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

sbt>testOnly *MySpec -- showtimes

另外,如果您使用未来的匹配器,您可以使用命令行选项调整“时间因子”。

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

sbt>testOnly *MySpec -- showtimes

此外,如果您使用未来的matchers,您可以使用命令行选项调整“时间因素”。

检查target中的测试报告。您使用什么作为CI平台?可能是Jenkins?查看target中的测试报告。您使用什么作为CI平台?可能是Jenkins?在尝试使用您的解决方案时遇到问题…该标志是否仅在某些特定版本后可用
java.lang.IllegalArgumentException:ScalaTest的运行程序无法识别的参数:showtimes
这是因为ScalaTest也是sbt的测试框架之一。它解析sbt中的所有参数,甚至是specs2中的参数。您可以通过键入:
sbt>set testFrameworks:=Seq(testFrameworks.Specs2)
来解决此问题。尝试使用解决方案时遇到问题…该标志是否仅在某些特定版本后才可用
java.lang.IllegalArgumentException:ScalaTest的运行程序无法识别的参数:showtimes
这是因为ScalaTest也是sbt的测试框架之一。它解析sbt中的所有参数,甚至是specs2中的参数。您可以通过键入:
sbt>settestframeworks:=Seq(testFrameworks.Specs2)
来解决这个问题。