假设我有6个测试套件:A B C D E F,我希望A B C按顺序运行,THEN并行运行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
文件中遗漏了一些东西)。
2条答案
按热度按时间mrphzbgm1#
Stepwise
的文档说明如下:Stepwise和Sequential之间的差异在于,虽然Stepwise会循序执行自己的巢状套件,它会将传递给它的散发者传递给这些巢状套件。因此,如果定义了该散发者,巢状套件就可以平行执行自己的巢状套件和测试。相比之下,Sequential永远会将散发者的None传递给巢状套件。因此传递给Sequential构造器的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。
所以显而易见的问题是:什么
Distributor
被传递给MasterSuite
的runNestedSuites
方法?因为Distributor
是最终要传递给Suites
对象的runNestedSuites
方法的,该对象包含D
,E
和F
。通过调试器的实验,我发现
Distributor
通常是None
,但是如果你把ParallelTestExecution
特征混合到你的MasterSuite
类中,你会得到一个Some
,我也在调试器中验证了这一点。现在,
MasterSuite
将依次运行A
、B
和C
,然后开始并行运行其他套件。那么,问题解决了吗?不幸的是,没有,因为当它 * 开始 * 并行运行
D
,E
和F
时,它没有等待它们 * 完成 *,而是直接宣布它们都成功了--尽管我故意在F
中添加了一个失败的测试,以查看是否一切都正常工作。所以就我所见,本来应该这样做的,现在却坏了这使我在多年使用ScalaTest的经验之后得出了我个人的结论:这是一个充满了bug垃圾,我强烈建议远离它。很抱歉,我不能给出比这更乐观的答案。
pvcm50d12#
可能与我刚刚报道的this issue有关。