首页 > 解决方案 > sbt:在单个 JVM 中并行执行测试类

问题描述

我将 JUnit 4/5 与 sbt(版本 1.4.7)一起使用,我想在每个单独的 JVM 中并行运行测试类。

例子:

     (Running)               (Waiting Tests like a queue)
[JVM 1: TestClass1] <------ [TestClass4, TestClass5, ...]
[JVM 2: TestClass2]
[JVM 3: TestClass3]

我想要以下行为:一旦任何测试类执行完成,它将等待测试类分派到空闲的 JVM。

我已经尝试了以下 sbt 配置,但它不会像我预期的那样工作:

fork in Test := true
concurrentRestrictions in Test := Seq(
  Tags.limit(Tags.ForkedTestGroup, 4)
)

import Tests._

{
  def groupByFirst(tests: Seq[TestDefinition]) =
    tests groupBy (_.name(0)) map {
      case (letter, tests) =>
        val options = ForkOptions().withRunJVMOptions(Vector("-Dfirst.letter"+letter))
        new Group(letter.toString, tests, SubProcess(options))
    } toSeq

    Test / testGrouping := groupByFirst( (Test / definedTests).value )
}

有什么办法可以满足这个吗?

标签: javasbt

解决方案


推荐阅读