鉴于以下测试套件:
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
答案 0 :(得分:23)
使用ParallelTestExecution
和-P
命令行参数Runner
使它们并行运行:
import org.scalatest.{ParallelTestExecution, BeforeAndAfterAll, FunSuite}
class ParallelizableSpec extends FunSuite with BeforeAndAfterAll with ParallelTestExecution {
...
}
请注意-P是必需的。来自消息来源:
如果在命令行中包含
-P
,Runner
将通过。{} 使用Distributor
指定的Suite
-s
。Runner
将设置 一个线程池来执行传递给Suite
的任何Distributor
put
方法并行。
它也将单独运行测试,因此before
和after
将在每个线程中运行。请参阅ParallelTestExecution和Runner的文档中的详细信息。
在SBT中,要使用该标志,请将其添加到build.sbt
:
testOptions in Test += Tests.Argument("-P")