一.TestNG 是什麼 ?java
- 脫胎於業界標杆的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 便可。
四.加入斷言,進行數據正確性校驗ide
執行結果:單元測試
五.加入@BeforeTest和@AfterTest動做學習
執行結果:測試
六.再試試多種@BeforeXXX和@AfterXXX插件
執行結果:3d
七.參數化一組數據xml
- 以Object[][]的形式,讓TestNG對一組數據進行測試,並校驗。
八.再用一種方式參數化一組數據
執行結果:
九.使用數據庫的數據做爲一組參數
- 使用的SQL是:SELECT * FROM ServiceAPI_InfoRecords;
- 因爲執行的數據是由SQL語句進行的篩選,因此另咱們的測試數據又變得更加靈活。
- 好比使用下面這句SQL語句: SELECT * FROM ServiceAPI_InfoRecords WHERE isTest=1。
- 執行結果和想象的同樣,只會執行1和3
十.編寫測試配置文件
- Testng.xml是一個以xml記錄全部測試的文件。這個文件可以很容易地再一個文件中描述全部測試套件和它們的參數,能夠將它簽入到代碼庫中,或者經過電子郵件發送給同事。也能夠很容易地提取測試的子集,或分紅幾種運行時配置。
- 如上面這個例子,它所作的就是執行Task10
十一.配置文件中使用參數傳遞
- 在配置文件中,使用parameter標籤來完成參數傳遞動做
十二.作好測試方法的依賴關係
- 以下代碼: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還有諸如「併發」、「擴展」等任務,待學習研究