testng簡介

簡介

在設計接口測試框架或者UI自動化框架的時候,大概率都會用到testng這個框架,本篇主要介紹testng這個框架的使用。
官方文檔:http://testng.org/doc/index.html

testng的特點

  • 註解功能
  • TestNG使用Java和麪向對象的功能
  • 支持綜合類測試(例如,默認情況下,沒有必要創建一個新的測試每個測試方法的類的實例)
  • 獨立的編譯時間測試代碼運行時配置/數據信息
  • 靈活的運行時配置
  • 主要介紹“測試組”。當編譯測試,只要問TestNG運行所有的“前端”的測試,或“快”,“慢”,“數據庫”等
  • 支持依賴測試方法,並行測試,負載測試,局部故障
  • 靈活的插件API
  • 支持多線程測試

testng環境配置

  • 驗證Java安裝在你的機器上
  • 設置JAVA環境
  • 通過maven下載TestNG
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>

使用步驟

  • 編寫測試業務邏輯,在代碼中插入TestNG annotations
  • 在配置文件testng.xml或build.xml中配置測試信息
  • 運行TestNG

註解的優點

  • TestNG的標識的方法關心尋找註解。因此,方法名並不限於任何模式或格式
  • 我們可以通過額外的參數註解
  • 註釋是強類型的,所以編譯器將標記任何錯誤
  • 測試類不再需要任何東西(如測試案例,在JUnit3)擴展

註解的運行順序

  1. @BeforeSuite: 被註釋的方法將在所有測試運行前運行
  2. @AfterSuite: 被註釋的方法將在所有測試運行後運行
  3. @BeforeTest: 被註釋的方法將在測試運行前運行
  4. @AfterTest: 被註釋的方法將在測試運行後運行
  5. @BeforeGroups: 被配置的方法將在列表中的gourp前運行。這個方法保證在第一個屬於這些組的測試方法調用前立即執行
  6. @AfterGroups: 被配置的方法將在列表中的gourp後運行。這個方法保證在最後一個屬於這些組的測試方法調用後立即執行
  7. @BeforeClass: 被註釋的方法將在當前類的第一個測試方法調用前運行
  8. @AfterClass: 被註釋的方法將在當前類的所有測試方法調用後運行
  9. @BeforeMethod:被註釋的方法將在每一個測試方法調用前運行
  10. @AfterMethod: 被註釋的方法將在每一個測試方法調用後運行

TestNG一個方法的生命週期

  • @BeforeSuite(執行一次)
  • @BeforeClass(執行一次)
  • @BeforeMethod(N個Test 方法執行N次)
  • @Test Test方法(此註解可能在類上表示多個,在方法表示一個)
  • @AfterMethod(N個Test 方法執行N次)
  • @AfterClass(執行一次)
  • @AfterSuite(執行一次)

@Test註解裏的參數

  • dependsOnMethods、dependsOnGroups:依賴測試,一個test依賴於另一個test的執行結果
  • groups:組測試,一個test屬於哪一個組,可以跑一個特定組的所有test
  • expectedExceptions:異常測試
  • dataProvider:參數化測試,將參數傳入該test
  • enabled:忽略測試,不執行該test
  • timeOut、threadPoolSize、invocationCount、successPercentage:併發測試,設置併發測試的各種參數
  • alwaysRun: 如果爲true的話,不管怎樣都會運行

依賴測試

有時候需要在特定的順序下調用測試案例,或分享一些數據和方法之間的狀態,就可以使用dependsOnMethods或dependsOnGroups申明。被註解的方法只有在被依賴的方法執行成功後執行。
在這裏插入圖片描述在這裏插入圖片描述
以上兩段代碼,分別是這兩個參數的運用,只有被依賴的方法執行成功,依賴的方法纔會執行。

組測試

