TestNG—學習筆記2

tao先生發表於2015-05-21

        關於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>

相關文章