我很难弄清楚在缓慢执行的集成测试中发生了什么,使用巧妙的方法写入数据库。但是,我不知道如何通过SLF4J访问诊断日志记录。
发布于 2016-03-22 16:18:48
我最终自己解决了这个问题,答案有两个部分。
性能差的
我意识到我糟糕的性能是因为异步API的同步测试。我使用Scalatest和基于Scalacheck属性的测试,并使用futureValue方法阻止异步请求。出于某种原因,我已经将PatienceConfiguration的PatienceConfiguration设置为500 in,因此每个futureValue调用至少花费半秒时间,尽管数据库查询通常在最多20 in内执行,并且通常小于10 in。我最终把间隔缩短到2ms,性能得到了很大的提高。
Scalatest 3有适当的异步测试支持,尽管从3.0.0到M15,GeneratorDrivenPropertyChecks目前不支持异步。这个可能会改变。
诊断测井
我安装了SLF4J简单日志后端和"org.slf4j" % "slf4j-simple" % "1.7.12"的SBT libraryDependencies条目。通过通过简单记录器属性设置application.conf无法使它正常工作。
我设置了一个Java属性,告诉SLF4J--简单地登录调试模式org.slf4j.simpleLogger.defaultLogLevel=debug,然后在SBT提示符下运行test。因为这导致了来自灵活查询编译器的大量输出,所以我将编译器的记录器的调试输出设置为info,这在很大程度上压缩了额外的输出,方法是添加属性org.slf4j.simpleLogger.log.slick.compiler=info。您可以通过这种方式修改与前缀匹配的记录器级别。
实际上,设置属性是一个非平凡的问题。我尝试了几种方法:
test/resources/application.conf)添加org.slf4j.simpleLogger.defaultLogLevel=debug设置属性无效。通常,对于在分析配置之前由系统属性设置的东西,情况就是这样,所以我假设这是记录器的情况。sbt -Dorg.slf4j.simpleLogger.defaultLogLevel=debug启动SBT,但只有在非分叉JVM中运行具有SBT设置fork in test := false的测试时,才能从命令行设置属性。javaOptions += "org.slf4j.simpleLogger.defaultLogLevel=debug"设置SBT中的属性不起作用,分叉JVM与否。org.slf4j.simpleLogger.defaultLogLevel=debug添加到test/resources/simplelogger.properties来设置属性,既适用于分叉JVM,也适用于取消分叉的JVM。https://stackoverflow.com/questions/36159790
复制相似问题