2016-07-27 66 views
0

我对我的测试使用了scala测试,并且前一段时间构建开始失败,有时是因为某些(新的,可能)测试需要比CI允许的限制。使用scala测试记录每个测试(和/或testSuite)的时间

乍一看没有测试应该超过超时(10分钟BTW),并通过CI输出它不容易看到哪些测试正在如此多的时间(或每测试多少时间)

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

如果不是,还有其他的scala测试框架/库吗?

编辑:试图包住测试

我prefere从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结果不会运行测试。试了几个人。任何想法应该使用哪种方法?

+1

检查目标中的测试报告。 – cchantep

+0

你用什么CI平台?可能詹金斯? –

+0

其实Travis – pedrorijo91

回答

2

您可以通过将showtimes选项在命令行

sbt>testOnly *MySpec -- showtimes 

此外,如果你使用未来的匹配,你可以调整“时间因素”与timeFactor命令行选项在specs2显示执行时间。

+0

尝试使用您的解决方案时出现问题...是否只有自某些特定版本后才可用的标志? 'java.lang.IllegalArgumentException:由ScalaTest的Runner无法识别的参数:showtimes' – pedrorijo91

+1

这是因为ScalaTest也是sbt的测试框架之一。它解析了sbt中的所有参数,甚至是来自specs2的参数。你可以输入:'sbt> set testFrameworks:= Seq(TestFrameworks.Specs2)''来解决这个问题。 – Eric