開發必備測試利器TestNG

開發必備測試利器TestNG

TestNG是什麼

TestNG是一個測試框架,其靈感來自JUnit和NUnit,但引入了一些新的功能,使其功能更強大,使用更方便。

TestNG是一個開源自動化測試框架;TestNG表示下一代(Next Generation的首字母)。 TestNG類似於JUnit(特別是JUnit 4),但它不是JUnit框架的擴展。它的靈感來源於JUnit。它的目的是優於JUnit,尤其是在用於測試集成多類時。 TestNG的創始人是Cedric Beust(塞德里克·博伊斯特)。

TestNG消除了大部分的舊框架的限制,使開發人員能夠編寫更加靈活和強大的測試。 因爲它在很大程度上借鑑了Java註解(JDK5.0引入的)來定義測試,它也可以顯示如何使用這個新功能在真實的Java語言生產環境中。

TestNG的特點

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

 

TestNG和Junit對比

 

TestNG的使用

添加依賴

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
</dependency>

 

TestNG和springboot的結合

通過繼承AbstractTestNGSpringContextTests和添加@ SpringBootTest註解完成TestNG和springboot的無縫結合

@Slf4j
@SpringBootTest(classes = BootWebApplication.class)
public class CreateBookTestNg extends AbstractTestNGSpringContextTests {
}

TestNG測試用例

單元測試

使用註解@Test來標明改方法是單元測試方法

/**
 * 創建圖書
 */
@org.testng.annotations.Test
public void createBookTest(){
}

使用和Junit使用方法一樣區別在於使用類不同

批量測試

批量測試數據怎麼生成?Junit循環?TestNG爲我們提供了invocationCount熟悉,執行次數控制,使用了TestNG後再也不用操心如果生成大量數據。代碼:

@org.testng.annotations.Test(invocationCount = 5)
public void createBooKTest() throws InterruptedException {
   System.out.println(a);
   a++;
}

看看執行結果吧,執行5次完美解決批量生成數據的難題,附帶每次單測執行時間,是不是很easy

 

併發測試

我們在線上會遇到各種併發導致程序邏輯問題,如何在寫完代碼就驗證代碼在併發出現是否有問題?找性能測試,需要提供接口文檔?NO,我們自己也可以,我們只需要利用testNg的threadPoolSize,invocationCount配置併發數量和調用次數即可完成,代碼:

 

@org.testng.annotations.Test(threadPoolSize = 2,invocationCount = 5)
public void createBookTest() throws InterruptedException {
   System.out.println("thread_id_"+Thread.currentThread().getId()+":"+a);
   a++;
}

測試用例執行後結果如下:線程thread_id_33,thread_id_34,2個線程執行5次,開發在寫完一個接口即可完成併發測試

 

集成測試

流程測試怎麼測?N步分別執行N此單元測試?那開發測試一個流程需要多少時間。這個時候集成測試就閒的尤爲重要,讓測試同學寫Jmeter測試腳本進行集成測試,可是功能很簡單不想麻煩測試同學怎麼辦?通過TestNG的dependsOnMethods依賴測試進行業務流程的集成測試,如下圖, test2依賴test0和test1

 

在我們執行test2的時候TestNG會把test0和test1先執行,運行結果如下:瞬間感覺我自己也可以做集成測試了

 

集成測試的使用場景

看看TestNG在購買圖書的使用場景,就會發現TestNG對開發人員很友好啊!

項目的主流程如下:

 

那我們要進行集成測試,完成索要發票的結果,只需要在最後一個方法上添加dependsOnMethods={ "","",""}來完成前面的一系列創建圖書室、新增圖書、新增會員等單測接口依賴即可,具體代碼如下

 

運行結果如下:

 

流程代碼邏輯有變化怎麼辦?只需要修改對應步驟的單元邏輯即可完成全流程的集成測試

 

還有其他:dataProvider提供數據等等

 

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