并行ScalaTest运行测试(Run ScalaTest tests in parallel)

2019-08-18 19:52发布

考虑下面的测试套件:

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

Answer 1:

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

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

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

如果包含-P在命令行中, Runner将通过一个DistributorSuite是你与指定-sRunner将建立一个线程池来执行任何Suite交给了S Distributorput法并行。

它还将运行在隔离的测试,因此beforeafter将在每一个线程中运行。 查看更多在文档中的ParallelTestExecution和亚军 。

在SBT,使用该标志,这添加到build.sbt

testOptions in Test += Tests.Argument("-P")


文章来源: Run ScalaTest tests in parallel