天天看點

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

TestNG 入門教程

國慶7天假期,大部分朋友都出去旅遊了,微信圈裡全是曬旅遊的照片, 東南亞遊,歐洲遊呀,真是羨慕呀。 悲慘的我隻去了上海野生動物園, 在家休息,利用這段假期,把之前學過的東西都總結下。 

我前段時間加班太多了,每天忙碌工作,都沒精力去管自己的學習新技能的計劃, 部落格也沒寫幾篇,很多想做的事情都因為工作太忙而耽擱了。 是以工作太忙了也不好,沒有精力關注工作以外的事情。   

最近寫自動化測試每天都用到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是Java中的一個測試架構, 類似于JUnit 和NUnit,   功能都差不多, 隻是功能更加強大,使用也更友善

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

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

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

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試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 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

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

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試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");
    }
}      

注解 描述
@BeforeSuite 注解的方法将隻運作一次,運作所有測試前此套件中。
@AfterSuite 注解的方法将隻運作一次此套件中的所有測試都運作之後。
@BeforeClass 注解的方法将隻運作一次先行先試在目前類中的方法調用。
@AfterClass 注解的方法将隻運作一次後已經運作在目前類中的所有測試方法。
@BeforeTest 注解的方法将被運作之前的任何測試方法屬于内部類的 <test>标簽的運作。
@AfterTest 注解的方法将被運作後,所有的測試方法,屬于内部類的<test>标簽的運作。
@BeforeGroups 組的清單,這種配置方法将之前運作。此方法是保證在運作屬于任何這些組第一個測試方法,該方法被調用。
@AfterGroups 組的名單,這種配置方法後,将運作。此方法是保證運作後不久,最後的測試方法,該方法屬于任何這些組被調用。
@BeforeMethod 注解的方法将每個測試方法之前運作。
@AfterMethod 被注釋的方法将被運作後,每個測試方法。
@DataProvider

标志着一個方法,提供資料的一個測試方法。注解的方法必須傳回一個Object[] [],其中每個對象[]的測試方法的參數清單中可以配置設定。

該@Test 方法,希望從這個DataProvider的接收資料,需要使用一個dataProvider名稱等于這個注解的名字。

@Factory 作為一個工廠,傳回TestNG的測試類的對象将被用于标記的方法。該方法必須傳回Object[]。
@Listeners 定義一個測試類的監聽器。
@Parameters 介紹如何将參數傳遞給@Test方法。
@Test 标記一個類或方法作為測試的一部分。

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

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

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

testng.xml

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告
<?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 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告
TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

在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通過@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中可以把測試用例分組,這樣可以按組來執行測試用例比如:

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提供了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);
    }
}      
<?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);
    }
}      

有時候測試用例還沒準備好, 可以給測試用例加上@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支援測試用例之間的依賴

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預設情況下,會生産兩種類型的測試報告HTML的和XML的。 測試報告位于 "test-output" 目錄下.

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

當然我們也可以設定測試報告的内容級别. 

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

TestNG 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告
<?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 入門教程TestNG 入門教程TestNG介紹在Eclipse中線上安裝TestNG在Eclipse中離線安裝TestngTestNG最簡單的測試TestNG的基本注解TestNG中如何執行測試使用testtng.xml 檔案執行 case TestNG按順序執行CaseTestNG異常測試TestNG組測試TestNG參數化測試TestNG忽略測試TestNG 依賴測試TestNG測試結果報告

繼續閱讀