TestNG使用總結

        TestNG是誕生於JUnit3和JUnit4之間的一個測試框架,雖然在JUnit4之前誕生,但被認爲更先進,NG是Next Generation的意思。TestNG擁有諸多新特性,以及消除了JUnit中的許多限制,更適合於大型項目的測試。


常用註解:

@BeforeSuiteThe annotated method will be run before all tests in this suite have run. 
@AfterSuiteThe annotated method will be run after all tests in this suite have run. 
@BeforeClassThe annotated method will be run before the first test method in the current class is invoked. 
@AfterClassThe annotated method will be run after all the test methods in the current class have been run. 
@BeforeTestThe annotated method will be run before any test method belonging to the classes inside the <test> tag is run.
@AfterTestThe annotated method will be run after all the test methods belonging to the classes inside the <test> tag have run. 
@BeforeMethodThe annotated method will be run before each test method. 
@AfterMethodThe annotated method will be run after each test method.
@BeforeGroupsThe list of groups that this configuration method will run before. This method is guaranteed to run shortly before the first test method that belongs to any of these groups is invoked. 
@AfterGroupsThe list of groups that this configuration method will run after. This method is guaranteed to run shortly after the last test method that belongs to any of these groups is invoked. 
@TestA Test Case


註解使用示例:

public class OrderTest {
    @BeforeSuite
    public void testBeforeSuite(){System.out.println("BeforeSuite");}
    @AfterSuite
    public void testAfterSuite(){System.out.println("AfterSuite");}
    @BeforeTest
    public void testBeforeTest(){System.out.println("BeforeTest");}
    @AfterTest
    public void testAfterTest(){System.out.println("AfterTest");}
    @BeforeClass
    public void testBeforeClass(){System.out.println("BeforeClass");}
    @AfterClass
    public void testAfterClass(){System.out.println("AfterClass");}
    @BeforeGroups(groups = "data")
    public void testBeforeGroups(){System.out.println("BeforeGroups");}
    @AfterGroups(groups = "data")
    public void testAfterGroups(){System.out.println("AfterGroups");}
    @BeforeMethod
    public void testBeforeMethod(){System.out.println("BeforeMethod");}
    @AfterMethod
    public void testAfterMethod(){System.out.println("AfterMethod");}
    @Test(groups = "data")
    public void testGroup1(){System.out.println("1、Belong to group data");}
    @Test(groups = "data")
    public void testGroup2(){System.out.println("2、Belong to group data");}
}

執行順序:
    BeforeSuite
    BeforeTest
    BeforeClass
    BeforeGroups
    BeforeMethod
    1、Belong to group data
    AfterMethod
    BeforeMethod
    2、Belong to group data
    AfterMethod
    AfterGroups
    AfterClass
    AfterTest
    AfterSuite
    
備註:
    其中BeforeGroups和AfterGroups會在指定組的所有方法執行之前和之後執行。



超時測試:

@Test(timeOut = 1000)


忽略測試:

@Test(enabled = false)


異常測試:

@Test(expectedExceptions = ArrayIndexOutOfBoundsException.class)


用例分組:

@Test(groups = {"group_one", "group_two"})


依賴測試:

@Test

public void testOne(){}

@Test(dependsOnMethods = "testOne")

public void testTwo(){}


多次執行以及使用線程池:

@Test(invocationCount = 5, threadPoolSize = 5)

用例執行5次,使用5個線程並行執行



套件測試

需要藉助XML文件,運行時需要指定XML才能正確執行

//測試整個NewTest以及OldTest中的testThird方法
<suite name="Method Suit" verbose="1">
    <test name="includedGroupsInAPackage">
        <classes>
            <class name="com.me.hello.NewTest"/>
            <class name="com.me.hello.OldTest">
                <methods>
                    <include name="testThird"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

//測試指定兩個package裏的所有測試類
<test name="tttt">
<packages>
    <package name="com.me.hello"/>
    <package name="com.me.chat"/>
</packages>
</test>
        
//指定package中的分組測試,以及指定class測試。
<suite name="Group Suit" verbose="10">
<test name="tttt">
    <groups>
        <run>
            <include name="slow"/>//分組測試
            <include name="fast"/>
        </run>
    </groups>
    <packages>
        <!--<package name="com.me.good"/>-->
        <!--<package name="com.me.hello"/>-->
        <package name="com.me.*"/>
    </packages>
</test>
<test name="next test">
    <classes>
        <class name="com.me.hello.NewTest"/>//指定類
    </classes>
</test>
</suite>

備註:
   IDEA的套件測試需要在Run-Edit Configurations中配置運行條件以及指定xml文件,或者直接命令行執行。



參數化測試:

1、通過xml文件(基本數據類型)

2、代碼中使用@DataProvider(複雜數據類型)

@DataProvider(name = "getData")
public Object[][] getDataFromFile(){
    return new Object[][]{{1,2},{3,4},{5,6}};
}

@Test(dataProvider = "getData")
public void testCalc(int a, int e){
    Assert.assertEquals(a+1, e);
}

1、聲明一個方法給定名字,返回數組數據。
2、Test方法根據DataProvider方法返回的數據,設定參數列表。
3、按照參數列表順序操作參數。


斷言

       TestNG的斷言總體和JUnit相似,大體上區別只是把提示消息位置放在後面而已。


總結:

      相比JUnit,TestNG的參數化測試,依賴測試,分組測試都更方便使用。另外套件測試使用XML和代碼實現數據和測試邏輯的分離,並且方便定製分類邏輯更復雜的測試。


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