[英]ScalaTest and SBT: Reporting progress of test suite?
我正在使用ScalaTest,并且有一个包含许多测试的测试套件,每个测试可能需要一分钟才能运行。
class LargeSuite extends FunSuite {
test("Name of test 1") { ... }
...
test("Name of test n") { ... }
}
与从SBT控制台运行ScalaTest测试一样,在FunSuite
每个测试运行之前,不会向屏幕报告任何内容。 问题是,当n
大且每个测试运行缓慢时,您不知道发生了什么。 (运行top
或Windows Task Manager并寻找Java的CPU使用情况并不能令人满意。)
但是真正的问题是,当Travis CI运行该构建时:Travis认为该构建出错了,如果经过10分钟且屏幕上没有任何内容打印,则将其杀死。 就我而言,即使测试仍在运行,Travis仍会终止我的构建,并且FunSuite
中的每个test
都不需要10分钟(尽管由于测试数量的缘故,整个套件的确需要10分钟以上的时间)。
因此,我的第一个问题是:在FunSuite
进行每次test
后,如何让ScalaTest向控制台报告进度?
我的部分解决方案是使用以下特征作为mixin,从而解决了Travis的问题:
trait ProgressConsolePrinter extends BeforeAndAfterEach with BeforeAndAfterAll {
self: Suite =>
override def beforeAll: Unit = {
Console.print(s"$suiteName running")
Console.flush
}
override def afterEach: Unit = {
Console.print(".")
Console.flush
}
override def afterAll: Unit = {
Console.println
Console.flush
}
}
但是我知道使用Console
打印到SBT控制台并不完全可靠(使用谷歌搜索功能似乎可以从其他人的经验中得到印证)。
另外(i)您从Console
打印的任何内容都不会通过SBT的记录器,因此不会以[info]
作为前缀;以及(ii)尝试上述操作时,从Console
打印的消息会与来自SBT的其他消息混杂在一起。 如果我能够使用适当的记录器,那么这些事情都不会发生。
因此,我的第二个问题是:如何从ScalaTest中的测试中打印到SBT记录器?
这可能对您的第二个问题很有帮助。
要这样记录,您必须使用scala记录。 您必须将scala日志记录添加为测试依赖项,扩展其某些日志记录类(建议LazyLogging),然后调用logger.info("Your message")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.