TestNG可以通過注解的方式來控制方法的運(yùn)行順序攻锰,在代碼中經(jīng)常會(huì)通過注解的方式來實(shí)現(xiàn)初始化操作和清理操作煞额,比如數(shù)據(jù)庫(kù)的連接和關(guān)閉,即使在測(cè)試方法中拋出異常唁桩,但是after注解的方法依舊會(huì)執(zhí)行号杠。常用的注解有:
1? @BeforeSuite(在測(cè)試集之前運(yùn)行) →?@AfterSuite(在測(cè)試集之后運(yùn)行)
2??@BeforeClass(在測(cè)試類之前運(yùn)行) →?@AfterClass(在測(cè)試類之后運(yùn)行)
3??@BeforeTest (在開始執(zhí)行測(cè)試方法前運(yùn)行)→?@AfterTest(在執(zhí)行測(cè)試方法后運(yùn)行)
4??@BeforeMethod (在每個(gè)測(cè)試方法前運(yùn)行)→?@AfterMethod(在每個(gè)測(cè)試方法后運(yùn)行)
但是幾種注解一起使用時(shí)蚪腋,經(jīng)常搞不清楚運(yùn)行的先后順序,先把結(jié)論拋出來:
1?@BeforeSuite? >?@BeforeTest >?@BeforeClass >?@BeforeMethod
2??@AfterMethod >?@AfterClass >?@AfterTest >?@AfterSuite
3? 可以看出越先運(yùn)行的before注解所對(duì)應(yīng)的after注解就越后運(yùn)行姨蟋。
下面通過一段代碼來驗(yàn)證一下運(yùn)行順序
public class MainClass {
@BeforeSuite
? ? public void beforeSuite(){
System.out.println("beforeSuite");
? ? }
@AfterSuite
? ? public void afterSuite(){
System.out.println("afterSuite");
? ? }
@BeforeClass
? ? public void beforeClass(){
System.out.println("beforeClass");
? ? }
@AfterClass
? ? public void afterClass(){
System.out.println("afterClass");
? ? }
@BeforeTest
? ? public void beforeTest1(){
System.out.println("beforeTest");
? ? }
@AfterTest
? ? public void afterTest(){
System.out.println("afterTest");
? ? }
@BeforeMethod
? ? public void beforeMethod(){
System.out.println("beforeMethod");
? ? }
@AfterMethod
? ? public void afterMethod(){
System.out.println("afterMethod");
? ? }
@Test
? ? public void test1(){
System.out.println("test1");
? ? }
@Test
? ? public? void test2(){
System.out.println("test2");
? ? }
}
運(yùn)行代碼后屉凯,控制臺(tái)輸出
由此可以得出結(jié)論
1? @BeforeSuite? > @BeforeTest > @BeforeClass >?@BeforeMethod
2??@AfterMethod >?@AfterClass >?@AfterTest > @AfterSuite
3? 可以看出越先運(yùn)行的before注解所對(duì)應(yīng)的after注解就越后運(yùn)行。