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"

 

在Eclipse中離線安裝Testng

首先下載testng離線包:  http://pan.baidu.com/s/1hrEaX6k

 

1. 將解壓後的文件..\eclipse-testng離線包\features\org.testng.eclipse_6.9.9.201510270734   文件夾 放到      eclipse--》features目錄下

2. 將解壓後的文件..\eclipse-testng離線包\plugins\org.testng.eclipse_6.9.8.201510130443  文件夾  放到                 eclipse--》plugins目錄下

3. 重啓eclipse

4. 驗證是否安裝成功,file-->new-->other-->TestNg

TestNG最簡單的測試

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

如果,上一步創建成功後,有錯誤,比如提示:add testng library;說明該工程中還未導入testng:

mac中操作:

右鍵該java project,選擇“build path---add libraries”,並選擇"TestNG" Library添加到工程中。

複製代碼
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

 

使用testtng.xml 文件執行 case 

第二種:  通過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>
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章