我有一个由以下类组成的testNG套件:
A
C(和许多其他人)扩展了B,扩展了A。
E(以及许多其他人)扩展了D,扩展了A。
测试在C和E类中。这些测试是testNG组的一部分,@ beforeGroups方法分别在B和D中。
例如,C类(和其他)具有@Test with groups ='b',而B类具有该组的@beforeGroups方法。对于另一组的类似模式,我将称之为'd',其中@beforeGroup在D类中定义。
在按顺序运行时,这一直工作正常 - suite.xml文件有一个'test'部分,带有'classes'部分,带有所有'class'条目。我没有引用.xml文件中的任何“组”,并且testNG足够聪明,可以首先运行组中的所有测试,然后是下一组,按照预期处理@beforeGroup方法(在组'b之前) ',并且在'd'之前一次。)
执行时间越来越长,我希望并行运行其中的一些。想要分成4个并行执行,每个执行包含一些类,其中这些类按顺序运行。并且@beforeGroups必须只为该组执行ONCE,无论该组的类是否被分成多个并行执行 - 这就是让我感到悲痛的部分。例如,如果我有以下内容:
组'b'中的类数(例如:C):10
组'd'中的类数(例如:E):20
我想做以下事情:
并行执行扩展B的10个类中的1:3(以及组='b')
并行执行2个扩展B的10个类中的7个(并且在group ='b'中)
并行执行扩展D(以及在group ='d'中)的20个类中的3:10
并行执行扩展D(以及在group ='d'中)的20个类中的4:10
我尝试像这样设置suite.xml文件:
<suite name="suiteName" verbose="1" parallel="tests" thread-count="10">
<test name="parallel1" time-out="300000">
<classes>
<class name="com.xxxxx.classes1-3" />
</classes>
</test>
<test name="parallel2" time-out="300000">
<classes>
<class name="com.xxxx.classes4-10" />
</classes>
</test>
<test name="parallel3" time-out="300000">
<classes>
<class name="com.xxxx.classes11-20" />
</classes>
</test>
<test name="parallel4" time-out="300000">
<classes>
<class name="com.xxxx.classes21-30" />
</classes>
</test>
</suite>
问题是在这次更改之后,@ beforeGroups代码多次运行(我认为每组两次),而不是一次。我确定这与我在suite.xml文件的多个“测试”部分中分隔每个组的事实有关,在这之前它们都在一个'test'中。
有什么建议吗?