代码之家  ›  专栏  ›  技术社区  ›  Mateusz Gruszczynski

限制scalatest并行执行线程数

  •  4
  • Mateusz Gruszczynski  · 技术社区  · 9 年前

    我试图并行执行部分测试,所以我用 ParallelTestExecution 但是,唯一的问题是它一次运行太多测试。据我所知 2 * number_of_cpu_cores concurentRestrictions in Test 设置,但它不会改变任何东西(我认为它只影响并发测试类的执行,不影响一个类中并发测试的数量)。有没有办法强制scalaTest并行运行max N测试?如果我可以设置每个测试类的最大线程数,那将是最好的,因为一些测试消耗的资源更少,并且我可以一次运行其中的4个以上。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Mateusz Gruszczynski    8 年前

    所以一年多后,我又回到这个问题上来,因为我以前无法解决它。我在这个项目的解决方案上盖章: 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

        2
  •  1
  •   ka4eli    9 年前

    尝试将此行添加到sbt项目设置中:

    testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-P4")
    

    http://www.scalatest.org/user_guide/using_the_runner :

    没有中间空间)来指定要创建的线程数 在线程池中。如果未指定数字(或0),则 线程将根据可用处理器的数量决定。

    推荐文章