TestNG不仅允许我们把很多个方法归属到一个组下,还允许我们把组包含到另一个组内,我们可以灵活的决定说在我们的测试中使用哪些组的方法来测试。在第一篇文章中,我们也简单的介绍过TestNG组。我对TestNG组的理解,其实就是给方法或组贴标签,具有相同标签的就是一个组的,标签可以有多个,所以一个方法会或组可能同时属于多个组。
在代码内我们可以这样声明一个方法属于某个组:
@Test(groups = { "group1" })
public void testMethod() {
}
在xml文件中,则有更加丰富的机制。在xml文件中我们用组<groups>来标签来声明要运行的组,这个声明既可以直接放在套件Suite下,也可以放在用例Test内。但是要注意的是,在suite声明的groups对suite下的全部Test都会起作用,在Test内声明的groups则仅作用在这个Test内。
下面是一个例子,我们可以观察下直接声明在suite的groups和声明在了test内的groups的运行情况。
import org.testng.annotations.Test;
public class TestGroupsScope {
//将会在suite内声明,因此所有Test都会运行这个组
@Test(groups = {"group1"})
public void methodGroup1(){ }
//将会在Test1内声明,因此仅Test1运行了这个组
@Test(groups = {"group2"})
public void methodGroup2(){ }
//将会在Test2内声明,因此仅Test2运行了这个组
@Test(groups = {"group3"})
public void methodGroup3(){ }
//由于没有被列入需要被运行的组而不会运行
@Test(groups = {"group4"})
public void methodGroup4(){ }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="testSuite">
<groups>
<run>
<include name="group1"/>
</run>
</groups>
<test name="test1">
<groups>
<run>
<include name="group2"/>
</run>
</groups>
<classes>
<class name="com.testng.TestGroupsScope"/>
</classes>
</test>
<test name="test2">
<groups>
<run>
<include name="group3"/>
</run>
</groups>
<classes>
<class name="com.testng.TestGroupsScope"/>
</classes>
</test>
</suite>
![](https://i-blog.csdnimg.cn/blog_migrate/97b40f9aa22e1794cb6a7edc76d5e931.png)
从运行的结果可以看到,由于我在suite内说明需要运行group1因此在Test1和Test2内都运行了group1的Method,group2和group3的Method则只在各种声明的Test内运行,由于group4没有任何地方说需要运行它,因此它并没有运行。(组的exclude和include就像取补,include就是取某个集合,不管是exclude还是include,最后运行的内容都是全集和exclude include后的交集。)
注:如果我们仅是希望说暂时不跑某个方法,也不用这么麻烦来指定组然后exclude,而是可以直接在方法上将其enabled属性置为false。
最后提一下,组是可以包含其他组的,具体的语法如下:
下面的组all包含了functest组和checkintest组
<test name="Regression1">
<groups>
<define name="all">
<include name="functest"/>
<include name="checkintest"/>
</define>
<run>
<include name="all"/>
</run>
</groups>
<classes>
<class name="test.sample.Test1"/>
</classes>
</test>
附上这部分的官方文档,你想要的都在这里!
https://testng.org/doc/documentation-main.html#test-groups