testNG框架從入門到精通

熱門精選文章,更多技術乾貨,微信搜索訂閱號【碼者圈】:
【Java8新特性】04 詳解Lambda表達式中Predicate Function Consumer Supplier函數式接口
【Java8新特性】03 Stream流式數據處理
【Java8新特性】02 函數式接口和Lambda表達式實戰練習:環繞執行模式使行爲參數化
【Java8新特性】01 函數式接口和Lambda表達式你真的會了嗎

閱讀目錄

  1. TestNG介紹
  2. 在Eclipse 中安裝TestNG插件
  3. TestNG最簡單的測試
  4. TestNG的基本註解
  5. TestNG中如何執行測試
  6. TestNG中按順序執行Case
  7. TestNG異常測試
  8. TestNG組測試
  9. TestNG參數化測試
  10. TestNG忽略測試
  11. TestNG 依賴測試
  12. TestNG測試報告

 

TestNG介紹

TestNG是Java中的一個測試框架, 類似於JUnit 和NUnit,   功能都差不多, 只是功能更加強大,使用也更方便

Java中已經有一個JUnit的測試框架了。  TestNG比JUnit功能強大的多。  測試人員一般用TestNG來寫自動化測試。  開發人員一般用JUnit寫單元測試。

官方網站: http://testng.org/doc/index.html

 

在Eclipse中安裝TestNG

打開Eclipse   Help ->Install New Software ,   然後Add   "http://beust.com/eclipse"

 

TestNG最簡單的測試

 下面是TestNG的最簡單的一個例子

package TankLearn2.Learn;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testng.annotations.Test;

public class TestNGLearn1 {

    @BeforeClass
    public void beforeClass() {
        System.out.println("this is before class");
    }

    @Test
    public void TestNgLearn() {
        System.out.println("this is TestNG test case");
    }

    @AfterClass
    public void afterClass() {
        System.out.println("this is after class");
    }
}

 

TestNG的基本註解

 

註解 描述
@BeforeSuite 註解的方法將只運行一次,運行所有測試前此套件中。
@AfterSuite 註解的方法將只運行一次此套件中的所有測試都運行之後。
@BeforeClass 註解的方法將只運行一次先行先試在當前類中的方法調用。
@AfterClass 註解的方法將只運行一次後已經運行在當前類中的所有測試方法。
@BeforeTest 註解的方法將被運行之前的任何測試方法屬於內部類的 <test>標籤的運行。
@AfterTest 註解的方法將被運行後,所有的測試方法,屬於內部類的<test>標籤的運行。
@BeforeGroups 組的列表,這種配置方法將之前運行。此方法是保證在運行屬於任何這些組第一個測試方法,該方法被調用。
@AfterGroups 組的名單,這種配置方法後,將運行。此方法是保證運行後不久,最後的測試方法,該方法屬於任何這些組被調用。
@BeforeMethod 註解的方法將每個測試方法之前運行。
@AfterMethod 被註釋的方法將被運行後,每個測試方法。
@DataProvider

標誌着一個方法,提供數據的一個測試方法。註解的方法必須返回一個Object[] [],其中每個對象[]的測試方法的參數列表中可以分配。

該@Test 方法,希望從這個DataProvider的接收數據,需要使用一個dataProvider名稱等於這個註解的名字。
@Factory 作爲一個工廠,返回TestNG的測試類的對象將被用於標記的方法。該方法必須返回Object[]。
@Listeners 定義一個測試類的監聽器。
@Parameters 介紹如何將參數傳遞給@Test方法。
@Test 標記一個類或方法作爲測試的一部分。

 

TestNG中如何執行測試

第一種直接執行:右鍵要執行的方法,  點Run As ->TestNG Test

 

 

第二種:  通過testng.xml文件來執行. 把要執行的case, 放入testng.xml文件中。 右鍵點擊testng.xml,   點Run As

testng.xml

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

 

TestNG按順序執行Case

