一.TestNG 是什么 ?
- 脫胎於業界標桿的Junit,並超於Junit,主要原因是由於當時的JUnit3版本不支持annotation,使用不夠靈活。
- TestNG不再需要test前綴的命名方式、支持數據驅動、用例分組等一系列特性完全碾壓Junit。
- JUnit也在不斷的吸納TestNG和其他的思想和技術,目前主要的功能已經基本都能支持。
- Annotation:
注解種類
Beforexxxx系列,在Test之前執行的動作。
Afterxxxx系列,在Test之后執行的動作。
DataProvider,數據驅動類。
Test,測試執行的主體。
Parameters,接收配置文件中同名參數到代碼中使用。
注解使用
直接在任意方法上加@注解名,對方法名字、參數類型沒有要求。
需要@Test方法作用域為public。
二.搭建TestNG環境
- 新建Maven項目, 在pom文件中寫入依賴。 就完成了環境的配置,就這么簡單。
- PS:Intellij自帶了TestNG插件,如使用的是Eclipse,需手動安裝TestNG插件。
三.使用@Test做一次最簡單的測試任務
- 直接上代碼,只需要在需要執行的測試代碼上加上@Test注釋即可
- 執行時,只需在這個java文件上右鍵,選擇Run Task3 即可。
- 執行完成后,會出現下圖執行結果:
四.加入斷言,進行數據正確性校驗
執行結果:
五.加入@BeforeTest和@AfterTest動作
執行結果:
六.再試試多種@BeforeXXX和@AfterXXX
執行結果:
七.參數化一組數據
- 以Object[][]的形式,讓TestNG對一組數據進行測試,並校驗。
- 執行結果會是這樣:
- 或者是這樣:
八.再用一種方式參數化一組數據
- 這次我們把數據存儲在了Excel中:
執行結果:
- 這樣就實現了數據與腳本分離。
九.使用數據庫的數據作為一組參數
- 使用的SQL是:SELECT * FROM ServiceAPI_InfoRecords;
- 由於執行的數據是由SQL語句進行的篩選,所以另我們的測試數據又變得更加靈活。
- 比如使用下面這句SQL語句: SELECT * FROM ServiceAPI_InfoRecords WHERE isTest=1。
- 執行結果和想象的一樣,只會執行1和3
十.編寫測試配置文件
- Testng.xml是一個以xml記錄所有測試的文件。這個文件能夠很容易地再一個文件中描述所有測試套件和它們的參數,可以將它簽入到代碼庫中,或者通過電子郵件發送給同事。也可以很容易地提取測試的子集,或分成幾種運行時配置。
- 如上面這個例子,它所做的就是執行Task10
十一.配置文件中使用參數傳遞
- 在配置文件中,使用parameter標簽來完成參數傳遞動作
- 執行結果為test1,2,3,1,3
十二.做好測試方法的依賴關系
- 如下代碼:doTest3依賴doTest2,doTest2又依賴doTest1。
- 所以當doTest2執行錯誤后,由於doTest3依賴doTest2,所以doTest3被忽略了。
十三.測試分組
- 使用注釋的方式,標記好每個測試的分組
- 很好的根據自己的需要,執行對應的分組測試
十四.生成報告
- TestNG本身就自帶了報告,一個是很丑,另一個是使用了一些牆外的東西(你懂的),牆內打開報告頁面至少得一分鍾。
- 然后我選擇使用的ReportNG。在一開始的PPT中,我們已經把ReportNG的依賴添加完成了,所以這里只需要在*.xml 文件里增加報告的偵聽就行了。
- 在代碼中,很顯然使用System.out.println();是無法將信息打印至報告中的。所以,需要TestNG的log打印方式:Reporter.log("XXXXXXXX")。
- 執行測試后,生成的報告是這樣的:
十五:場景
當我們有了這把利器之后,我們可以用在很多場景上。比如:
- 開發進行單元測試
- 測試進行各種自動化測試
- WEB UI自動化測試(如 Selenium WebDriver)
- APP UI 自動化測試(如 Appium)
- 接口自動化測試
十六.測試用例結果有錯誤后。。。
- 肯定是需要定位出錯的原因。
- 是真的出錯了,還是當時環境的不穩定之類的意外情況引起的?
- 所以我們最常的做法是:把錯誤的用例再執行一遍,會自動生成testng-failed.xml,里面記錄的就是執行失敗的用例,可直接執行。
十七.其它
- 完成上述任務並能活用的話,在日常的測試工作中,使用用TestNG便沒有什么太大的問題了。
- 當然,TestNG還有諸如“並發”、“擴展”等任務,待學習研究