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>
從運行的結果可以看到,由於我在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