在TestNG中,组groups的概念主要是相对于测试方法而言的。即,将具有相似功能的测试方法分组,这样在定义测试用例的时候就可以以组为单位加入对应的测试方法。

总体来讲,组的定义可以有两种途径:一种是在测试类中定义组groups;另一种是在testng.xml配置文件中,将测试类中定义的组groups进行组合,以得到新的组groups。归根结蒂,是在测试类中定义组的。

1. 在测试类中定义组groups

可以说,TestNG中的组都是在测试类中定义的。这些在测试类中定义的组,要么在testng.xml配置文件中被直接使用,要么在testng.xml配置文件中被组合使用。

在测试类中定义组groups的方式有两种:一种是定义测试方法组,另一种是定义测试类组。

1).测试方法组

测试方法组是指在测试类中,定义测试方法的同时,为其指定所属的组。示例如下:

public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }
 
  @Test(groups = {"window.checkintest"} )
  public void testMethod2() {
  }
 
  @Test(groups = { "functest" })
  public void testMethod3() {
  }
}

从上述示例可知,组groups的命名是多样的。一个测试方法可以属于组,也可以属于多个组。



2).测试类组

测试类组指在测试类中,为整个类的测试方法指定统一的组,当然各个测试方法还可以再指定所属的其他组。即一个测试方法可能同时属于多个组。示例如下:

@Test(groups = { "checkin-test" })
public class All {
 
  @Test(groups = { "func-test" )
  public void method1() { ... }
 
  public void method2() { ... }
}

从上述示例可知,在测试类All中的所有测试方法都属于checkin-test组。另外,测试方法method1还属于func-test组。



2. 在testng.xml配置文件中对组groups进行组合(即定义包含组的组,亦即嵌套组)

1). 通过<groups>

这是一种直观的方式。

通过前面的文章我们已经知道,在testng.xml配置文件中,可以有两种方式使用组groups,一种是定义<suite>全局的组groups,另一种是定义属于某个<test>的组groups。但无论哪种使用方式,都是对测试类中已有的组groups的重新组合。示例如下:

<test name="Regression1">
  <groups>
    <define name="functest">
      <include name="windows"/>
      <include name="linux"/>
    </define>
  
    <define name="all">
      <include name="functest"/>
      <include name="checkintest"/>
    </define>
  
    <run>
      <include name="all"/>
    </run>
  </groups>
  
  <classes>
    <class name="test.sample.Test1"/>
  </classes>
</test>

这是一个测试用例中组合使用组groups的例子。在测试类test.sample.Test1中已经定义了多个组groups,但是在该测试用例中还希望对其进行组合,以得到想要的测试方法。



2). 通过<classes>

这是一种灵活的方式,直接对测试方法进行分组。示例如下:

<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

注意这里的通配符“.*”,根据测试方法的命名将测试方法进行分组。