并行运行ScalaTest测试

时间:2013-04-01 22:01:37

标签: scala sbt scalatest

鉴于以下测试套件:

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)?理想情况下,我希望执行顺序在stdout上生成以下内容:

before
1a
2a
2b
1b
after

1 个答案:

答案 0 :(得分:23)

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

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

请注意-P是必需的。来自消息来源:

  

如果在命令行中包含-PRunner将通过。{}   使用Distributor指定的Suite -sRunner将设置   一个线程池来执行传递给Suite的任何Distributor   put方法并行。

它也将单独运行测试,因此beforeafter将在每个线程中运行。请参阅ParallelTestExecutionRunner的文档中的详细信息。

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

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