TestNG詳解(單元測試框架)


一、TestNG的優點

  1.1 漂亮的HTML格式測試報告

  1.2 支持並發測試

  1.3 參數化測試更簡單

  1.4 支持輸出日志

  1.5 支持更多功能的注解

二、編寫TestNG測試用例的步驟

  2.1 使用 Eclipse生成TestNG的測試程序框架

  2.2 在生成的程序框架中編寫測試代碼邏輯

  2.3 根據測試代碼邏輯,插入TestNG注解標簽

  2.4 配置Testng.xml文件,設定測試類、測試方法、測試分組的執行信息

  2.5 執行TestNG的測試程序

三、如何安裝TestNG

      啟動Eclipse,選擇Help-Install New Software-》點擊add-name中輸入TestNGlocation中輸入“http://beust.com/eclipse/”,點擊ok-》在彈出的install對話框中勾選TestNG復選框-Next-Accept-Finish

四、testNG用例執行后如何查看執行結果?

  4.1 Console標簽欄中展示測試用例的執行結果,如圖:

  

  4.2 在工程下也會生成一個test-output文件夾,如圖:

  

 

五、TestNG常用注解:執行順序如下

  @BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite

@BeforeSuite

表示會在當前測試集合中的任意一個測試用例開始運行前執行

@AfterSuite

表示會在當前測試集合中的所有測試程序運行結束之后執行

@BeforeTest

表示會在Test中的任意一個測試用例開始運行前執行

@AfterTest

表示會在Test中的所有測試用例運行結束后執行

@BeforeGroups

分組測試用例的任一測試用例開始運行前執行

@AfterGroups

分組測試用例的所有測試用例運行結束后執行

@BeforeClass

在當前測試類的任意一個測試用例開始運行前執行

@AfterClass

在當前測試類的所有測試用例運行結束后執行

@BeforeMethod

在每個測試方法開始運行前執行

@AfterMethod

在每個測試方法運行結束后執行

@Test

被認為是一個測試方法,既一個測試用例

