我无法弄清楚执行缓慢的集成测试发生了什么,使用Slick写入数据库。但是,我无法通过SLF4J弄清楚如何访问诊断日志记录。
答案 0 :(得分:2)
我最终自己想出来了,答案有两个组成部分。
表现不佳
我意识到我的糟糕表现是由于异步API的同步测试。我使用Scalatest和Scalacheck基于属性的测试,并使用futureValue
方法阻止异步请求。出于某种原因,我已将PatienceConfiguration
的interval
设置为500毫秒,因此每个futureValue
调用至少需要半秒钟,即使数据库查询本身通常在最多20毫秒,通常<10毫秒。我最终将间隔时间缩短到2毫秒,性能大大提高。
Scalatest 3具有正确的异步测试支持,但从3.0.0-M15开始,GeneratorDrivenPropertyChecks
目前不支持异步。这might change。
诊断记录
我安装了SLF4J简单日志记录后端,其中libraryDependencies
条目为"org.slf4j" % "slf4j-simple" % "1.7.12"
。通过设置simple logger properties到application.conf
。
我设置了一个Java系统属性,告诉SLF4J-simple登录调试模式org.slf4j.simpleLogger.defaultLogLevel=debug
,然后在SBT提示符下运行test
。因为这导致了Slick查询编译器输出的荒谬量,所以我将该编译器的记录器的调试输出设置回info
,这通过添加属性org.slf4j.simpleLogger.log.slick.compiler=info
来大大压制了额外的输出。 。您可以通过这种方式修改与前缀匹配的记录器级别。
实际上设置属性是一个非常重要的问题。我尝试了几种方法:
通过添加test/resources/application.conf
通过Typesafe配置(org.slf4j.simpleLogger.defaultLogLevel=debug
)设置属性不工作。通常,在解析配置之前由系统属性设置的情况就是这种情况,因此我假设记录器就是这种情况。
在启动SBT工作时从命令行设置属性,通过使用sbt -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
启动SBT,但在使用SBT的非分叉JVM中运行测试时仅 设置fork in test := false
。
使用javaOptions += "org.slf4j.simpleLogger.defaultLogLevel=debug"
从SBT设置属性不工作,是否分叉JVM。
通过将org.slf4j.simpleLogger.defaultLogLevel=debug
添加到test/resources/simplelogger.properties
来设置属性,这对于分叉的JVM和unforked都有效。