在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>
注意这里的通配符“.*”,根据测试方法的命名将测试方法进行分组。