其實這篇文章的group宏哥在上一篇中就提到過,可是就是舉例一筆帶過的,所以今天專門有一篇文章來說解Group的相關知識。但願你們茅塞頓開 ,有着更進一步認識和了解測試組。java
TestNG 容許你將複雜的測試方法歸類爲不一樣的組。不只僅是能夠聲明某個方法屬於某個組,並且還可讓組包含其餘的組。這樣TestNG能夠調用或者請求包含一組特定的組 (或者正則表達式)而排除其餘不須要組的集合。這樣,若是你打算將測試分紅兩份的時候,就無需從新編譯。這個特色,會給你在劃分組的時候帶來很大的靈活性。linux
組(Group)在testng.xml文件中指定,能夠在<test>或<suite>標記下找到。<suite>標記中指定的組適用於下面的全部<test>標記。請注意,組在這些標記中是累積的:若是在<suite>中指定組「a」,在<test>中指定「b」 ,則將包括「a」和「b」。正則表達式
例如,一般將測試劃分爲兩種類別是再常見不過的了:windows
檢查性測試(Check-in test):這些測試在你提交新代碼以前就會運行。它們通常都是很快進行的,而且保證沒有哪一個基本的功能是很差使的。微信
功能性測試(Functional test):這些測試涵蓋你的軟件中全部的功能,而且至少天天運行一次,不過你也可能但願他們持續的運行。框架
典型的來講,檢測性測試一般是功能性測試的一個子集。TestNG容許你根據我的感受來進行組劃分。例如,你可能但願把你全部的測試類都劃歸爲"functest"組,而且額外的有幾個方法輸入"checkintest"組。測試
TestNG容許您以很是直觀的方式使用測試組指定。例如,您能夠經過說明您的整個測試類屬於「functest」組來構建測試,另外還有一些方法屬於「checkintest」組:ui
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自動化測試交流羣:694280102 * * Java自動化測試框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */
public class Test1 { @Test(groups = { "functest", "checkintest" }) public void testMethod1() { } @Test(groups = {"functest", "checkintest"} ) public void testMethod2() { } @Test(groups = { "functest" }) public void testMethod3() { } }
經過下面的內容調用TestNGspa
<test name="Test1">
<groups>
<run>
<include name="functest"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
以上會運行上面那個類中全部的測試,當要使用checkintest進行調用的時候,就僅僅運行testMethod1()和testMethod2()。.net
下面是另一個例子。此次使用正則表達式。假定有些測試方法不該該運行在Linux環境下,你的測試會看起來像:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自動化測試交流羣:694280102 * * Java自動化測試框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @Test public class Test1 { @Test(groups = {"windows.checkintest"}) public void testWindowsOnly() { } @Test(groups = {"linux.checkintest"}) public void testLinuxOnly() { } @Test(groups = {"windows.functest"}) public void testWindowsToo() { } }
而後你就可使用下面這個 testng.xml 來只運行在Windows下的方法:
<test name="Test1"> <groups> <run> <include name="windows.*"/> </run> </groups> <classes> <class name="example1.Test1"/> </classes> </test>
注意:TestNG使用的是正則表達式,而不是通配符。注意這兩者的區別
例如,"anything" 是匹配於 ".*" -- 點和星號 -- 而不是星號 "*".
測試組也能夠包含其餘組。這樣的組叫作「元組」(MetaGroups)。例如,你可能要定義一個組all來包含其餘的組,chekcintest 和functest。"functest"自己只包含了組windows和linux,而"checkintest"僅僅包含windows。你就能夠在屬性文件中這樣定義:
<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>
TestNG 容許你包含組,固然也能夠排除之。
譬如說,由於最近的改動,致使當前的測試中斷而且,你尚未時間修復這些問題都是司空見慣的。可是,你還須要本身的功能測試能夠正確運行,因此,製藥簡單的讓這些不須要的測試失效就能夠了。可是別忘記在之後須要的時候,要從新讓其生效。
一個簡單的辦法來解決這個問題就是建立一個叫作"broken"組,而後使得這些測試方法從屬於那個組。例如上面的例子,假設我知道testMethod2()會中斷,因此我但願使其失效:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自動化測試交流羣:694280102 * * Java自動化測試框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @Test(groups = {"checkintest", "broken"} ) public void testMethod2() {}
而我所須要作的一切就是從運行中排除這個組:
<test name="Simple example">
<groups>
<run>
<include name="checkintest"/>
<exclude name="broken"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
經過這種辦法,咱們既能夠獲得整潔的測試運行,同時也可以跟蹤那些須要稍後修正的中斷的測試。
注意:你能夠能夠經過使用"enabled"屬性來完成,這個屬性適用於@Test 和 @Before/After annotation。
能夠在類級別定義組,以後還能夠在方法級定義組:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自動化測試交流羣:694280102 * * Java自動化測試框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @Test(groups = { "checkin-test" }) public class All { @Test(groups = { "func-test" ) public void method1() { ... } public void method2() { ... } }
在這個類中,method2() 類級組"checkin-test"的一部分,而method1()即屬於"checkin-test"也屬於"func-test"組。
你能夠排除或者包含單個方法
<test name="Test1">
<classes>
<class name="example1.Test1">
<methods>
<include name=".*enabledTestMethod.*"/>
<exclude name=".*brokenTestMethod.*"/>
</methods>
</class>
</classes>
</test>
這能夠派上用來停用單個方法而沒必要從新編譯任何東西,但我不建議過多地使用這種技術,由於若是你開始重構Java代碼(正則表達式中使用的正則表達式),它會使你的測試框架崩潰。標籤可能再也不符合您的方法)。
嘿嘿!今天就分享到這裏。下一篇計劃是測試方法(Test Method),但願小夥伴們和童鞋們喜歡和繼續關注宏哥!
有問題加入java自動化測試交流羣:694280102
我的公衆號 微信羣 (微信羣已滿100,能夠加宏哥的微信拉你進羣,請備註:進羣)
您的確定就是我進步的動力。若是你感受還不錯,就請鼓勵一下吧!記得點波 推薦 哦!!!(點擊右邊的小球便可!(^__^) 嘻嘻……)