我正在尝试并行执行部分测试,因此我使用ParallelTestExecution
特性扩展了这些测试类,唯一的问题是它一次运行了太多测试。据我所知,它运行到2 * number_of_cpu_cores
所以在我的情况下2 * 8测试。它的方式太多了,我想将它限制为最多4个线程。我试图使用SBT concurentRestrictions in Test
设置,但它不会改变任何东西(我认为它只影响并发测试类的执行,并不影响一个类中的并发测试数)。有没有办法强制scalaTest并行运行最大N次测试?最好是我可以设置每个测试类的最大线程数,因为有些测试耗费的资源较少,而且我可以同时运行4个以上。
答案 0 :(得分:1)
尝试将此行添加到您的sbt项目设置中:
testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-P4")
来自http://www.scalatest.org/user_guide/using_the_runner:
-P选项可以选择附加一个数字(例如" -P10" - 没有中间空间)来指定要创建的线程数 在线程池中。如果未指定数字(或0),则数量为 线程将根据可用的处理器数量来决定。
答案 1 :(得分:1)
因此,一年多以后,我又回到了这个问题,因为以前我无法解决它。我在这个项目的解决方案上加盖了标记:https://github.com/agido/pageobject。这比我需要的要复杂一些,因此根据他们的代码,我创建了一个更简单的解决方案,仅具有一个可以用作标准ParallelTestExecution
的特征。
package org.scalatest
import java.util.concurrent.Executors
import org.scalatest.tools.ConcurrentDistributor
trait FixedThreadPoolParallelExecution extends SuiteMixin with ParallelTestExecution{ this: Suite =>
val threadPoolSize: Int
abstract override def run(testName: Option[String], args: Args): Status =
super.run(testName, args.copy(
distributor = Some(
new ConcurrentDistributor(
args,
java.util.concurrent.Executors.newFixedThreadPool(threadPoolSize, Executors.defaultThreadFactory)
)
)
))
}
更多工作原理,并在此处找到一些示例:https://github.com/mateuszgruszczynski/scalatesttwolevelparallelism