gun*_*gun 6 parallel-processing scala scalatest
我正在使用一个套件(Scalatest-版本:3.2.2),其中有几个 TestSuites:
class SuiteMixedSequentialParallel
extends Stepwise(
new TestInParallel,
new TestSequentially
)
Run Code Online (Sandbox Code Playgroud)
现在,我希望所有测试都TestInParallel应该并行执行,所有测试都TestSequentially应该顺序执行。
因此我TestInParallel从ParallelTestExecution
class TestInParallel extends AnyFunSuite with ParallelTestExecution {
(0 to 10).foreach(i =>
test(s"$i") {
Thread.sleep(500)
println(s"TestInParallel $i")
}
)
}
Run Code Online (Sandbox Code Playgroud)
class TestSequentially extends AnyFunSuite {
(0 to 10).foreach(i =>
test(s"$i") {
Thread.sleep(200)
println(s"TestSequentially $i")
}
)
}
Run Code Online (Sandbox Code Playgroud)
当我运行时sbt testOnly TestInParallel,所有测试都是并行执行的。但是:当我运行时sbt testOnly SuiteMixedSequentialParallel,所有测试都会按顺序执行。
有没有人有提示,如何实现, TestInParallel当我运行时,我的测试将并行运行SuiteMixedSequentialParallel?
套件TestInParallel和TestSequentially仍应按顺序运行。只是测试TestInParallel应该并行运行。
来自逐步文档:
执行StepsSuite时,无论是否传递Distributor,都会按照传递的顺序依次执行其嵌套套件:Step1Suite、Step2Suite、Step3Suite、Step4Suite和Step5Suite。
ScalaTest 并行运行测试套件的常规方法是并行运行不同的套件,但按顺序运行任何一个套件的测试。
因此,当您将上述两者结合起来时,您会阻止 scalatest 并行运行,从而使 EvenTestInParallel顺序运行。
为了解决这个问题,您需要将ParallelTestExecution特征混合到 中SuiteMixedSequentialParallel,意思是:
class SuiteMixedSequentialParallel
extends Stepwise(
new TestInParallel,
new TestSequentially
) with ParallelTestExecution
Run Code Online (Sandbox Code Playgroud)
这将并行运行两个套件,TestInParallel并行运行测试,并按顺序运行 中的测试TestSequentially。如预期的。
为了验证这一点,我分别将printlnfromHallo 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 9
Run Code Online (Sandbox Code Playgroud)