ScalaTest:如何混合并行测试和顺序测试




假设我有6个测试套件:A B C D E F,我希望A B C按顺序运行,THEN在parallel中运行D E F
有这样的输出:

A
B
C // always in that order
E
D
F // The order doesn't matter

这个想法是能够在与其他测试隔离的情况下测试ABC。

我已经尝试过的

创建一个类似的超顺序测试类,并在顺序测试上添加@DoNotDiscover

class MasterSuite extends Stepwise(
Sequential(new A, new B, new C)
)

但是,即使A、B、C是按顺序运行的,也会和其他测试并行运行。

我也试过

class MasterSuite extends Stepwise(
Sequential(new A, new B, new C),
Suites(new D, new E, new F)
)

但对我来说,它会按顺序运行所有测试(也许我在build.sbt文件中遗漏了一些内容(。

Stepwise的文档说明如下:

Stepwise和Sequential之间的区别在于,尽管Stepwise按顺序执行自己的嵌套套件,但它会将传递给它的分发服务器传递给这些嵌套套件。因此,如果定义了分发服务器,嵌套套件可以并行运行自己的嵌套套件和测试。相比之下,Sequential总是将分发服务器的None传递给嵌套套件,因此传递给Sequentical构造器的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。

所以显而易见的问题是:Distributor传递给MasterSuiterunNestedSuites方法是什么?因为Distributor最终将传递给包含DEFSuites对象的runNestedSuites方法。

通过调试程序的实验,我发现Distributor通常是None。但是,如果将ParallelTestExecution特性混合到MasterSuite类中,则会得到一个Some,我也在调试器中验证了这一点。

class MasterSuite extends Stepwise(
new A,
new B,
new C,
new Suites(new D, new E, new F)) with ParallelTestExecution

现在,MasterSuite将依次运行ABC,然后开始并行运行其他套件。

那么,问题解决了吗?不幸的是,没有,因为虽然它显然开始并行运行DEF,但它没有等到它们完成,只是宣布它们都成功了——尽管我故意在F中添加了一个失败的测试,以查看是否一切正常。就我所见,这就是它应该做的,但它只是坏了。

这让我在多年的ScalaTest经验后得出了个人结论:这是一个充满bug的垃圾,我强烈建议远离它。很抱歉,我不能给出比这更乐观的答案了。

可能与我刚刚报告的这个问题有关。

最新更新