1

我有一个由这样的类组成的 testNG 套件:

一个

C(和许多其他)扩展了 B,后者扩展了 A。

E(和许多其他)扩展了 D,它扩展了 A。

测试在 C 类和 E 类中。这些测试是 testNG 组的一部分,@beforeGroups 方法分别在 B 和 D 中。

例如,C 类(和其他类)有一个带有 groups='b' 的 @Test,而 B 类有该组的 @beforeGroups 方法。另一个组的类似模式,我将调用“d”,其中@beforeGroup 在 D 类中定义。

这在按顺序运行时运行良好——suite.xml 文件有一个“测试”部分和一个“类”部分,以及所有“类”条目。我没有在 .xml 文件中引用任何“组”,并且 testNG 足够聪明,可以先运行一个组中的所有测试,然后运行下一个组,按预期处理 @beforeGroup 方法(在组 'b 之前) ',并且在组 'd' 之前一次)。

执行时间正在增长到我想并行运行其中一些的地步。想分成 4 个并行执行,每个包含一些类,这些类按顺序运行。并且@beforeGroups 必须只为该组执行一次,无论该组的类是否被拆分为多个并行执行 - 这就是现在让我感到悲伤的部分。例如,如果我有以下内容:

“b”组中的类数(例如:C):10

组“d”中的类数(例如:E):20

我想做以下事情:

并行执行 1:扩展 B 的 10 个类中的 3 个(并且在 group='b' 中)

并行执行 2:扩展 B 的 10 个类中的 7 个(并且在 group='b' 中)

并行执行 3:扩展 D 的 20 个类中的 10 个(并且在 group='d' 中)

并行执行 4:扩展 D 的 20 个类中的 10 个(并且在 group='d' 中)

我尝试像这样设置 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 文件的多个“测试”部分中这一事实有关,而之前它们都在一个“测试”中。

有什么建议么?

4

0 回答 0