我使用的是一个套件(Scalatest-version: 3.2.2),里面有几个TestSuites:
class SuiteMixedSequentialParallel
extends Stepwise(
new TestInParallel,
new TestSequentially
)现在,我希望TestInParallel中的所有测试都应该并行执行,TestSequentially中的所有测试都应该按顺序执行。
因此,我从ParallelTestExecution扩展了TestInParallel
class TestInParallel extends AnyFunSuite with ParallelTestExecution {
(0 to 10).foreach(i =>
test(s"$i") {
Thread.sleep(500)
println(s"TestInParallel $i")
}
)
}class TestSequentially extends AnyFunSuite {
(0 to 10).foreach(i =>
test(s"$i") {
Thread.sleep(200)
println(s"TestSequentially $i")
}
)
}当我运行sbt testOnly TestInParallel时,所有测试都是并行执行的。但是:当我运行sbt testOnly SuiteMixedSequentialParallel时,所有测试都是按顺序执行的。
当我运行SuiteMixedSequentialParallel时,有没有人知道如何实现我在TestInParallel中的测试并行运行?
套件TestInParallel和TestSequentially应该仍然按顺序运行。只有TestInParallel中的测试应该并行运行。
发布于 2020-09-01 20:31:26
来自Stepwise documentation
执行StepsSuite时,无论是否传递了分发服务器,它都将按照传递的顺序依次执行其嵌套套件: Step1Suite、Step2Suite、Step3Suite、Step4Suite和Step5Suite。
来自ParallelTestExecution documentation
ScalaTest并行运行测试套件的正常方法是并行运行不同的套件,但任何一个套件的测试都是顺序运行的。
因此,当您将以上两者结合起来时,您会阻止scalatest并行运行,这样即使是TestInParallel也是顺序运行的。
为了解决这个问题,您需要将ParallelTestExecution特征混合到SuiteMixedSequentialParallel中,这意味着:
class SuiteMixedSequentialParallel
extends Stepwise(
new TestInParallel,
new TestSequentially
) with ParallelTestExecution这将并行运行两个套件,并行运行TestInParallel中的测试,并顺序运行TestSequentially中的测试。如你所愿。
为了验证这一点,我将println从Hallo Welt分别更改为TestInParallel和TestSequentially。
我得到的输出是:
TestInParallel 8
TestInParallel 4
TestInParallel 0
TestInParallel 7
TestInParallel 5
TestInParallel 3
TestSequentially 0
TestInParallel 2
TestInParallel 1
TestInParallel 9
TestInParallel 6
TestSequentially 1
TestSequentially 2
TestSequentially 3
TestSequentially 4
TestSequentially 5
TestSequentially 6
TestSequentially 7
TestSequentially 8
TestSequentially 9https://stackoverflow.com/questions/63683141
复制相似问题