TestNG是開源的Java自動化測試框架,框架的設計靈感來源於JUnit 和 NUnit。其消除了大部分的舊框架的限制,使測試開發人員能夠編寫更加靈活和強大的測試。
註解 Annotation 是從JDK1.5 開始引入到Java語言中,TestNG 借鑑了Java註解來定義測試。
TestNG Maven依賴
使用Maven作為項目管理工具,可以對 Java 項目進行構建、依賴管理。我們需要在pom.xml中添加 testng 依賴,如下:
<code> org.testng testng 7.0.0-beta1 test /<code>
一個簡單的示例
如下,我們創建 baseDemoOtherTest 測試類,通過@Test註解來實現。
<code>// baseDemoOtherTest.java package testng.base.demo; import org.testng.annotations.Test; public class baseDemoOtherTest { @Test public void testOtherDemo1() { System.out.println(" 運行 testOtherDemo1()測試方法"); } @Test public void testOtherDemo2() { System.out.println(" 運行 testOtherDemo2()測試方法"); } }/<code>
TestNG常用註解及使用
<code>@Test 將類或方法標記為測試的一部分。 @BeforeSuite 在該套件的所有測試之前運行註解方法,僅運行一次(套件測試是一起運行的多個測試類)。 @AfterSuite 在該套件的所有測試之後運行註解方法,僅運行一次(套件測試是一起運行的多個測試類)。 @BeforeClass 在調用當前類的第一個測試方法之前運行註解方法,註解方法僅運行一次。 @AfterClass 在調用當前類的所有測試方法之後運行註解方法,註解方法僅運行一次。 @BeforeTest 在屬於標籤內的類的所有測試方法之前運行註解方法。 @AfterTest 在屬於標籤內的類的所有測試方法之後運行註解方法。 @BeforeMethod 在每個測試方法之前運行註解方法。 @AfterMethod 在每個測試方法之後運行註解方法。 @BeforeGroups 在配置的分組中第一個方法運行之前運行註解方法。 @AfterGroups 在配置的分組中所有的方法運行之後運行註解方法 /<code>
增加一個測試類 baseDemoTest
<code>package testng.base.demo; import org.testng.annotations.*; public class baseDemoTest { @BeforeSuite public void beforeSuite() { System.out.println("@BeforeSuite:測試套件(當前xml中標籤)之前運行@BeforeSuite註釋方法"); } @AfterSuite public void afterSuite() { System.out.println("@AfterSuite:測試套件(當前xml中標籤)之後運行@AfterSuite註釋方法"); } @BeforeTest public void beforeTest() { System.out.println(" @BeforeTest:測試用例(當前xml中標籤)之前運行@BeforeTest註釋方法"); } @AfterTest public void afterTest() { System.out.println(" @AfterTest:測試用例(當前xml中標籤)之後運行@AfterTest註釋方法"); } @BeforeMethod public void beforeMethod() { S ystem.out.println(" @BeforeMethod:當前類每個測試方法(@Test)之前運行@BeforeMethod註釋方法"); } @AfterMethod public void AfterMethod() { System.out.println(" @AfterMethod:當前類每個測試方法(@Test)之後運行@AfterMethod註釋方法"); } @BeforeGroups(value = {"A"}) public void beforeGroups() { System.out.println(" @BeforeGroups:在A組第一個方法運行之前運行@BeforeGroups註釋方法"); } @AfterGroups(value = {"A"}) public void afterGroups() { System.out.println(" @AfterGroups:在A組最後一個方法運行之後運行@AfterGroups註釋方法"); } @Test public void testDemo1() { System.out.println(" @Test:運行testDemo1()測試方法"); } @Test(groups = {"A"}) public void testDemo2() { System.out.println(" @Test:運行testDemo2()測試方法,歸屬A組"); }S @Test(groups = {"A"}) public void testDemo3() { System.out.println(" @Test:運行testDemo3()測試方法,歸屬A組"); } }/<code>
在工程目錄中新建一個自定義xml配置文件testng.xml
<code> /<code>
運行testng.xml 配置測試,結果如下,我們可以非常清晰的看到執行順序。
總結一下執行順序如下:@BeforeSuite->@BeforeTest->@BeforeClass-> {@BeforeMethod->@Test->@AfterMethod} ->@AfterClass->@AfterTest->@AfterSuite。其中{}內的與多少個@Test註解的測試方法,就循環執行多少次。
註解的作用域
我們接下來改造一下第一個demo測試類,如下,我們將其中一個測試方法設置為分組A。
<code>package testng.base.demo; import org.testng.annotations.Test; public class baseDemoOtherTest { @Test public void testOtherDemo1() { System.out.println(" 運行 testOtherDemo1()測試方法"); } @Test(groups = {"A"}) public void testOtherDemo2() { System.out.println(" 運行 testOtherDemo2()測試方法"); } } /<code>
更新下testng.xml配置,如下:
<code> /<code>
運行testng.xml 配置測試,從如下結果可以看出,@BeforeGroups、@AfterGroups的作用域是可以跨類的,但類必須是在testng.xml中同一個測試用例(標籤)範圍內;
配置文件xml常用標籤
<code> /<code>