限制scalatest并行执行线程数

Mat*_*ski 5 scala sbt scalatest

我正在尝试并行执行测试的某些部分,因此我用ParallelTestExecution特征扩展了这些测试类,唯一的问题是它一次运行太多测试。据我了解,2 * number_of_cpu_cores在我的例子中,它最多可以进行 2*8 测试。它太多了,我想将其限制为最多 4 个线程。我尝试使用 SBTconcurentRestrictions in Test设置,但它不会改变任何内容(我认为它只影响并发测试类的执行,不会影响一个类中并发测试的数量)。有没有办法强制 scalaTest 并行运行最多 N 个测试?如果我可以设置每个测试类的最大线程数,那将是最好的,因为某些测试消耗的资源较少,并且我可以一次运行 4 个以上的测试。

Mat*_*ski 3

所以一年多后我又回到了这个问题,因为我以前无法解决它。我在这个项目中标记了一个解决方案: 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)
        )
      )
    ))
}
Run Code Online (Sandbox Code Playgroud)

更多它是如何工作的以及一些示例可以在这里找到: https: //github.com/mateuszgruszczynski/scalatesttwolevelparallelism