關於TestNG,也是一邊學一邊總結,對於TestNG和Junit的比較其實也沒有什麼意義,都是一種測試框架,都是為了應用而生的東西,沒有必要說誰好誰不好了。用的熟練用的好就是真的好啊。
下面簡單的總結了些關於TestNG的基本使用方法,如果說的不明白或者有錯誤的地方,還望大家不要手下留情了。盡情拍磚,使勁的拍。。。。
首先我們得了解一下關於TestNG的幾種註釋方法(都是從官網上翻譯的,有問題迫切希望大家指正),瞭解以後往下走會越來越順的。
@BeforeSuite(執行集合之前執行的方法,它的優點我覺得應該體現在執行配置檔案的時候,同時新增多個class,然後讓有關的class同時執行進行測試)
@AfterSuite(執行完所有的測試集合以後執行的方法)
@BeforeClass(當前所在類的測試帶@Test註釋的方法執行之前執行一次)
@AfterClass (當前所在類的測試全部執行完以後執行一次)
@BeforeTest (帶有@Test註釋的方法執行之前都會執行一次beforeTest中的方法)
@AfterTest (帶有@Test註釋的方法執行之後都會執行一次afterTest中的方法)
@BeforeMethond(在每個測試的方法之前執行一次)
@AfterMethond(在每個測試的方法執行之後執行一側)
@BeforeGroups(結合在配置檔案中使用,每個組執行之前執行一次)
@AfterGroups(結合在配置檔案中使用,每個組執行之後執行一次)
@Test(表明這是一個測試用例的方法)
上面個都是一些最基本的註釋方法,接下來可以看到稍微複雜點的註釋,就是關於引數化和監控之類的註釋:
@Listeners(相當於監控類,主要監控suite method 之類的相關動作,它主要是實現ISuiteListener,ITestListener,IInvokedMethodListener這三個物件,然後重寫他們的相關方法)
@DataProvider(資料提供,以陣列的形式來提供資料,實現資料的引數化)
@Parameters (結合配置檔案來提供資料,實現資料的引數化)
我門在學習TestNG時,其實TestNG最大的優點我覺得應該體現在它的Suite XML檔案上,如果我們想同時執行幾個測試類,這個時候我們不需要像JUnit那樣在類裡面定義Suite類了,TestNG將Suite從類裡面分離出來了,它是直接寫在一個XML檔案中的。
為了更好的理解上面幾種註釋方法,下面直接在Suite XML配置檔案中定義來對他們進行了解,我覺得這樣理解起來或許會更快一點。
首先我們看看Suite XML檔案的基本格式:
<!-- suite name 自己定義,沒有任何限制 --> <suite name="xxx"> <!-- test name 也是自己定義的,名稱不做任何限制 --> <test name="xxx"> <!-- classes name 也是自己定義的,名稱不做任何限制 --> <classes name="xxx"> <!-- 可以新增多個class,然後同時執行這幾個測試類--> <class name="packageName.className1"/> <class name="packageName.classNam2"/> </classes> </test> </suite>
Group的使用(結合下面的程式碼可以看出,當執行suiteXML檔案的時候只有在組裡面的測試用例才能被執行,在執行這個測試之前就會呼叫@BeforeGroups中的方法,執行完這個測試之後就會執行@AfterGroups這個方法)
@Test(groups={"test1"}) public void testMethond6(){ System.out.println("testMethond6"); } @Test (groups={"test2"}) public void testMethond7(){ System.out.println("tsetMethond7"); }
Suite XML 檔案:
<suite name="xxx"> <test name="xxx"> <gropus name="xxx"> <run> <include name="test1" /> </run> </groups> <classes name="xxx> <class name="className"> </class> </classes> </test> </suite>
當我們執行上面的Suite XML檔案的時候,只有被定義為test1的Group,方法“testMethond6”才會被執行,通過Group的控制,我們可以自定義一個測試類中需要執行的方法。
關於DataProvider的使用(通過下面的程式碼展現):
定義好DataProvider,然後將資料以陣列的形式寫到陣列裡面,在測試方法中直接呼叫DataProvider中定義好的資料:
@DataProvider(name="data1") public static Object[][] getData(){ return new Object[][] {{"user1","password1"},{"user2","password2"},{"user3","password3"}}; } @Test(dataProvider="data1") public void testMethond8(String userName, String password){ System.out.println("The UserName is:"+userName); System.out.println("The Password is:"+password); }
關於引數化(Parameters)的使用,在suiteXML檔案中定義好資料,然後直接通過value-key對應的方式得到相關的資料。
@Test @Parameters({"username","password"}) public void testMethond9(String userName, String password){ System.out.println("The UserName is:"+userName); System.out.println("The Password is:"+password); }
Suite XML:
<suite name="testNG2"> <paremeter name="username", value="liangtao1"></paremeter> <paremeter name="password",value="password1"></paremeter> <paremeter name="username", value="liangtao2"></paremeter> <paremeter name="password",value="password2"></paremeter> <test name="testNG2"> <classes> <class name="study.testNG.TestListener"></class> </classes> </test> </suite>