開發必備測試利器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的特點
- 註解
- TestNG使用Java和麪向對象的功能
- 支持綜合類測試(例如,默認情況下,不用創建一個新的測試每個測試方法的類的實例)
- 獨立的編譯時測試代碼和運行時配置/數據信息
- 靈活的運行時配置
- 主要介紹“測試組”。當編譯測試,只要要求TestNG運行所有的“前端”的測試,或“快”,“慢”,“數據庫”等
- 支持依賴測試方法,並行測試,負載測試,局部故障
- 靈活的插件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 |
TestNG測試用例
單元測試
使用註解@Test來標明改方法是單元測試方法
/** |
使用和Junit使用方法一樣區別在於使用類不同
批量測試
批量測試數據怎麼生成?Junit循環?TestNG爲我們提供了invocationCount熟悉,執行次數控制,使用了TestNG後再也不用操心如果生成大量數據。代碼:
@org.testng.annotations.Test(invocationCount = 5) |
看看執行結果吧,執行5次完美解決批量生成數據的難題,附帶每次單測執行時間,是不是很easy
併發測試
我們在線上會遇到各種併發導致程序邏輯問題,如何在寫完代碼就驗證代碼在併發出現是否有問題?找性能測試,需要提供接口文檔?NO,我們自己也可以,我們只需要利用testNg的threadPoolSize,invocationCount配置併發數量和調用次數即可完成,代碼:
@org.testng.annotations.Test(threadPoolSize = 2,invocationCount = 5) |
測試用例執行後結果如下:線程thread_id_33,thread_id_34,2個線程執行5次,開發在寫完一個接口即可完成併發測試
集成測試
流程測試怎麼測?N步分別執行N此單元測試?那開發測試一個流程需要多少時間。這個時候集成測試就閒的尤爲重要,讓測試同學寫Jmeter測試腳本進行集成測試,可是功能很簡單不想麻煩測試同學怎麼辦?通過TestNG的dependsOnMethods依賴測試進行業務流程的集成測試,如下圖, test2依賴test0和test1
在我們執行test2的時候TestNG會把test0和test1先執行,運行結果如下:瞬間感覺我自己也可以做集成測試了
集成測試的使用場景
看看TestNG在購買圖書的使用場景,就會發現TestNG對開發人員很友好啊!
項目的主流程如下:
那我們要進行集成測試,完成索要發票的結果,只需要在最後一個方法上添加dependsOnMethods={ "","",""}來完成前面的一系列創建圖書室、新增圖書、新增會員等單測接口依賴即可,具體代碼如下
運行結果如下:
流程代碼邏輯有變化怎麼辦?只需要修改對應步驟的單元邏輯即可完成全流程的集成測試
還有其他:dataProvider提供數據等等