1. 程式人生 > >TestNG 入門教程

TestNG 入門教程

learn baidu ann 參數 href 部分 測試類 exceptio obj

最近寫自動化測試每天都用到TestNG, 把常用的TestNG的用法總結下。

閱讀目錄

  1. TestNG介紹
  2. 在Eclipse中在線安裝TestNG
  3. 在Eclipse中離線安裝Testng
  4. TestNG最簡單的測試
  5. TestNG的基本註解
  6. TestNG中如何執行測試
  7. 使用testtng.xml 文件執行 case
  8. TestNG按順序執行Case
  9. TestNG異常測試
  10. TestNG組測試
  11. TestNG參數化測試
  12. TestNG忽略測試
  13. TestNG 依賴測試
  14. 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的最簡單的一個例子

技術分享圖片
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>
技術分享圖片

TestNG 入門教程