Bas*_*que 7 parallel-processing scala scalatest
假设我有 6 个测试套件:ABCDEF,我希望 ABC 顺序运行,然后并行运行 DEF。
输出如下:
A
B
C // always in that order
E
D
F // The order doesn't matter
这个想法是能够独立于其余测试来测试 ABC。
我已经尝试过的
创建一个像这样的超级顺序测试类并添加@DoNotDiscover顺序测试。
A
B
C // always in that order
E
D
F // The order doesn't matter
但是,即使 ABC 顺序运行,也会与其他测试并行运行。
我也尝试过
class MasterSuite extends Stepwise(
  Sequential(new A, new B, new C)
)
但对我来说,它按顺序运行所有测试(也许我错过了build.sbt文件中的某些内容)。
的文档Stepwise说明如下:
\n\nStepwise 和 Sequential 之间的区别在于,尽管 Stepwise 按顺序执行其自己的嵌套套件,但它会将传递给它的任何分配器传递给这些嵌套套件。因此,如果定义了该分发器,则嵌套套件可以并行运行自己的嵌套套件和测试。相比之下,Sequential 总是将 None 传递给嵌套套件,因此传递给 Sequential 构造函数的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。
\n
所以显而易见的问题是:Distributor传递给 的runNestedSuites方法的是什么MasterSuite?因为这Distributor就是最终要传递给包含、和的对象runNestedSuites的方法的内容。SuitesDEF
通过调试器的实验,我发现Distributor通常是None. 但是,如果您将该ParallelTestExecution特征混合到您的MasterSuite类中,您将得到一个Some,并且我也在调试器中验证了这一点。
class MasterSuite extends Stepwise(\n  new A,\n  new B,\n  new C,\n  new Suites(new D, new E, new F)) with ParallelTestExecution\n现在,MasterSuite将依次运行A、B和C然后开始并行运行其他套件。
那么,问题解决了吗?不幸的是,没有,因为虽然它显然开始运行D,E并且F并行地运行,但它没有等待它们完成,只是声明它们全部成功 \xe2\x80\x93 即使我故意添加了一个失败的测试来F查看是否一切正常正确。据我所知,这就是它应该完成的方式,但它只是被破坏了。
经过多年的 ScalaTest 经验,我得出了个人结论:它是一个充满 bug 的垃圾,我强烈建议远离它。很抱歉我无法给出比这更乐观的答案。
\n