我希望能够使用命令行在scala测试的并行和串行执行之间切换。
具有“ test.par”系统属性的工作示例:
val parallelTestOpt = Option(System.getProperty("test.par"))
testOptions in IntegrationTest += Tests.Argument(
//Configure distributor's pool size
parallelTestOpt.map(count =>s"-P$count").getOrElse("-P1")
)
lazy val root = (project in file("."))
.configs(IntegrationTest)
.settings(Defaults.itSettings,
//If suites are executed in parallel
IntegrationTest / parallelExecution := parallelTestOpt.exists(_ != "1"),
IntegrationTest / testForkedParallel := parallelTestOpt.exists(_ != "1")
)
“有问题的”部分是parallelTestOpt.map(count =>s"-P$count").getOrElse("-P1")
。当未指定“ test.par”属性时,我不想提供默认值“ -P1”。实现该目标的最佳实践是什么?
也许整个概念是错误的,我应该以其他方式来做?
作为一种替代方法,考虑将并行性问题分解为自定义命令
commands += Command.single("testpar") { (state, numOfThreads) =>
s"""set IntegrationTest / testOptions += Tests.Argument("-P$numOfThreads")"""::
"set IntegrationTest / parallelExecution := true" ::
"set IntegrationTest / testForkedParallel := true" ::
"IntegrationTest / test" :: state
}
并用testpar 6
执行,以6个线程池运行。