【问题标题】:How to run ScalaTest tests in the SAME class in PARALLEL如何在 PARALLEL 的 SAME 类中运行 ScalaTest 测试
【发布时间】:2019-02-25 21:50:04
【问题描述】:

在具有

的环境中
  • scala 2.12
  • sbt 1.1.4
  • 最新的 3.0.5

我无法在同一类中并行运行测试,因为看起来 SBT 将在每个类中以并行方式运行,而不是同一类中的测试。

例如

  • 我在qa.parallelism package 中有一个名为TestA 的类。此类包含两个测试,称为 test1test2
  • 我在qa.parallelism package 中有另一个名为TestB 的类,其中包含一个名为test1 的测试。

如果我跑了

testOnly qa.parallelism.*

通过日志我了解到 TestA.test1 和 TestB.test1 是同时执行的,

但是如果我跑了

testOnly qa.parallelism.TestA

包含两个测试(test1test2),我知道test2 将在test1 的末尾执行。

有没有办法同时运行单个类的每个测试,或者我应该为每个测试创建一个类?

谢谢。

【问题讨论】:

    标签: sbt scalatest


    【解决方案1】:

    ParallelTestExecution docs 状态默认 ScalaTest 行为是:

    ...并行运行不同的套件,但任何一个套件的测试 顺序。

    但是,混入 ParallelTestExecution 特征可以使同一类中的测试并行运行。例如,

    import org.scalatest.{FlatSpec, Matchers, ParallelTestExecution}
    
    class HelloSpec extends FlatSpec with Matchers with ParallelTestExecution {
      "The Hello object" should "say hello 1" in {
        println("1")
        Hello.greeting should be ("hello")
      }
    
      it should "say hello 2" in {
        println("2")
        Hello.greeting should be ("hello")
      }
    
      it should "say hello 3" in {
        println("3")
        Hello.greeting should be ("hello")
      }
    }
    

    在不同的sbt test 执行中输出不同顺序的 printlns。

    【讨论】:

    • 上述解决方案将允许您并行运行测试,但会将并发测试的数量限制为 2*cpu 核心数。如果您有兴趣同时运行所有测试(并且超出该限制),您可以查看我的解决方案以解决类似问题:stackoverflow.com/questions/45169343/…
    猜你喜欢
    • 2015-10-06
    • 2013-03-23
    • 2014-09-11
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2014-07-26
    相关资源
    最近更新 更多