在TestNG中組測試是一個新的創新功能,它不存在於JUnit框架,它允許調度到適當的部分方法和瓶坯複雜的測試方法分組。你不僅可以聲明屬於羣體的那些方法,但你也可以指定一組包含其他組。然後,TestNG可調用和要求包括一組特定的羣體(或正則表達式),而排除另一個集合。這給了你最大的靈活性,如何分區測試,如果想運行兩套不同的測試背靠背,不要求重新編譯任何東西。
在這裏插入圖片描述
在這裏插入圖片描述
以上分別是定義的test方法和對應的testng.xml中的分組設定。
運行方法分別爲

  • 命令行
java org.testng.TestNG -groups checkintest -excludegroups functest com.testng.example.GroupTestExample
  • Ant
<testng groups="checkintest" excludegroups="functest">
  <classfileset>
    <include name=“com/testng/example/GroupTestExample” />
  </classfileset>
</testng>
  • 利用java API
TestNG tng = new TestNG();
tng.setGroups("checkintest");
tng.setExcludeGroups(“functest")
  • 運行配置的TestNG.xml

異常測試

TestNG跟蹤異常處理代碼提供了一個選項。可以測試是否需要代碼拋出異常或不拋出。 @Test註釋expectedExceptions 參數一起使用。
在這裏插入圖片描述

參數化測試

在TestNG的另一個有趣的功能是參數測試。在大多數情況下,你會遇到這樣一個場景,業務邏輯需要一個巨大的不同數量的測試。參數測試,允許開發人員運行同樣的測試,一遍又一遍使用不同的值。TestNG讓你直接傳遞參數測試方法兩種不同的方式:使用testng.xml、數據提供程序。
1、@Parameter
在這裏插入圖片描述
在這裏插入圖片描述
TestNG支持@Parameter傳參方式的類型如下

  • String
  • int/Integer
  • boolean/Boolean
  • byte/Byte
  • char/Character
  • double/Double
  • float/Float
  • long/Long
  • short/Short
    2、@DataProvider
  • 只提供了一個字符串屬性:名稱,供測試方法作爲傳遞參數的annotation使用
  • 兩種DataProvider,一種是返回一個二維數組對象,如上面的例子;另外一種DataProvider是返回一個Iterator
  • DataProvider可以向測試方法傳遞任意類型任意數目的參數
  • 利用DataProvider提供不同的參數集合對一個測試方法進行多次調用
    在這裏插入圖片描述

忽略測試

有時,我們的代碼是沒有準備好,如果測試用例寫入到測試方法代碼將無法運行,在這種情況下,@Test(enabled = false)有助於禁用此測試案例。 測試方法是標註了@Test(enabled = false),那麼並不是已經準備好測試的測試用例是繞過的。
在這裏插入圖片描述

併發測試

TestNG可以以多線程的模式運行所有的test,這樣可以獲得最大的運行速度,最大限度的節約執行時間。當然,併發運行也是有代價的,就是需要我們的代碼是線程安全的
在這裏插入圖片描述

tesng.xml介紹

Testng.xml是以xml記錄所有測試的文件。它描述了測試套件的運行時定義,也是testng中運行測試的最大工作單元。雖然沒有testng.xml文件,測試也很容易被執行。但是隨着測試代碼的增長,testng.xml提供了方便用來存放所有運行時的配置,如設置有關類,測試,方法,參數,分組的包含與排除等。
Testng.xml的主要結構:根標籤是,標籤包含一個或多個標籤,標籤包含一個或多個標籤,標籤包含一個或多個標籤

  • Suite:由一個XML文件表示,可以包含一個或者多個Test,suite可以通過標籤來運行其他testng的xml文件
  • Test:表示一個測試,可以包含一個或者多個TestNG類
  • TestNG類:就是一個簡單的Java類,至少包含一個TestNG annotation
  • Method:一個普通的Java方法,其前由@Test標記
  • Groups:TestNG可以將不同的Method分類到不同的Groups中,也可以將Class分類到不同的Groups中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章