【问题标题】:Run ScalaTest tests in parallel并行运行 ScalaTest 测试
【发布时间】: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

【问题讨论】:

    标签: scala sbt scalatest


    【解决方案1】:

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

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

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

    如果你在命令行中包含-PRunner 将传递一个 Distributor 到您使用 -s 指定的 Suites。 Runner 将设置 建立一个线程池来执行任何传递给DistributorSuites put 方法并行。

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

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

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

    【讨论】:

    • 谢谢,这就是我想要的。我希望我可以让 beforeAll 和 afterAll 各运行一次,但这已经足够接近了。作为参考,我将其添加到我的 build.sbt 中:testOptions in Test += Tests.Argument("-P")
    • 知道如何使用-c 选项来更改线程数吗?
    • 似乎没有帮助;我看到一次运行 8 个测试。 -PN 是否记录在某处?
    • 仅供参考:使用 sbt 0.13 你不能使用 -P 选项。 sbt 会自动处理并行执行。
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2014-07-26
    • 2014-04-28
    • 2017-09-25
    • 2019-04-29
    • 2017-05-22
    • 2019-12-18
    相关资源
    最近更新 更多