在testng.xml中,可以控制測試用例按順序執行。  當preserve-order="true"是,可以保證節點下面的方法是按順序執行的

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test12" preserve-order="true">
        <classes>
            <class name="TankLearn2.Learn.TestNGLearn1">
                <methods>
                    <include name="TestNgLearn3" />
                    <include name="TestNgLearn1" />
                    <include name="TestNgLearn2" />
                </methods>
            </class>
        </classes>
    </test></suite>

 

 

 

TestNG異常測試

測試中,有時候我們期望某些代碼拋出異常。

TestNG通過@Test(expectedExceptions)  來判斷期待的異常, 並且判斷Error Message

package TankLearn2.Learn;

import org.testng.annotations.Test;

public class ExceptionTest {
    
    @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")
    public void testException(){
        throw new IllegalArgumentException("NullPoint");
    }
}

 

TestNG組測試

TestNG中可以把測試用例分組,這樣可以按組來執行測試用例比如:

package TankLearn2.Learn;

import org.testng.annotations.Test;

public class GroupTest {
    
    @Test(groups = {"systemtest"})
    public void testLogin(){
        System.out.println("this is test login");
    }
    
    @Test(groups = {"functiontest"})
    public void testOpenPage(){
        System.out.println("this is test Open Page");
    }
}

 

然後在testng.xml中 按組執行測試用例

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test1">
        <groups>
        <run>
        <include name="functiontest" />
        </run>
    </groups>
    </test></suite>

 

TestNG參數化測試

軟件測試中,經常需要測試大量的數據集。 測試代碼的邏輯完全一樣,只是測試的參數不一樣。  這樣我們就需要一種 “傳遞測試參數的機制”。 避免寫重複的測試代碼

TestNG提供了2種傳遞參數的方式。

第一種: testng.xml 方式使代碼和測試數據分離,方便維護

第二種:@DataProvider能夠提供比較複雜的參數。 (也叫data-driven testing)

 

方法一: 通過testng.xml 傳遞參數給測試代碼

package TankLearn2.Learn;

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

public class ParameterizedTest1 {
    
    @Test
    @Parameters("test1")
    public void ParaTest(String test1){
        System.out.println("This is " + test1);
    }
}

testng.xml

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

 

方式二:   通過DataProvider傳遞參數

package TankLearn2.Learn;

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

public class DataProviderLearn {
    
    @DataProvider(name="user")
    public Object[][] Users(){
        return new Object[][]{
                {"root","passowrd"},
                {"cnblogs.com", "tankxiao"},
                {"tank","xiao"}
        };
    }
    
    @Test(dataProvider="user")
    public void verifyUser(String userName, String password){
        System.out.println("Username: "+ userName + " Password: "+ password);
    }
}

 

TestNG忽略測試

有時候測試用例還沒準備好, 可以給測試用例加上@Test(enable = false),  來禁用此測試用例

package TankLearn2.Learn;

import org.testng.annotations.Test;

public class TesgNGIgnore {
    
    @Test(enabled = false)
    public void testIgnore(){
        System.out.println("This test case will ignore");
    }
}

 

TestNG 依賴測試

有時候,我們需要按順序來調用測試用例,  那麼測試用例之間就存在依賴關係。 TestNG支持測試用例之間的依賴

package TankLearn2.Learn;

import org.testng.annotations.Test;

public class DependsTest {
    
    @Test
    public void setupEnv(){
        System.out.println("this is setup Env");
    }
    
    @Test(dependsOnMethods = {"setupEnv"})
    public void testMessage(){
        System.out.println("this is test message");
    }
}

 

TestNG測試結果報告

測試報告是測試非常重要的部分.  

TestNG默認情況下,會生產兩種類型的測試報告HTML的和XML的。 測試報告位於 "test-output" 目錄下.

當然我們也可以設置測試報告的內容級別. 

verbose="2" 標識的就是記錄的日誌級別,共有0-10的級別,其中0表示無,10表示最詳細

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1">
    <test name="test12" verbose="2">
        <classes>
            <class name="TankLearn2.Learn.TestNGLearn1" />
        </classes>
    </test></suite>

【碼者圈】屬於編碼者自己的圈子,微信掃描二維碼關注,第一時間獲取更多技術乾貨!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章