并行运行 ScalaTest 测试
Posted
技术标签:
【中文标题】并行运行 ScalaTest 测试【英文标题】:Run ScalaTest tests in parallel 【发布时间】:2013-03-23 01:44:41 【问题描述】:给定以下测试套件:
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
【问题讨论】:
【参考方案1】:使用ParallelTestExecution
和-P
命令行参数到Runner
使它们并行运行:
import org.scalatest.ParallelTestExecution, BeforeAndAfterAll, FunSuite
class ParallelizableSpec extends FunSuite with BeforeAndAfterAll with ParallelTestExecution
...
请注意 -P 是必需的。来源:
如果你在命令行中包含
-P
,Runner
将传递一个Distributor
到您使用-s
指定的Suite
s。Runner
将设置 建立一个线程池来执行任何传递给Distributor
的Suite
sput
方法并行。
它还将单独运行测试,因此before
和after
将在每个线程中运行。在ParallelTestExecution 和Runner 的文档中查看更多信息。
在 SBT 中,要使用该标志,请将其添加到 build.sbt
:
testOptions in Test += Tests.Argument("-P")
【讨论】:
谢谢,这就是我想要的。我希望我可以让 beforeAll 和 afterAll 各运行一次,但这已经足够接近了。作为参考,我将其添加到我的 build.sbt 中:testOptions in Test += Tests.Argument("-P")
知道如何使用-c
选项来更改线程数吗?
似乎没有帮助;我看到一次运行 8 个测试。 -PN
是否记录在某处?
在亚军页面上:artima.com/docs-scalatest-2.0.M2/org/scalatest/tools/…
仅供参考:使用 sbt 0.13 你不能使用 -P 选项。 sbt 会自动处理并行执行。以上是关于并行运行 ScalaTest 测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 scalatest 运行 sbt 测试?我有一个错误:对象 scalatest 不是包 org 的成员