六、如何創建TestNG測試集合?

  6.1 測試集合:在自動化測試的執行過程中,通常會產生批量運行多個測試用例的需求,此需求稱為運行測試集合(Test Suite

  6.2 TestNG的測試用例可以是相互獨立的,也可以按照特定的順序來執行(配置TestNG.xml

  6.3 如何配置testNG.xml文件?     

<suite name = "TestNG Suite">    //自定義的測試集合名稱
  <test name = "test1">    //自定義的測試名稱
    <classes>    //定義被運行的測試類
      <class name = "cn.gloryroad.FirstTestNGDemo" />    //測試類的路徑
      <class name = "cn.gloryroad.NewTest" />
    </classes>
  </test> 
</suite>

七、測試用例的分組(group

  7.1 只執行一組分組配置如下:

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "動物" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>

  7.2 執行多組分組時配置如下(兩種形式都可以):

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "動物" />   //name分組名稱
             <include name = "人" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>            
<suite name = "TestNG Suite">
    <test name = "Grouping">
        <groups>
       <define name = "All">
          <include name = "動物" />
          <include name = "人" />
       </define>
       <run>
          <include name = "All" />
       </run>
     </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test> 
</suite>

八、依賴測試(dependsOnMethod

  @Test(dependsOnMethod = {"方法名稱"})

  被依賴的方法優先於此方法執行

九、特定順序執行測試用例(priority

  @Test(priority = 0/1/2/3/4/…)

  按照數字大小順序優先執行,優先執行1,然后是2…

十、如何跳過某個測試方法(enabled = false

  @Test(priority = 0/1… , enabled = false)

  執行結束后,在測試報告中顯示跳過的測試用例數,例如skip=1

十一、數據注解

  11.1 參數化測試(@Parameters-》通過xml文件從外部給測試方法傳參):<Parameter name="Type" value="chrome"/>  -》參考http://www.yiibai.com/html/testng/2013/0916303.html 

創建測試案例類

    創建一個Java測試類 ParameterizedTest1.java.

    測試方法parameterTest()添加到測試類。此方法需要一個字符串作為輸入參數。

    添加注釋 @Parameters("myName") 到此方法。該參數將被傳遞testng.xml,在下一步我們將看到一個值。

創建Java類文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE

  import org.testng.annotations.Parameters;
  import org.testng.annotations.Test;

  public class ParameterizedTest1 {
      @Test
      @Parameters("myName")
      public void parameterTest(String myName) {
          System.out.println("Parameterized value is : " + myName);
      }
  }

創建 TESTNG.XML

創建 testng.xml C:\ > TestNG_WORKSPACE 執行測試案例

  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
      <test name="test1">
	  <parameter name="myName" value="manisha"/> 
	  <classes>
	      <class name="ParameterizedTest1" />
	      </classes>
      </test>
  </suite>

我們還可以定義參數在<suite>級別。假設我們已經定義在兩個<suite>和<test>級別myName,在這種情況下,常規的作用域規則適用。這意味着,任何類里面<test>標簽將查看值參數定義在<test>,而testng.xml文件中的類的其余部分將看到定義在<suite>中值

編譯使用javac的測試用例類。

C:\TestNG_WORKSPACE>javac ParameterizedTest1.java

現在,運行testng.xml,其中將運行parameterTest方法。TestNG的將試圖找到一個命名myName的第一<test>標簽的參數,然后,如果它不能找到它,它會搜索包圍在的<suit>標簽。

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

驗證輸出。

Parameterized value is : manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

TestNG 對testng.xml 的參數的類型指定的值會自動嘗試轉換。下面是支持的類型:

    String

    int/Integer

    boolean/Boolean

    byte/Byte

    char/Character

    double/Double

    float/Float

    long/Long

    short/Short

  11.2 數據驅動(@DataProvider)-》參考http://www.yiibai.com/html/testng/2013/0916303.html 

 當你需要通過復雜的參數或參數需要創建從Java(復雜的對象,對象讀取屬性文件或數據庫等..),在這種情況下,可以將參數傳遞使用數據提供者。數據提供者@DataProvider的批注的方法。這個注解只有一個字符串屬性:它的名字。如果不提供名稱,數據提供者的名稱會自動默認方法的名稱。數據提供者返回一個對象數組。

讓我們看看下面的例子使用數據提供者。第一個例子是@DataProvider的使用Vector,String或Integer 作為參數,第二個例子是關於@DataProvider 的使用對象作為參數。
實例 1

在這里 @DataProvider 通過整數和布爾參數。
創建Java類

創建一個java類PrimeNumberChecker.java。這個類檢查,如果是素數。創建這個類在 C:\ > TestNG_WORKSPACE

  public class PrimeNumberChecker {
      public Boolean validate(final Integer primeNumber) {
          for (int i = 2; i < (primeNumber / 2); i++) {
              if (primeNumber % i == 0) {
                  return false;
               }
          }
          return true;
      }
  }

創建測試案例類

    創建一個Java測試類 ParamTestWithDataProvider1.java.

    定義方法primeNumbers(),其定義為DataProvider 使用注釋。此方法返回的對象數組的數組。

    測試方法testPrimeNumberChecker()添加到測試類中。此方法需要一個整數和布爾值作為輸入參數。這個方法驗證,如果傳遞的參數是一個素數。

    添加注釋 @Test(dataProvider = "test1") 到此方法。dataProvider的屬性被映射到"test1".

創建Java類文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE

  import org.testng.Assert;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;

  public class ParamTestWithDataProvider1 {
      private PrimeNumberChecker primeNumberChecker;
  
      @BeforeMethod
      public void initialize() {
          primeNumberChecker = new PrimeNumberChecker();
      }

      @DataProvider(name = "test1")
      public static Object[][] primeNumbers() {
          return new Object[][] { { 2, true }, { 6, false }, { 19, true },
            	{ 22, false }, { 23, true } };
      }

      // This test will run 4 times since we have 5 parameters defined
      @Test(dataProvider = "test1")
      public void testPrimeNumberChecker(Integer inputNumber,
          Boolean expectedResult) {
	  System.out.println(inputNumber + " " + expectedResult);
	  Assert.assertEquals(expectedResult,
        	  primeNumberChecker.validate(inputNumber));
      }
  }

創建 TESTNG.XML

創建 testng.xml C:\ > TestNG_WORKSPACE 執行測試案例。

  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
      <test name="test1">
	  <classes>
	      <class name="ParamTestWithDataProvider1" />
	      </classes>
      </test>
  </suite>

編譯使用javac的測試用例類。

C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java

運行testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

驗證輸出。

2 true
6 false
19 true
22 false
23 true

===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================

實例 2

在這里,@DataProvider 傳遞對象作為參數。
創建Java類

創建一個Java類 Bean.java, 對象帶有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.

public class Bean {
    private String val;
    private int i;
    public Bean(String val, int i){
        this.val=val;
        this.i=i;
    }
    public String getVal() {
	return val;
    }
    public void setVal(String val) {
	this.val = val;
    }
    public int getI() {
	return i;
    }
    public void setI(int i) {
	this.i = i;
    }
}

創建測試案例類

    創建一個Java測試類 ParamTestWithDataProvider2.java.

    定義方法primeNumbers(),其定義為DataProvider使用注釋。此方法返回的對象數組的數組。

    添加測試類中測試方法TestMethod()。此方法需要對象的bean作為參數。

    添加注釋 @Test(dataProvider = "test1") 到此方法.  dataProvider 屬性被映射到 "test1".

創建Java類文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE

  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;

  public class ParamTestWithDataProvider2 {
      @DataProvider(name = "test1")
      public static Object[][] primeNumbers() {
          return new Object[][] { { new Bean("hi I am the bean", 111) } };
      }

      @Test(dataProvider = "test1")
      public void testMethod(Bean myBean) {
          System.out.println(myBean.getVal() + " " + myBean.getI());
      }
  }

創建 TESTNG.XML

創建一個文件 testng.xml C:\ > TestNG_WORKSPACE 來執行測試用例.

  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
      <test name="test1">
	  <classes>
	      <class name="ParamTestWithDataProvider2" />
	      </classes>
      </test>
  </suite>

編譯使用javac的測試用例類。

C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java

運行 testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

驗證輸出。

hi I am the bean 111

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

  

十二、測試報告中自定義日志(Reporter.log輸入自定義內容)),例如:

  @Test(groups = {""})

  public void student(){

    System.out.println("學生方法被調用");

    Reporter.log("學生方法自定義日志");

  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM