testNG @beforeGroups和并行测试以及suite.xml文件

时间:2017-08-29 16:37:56

标签: java testng parallel-testing

我有一个由以下类组成的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'中。

有什么建议吗?

0 个答案:

没有答案