使用 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"。
我正在使用 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"。