15

给定以下测试套件:

class ParallelizeMe extends FunSuite with BeforeAndAfterAll {

  override def beforeAll() = println("before")              
  override def afterAll()  = println("after")               

  test("test 1") {                                          
    println("1a")
    Thread.sleep(3000)                                      
    println("1b")                                           
  }

  test("test 2") {                                          
    println("2a")
    Thread.sleep(1000)                                      
    println("2b")
  }

} 

如何并行运行测试(通过 sbt)?理想情况下,我希望执行顺序在标准输出上产生以下内容:

before
1a
2a
2b
1b
after
4

1 回答 1

24

使用ParallelTestExecution和 的-P命令行参数Runner使它们并行运行:

import org.scalatest.{ParallelTestExecution, BeforeAndAfterAll, FunSuite}
class ParallelizableSpec extends FunSuite with BeforeAndAfterAll with ParallelTestExecution {
   ...
}

请注意 -P 是必需的。从来源:

如果你-P在命令行中包含,Runner会将 a 传递 DistributorSuite你用 指定的 s -sRunner将设置一个线程池来并行执行Suite传递给Distributor' 方法的任何 s。put

它还将单独运行测试,因此beforeafter在每个线程中运行。在ParallelTestExecutionRunner的文档中查看更多信息。

在 SBT 中,要使用该标志,请将其添加到build.sbt

testOptions in Test += Tests.Argument("-P")
于 2013-04-01T22:47:41.670 回答