testNg注解@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeGroups,@AfterGroups,@BeforeMethod

时间:2025-04-03 18:10:41

testNg注解

  1. @BeforeSuite(@AfterSuite)
  • 作用及作用域范围

@BeforeSuite在test suite中的所有test运行之前运行,只运行一次;

@AfterSuite在test suite中的所有test运行之后运行,只运行一次;

Test suite可以由一个或多个测试组成.

  1. @BeforeTest(@AfterTest)
  • 作用及作用域范围

@BeforeTest注解的方法将只运行一次后已经运行在当前类中的所有测试方法;

@AfterTest注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行;

Test可以由一个或多个测试类组成.

  1. @BeforeClass(@AfterClass)
  • 作用及作用域范围

@BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用;

@AfterClass注解的方法将只运行一次后已经运行在当前类中的所有测试方法;

Class由一个或多个方法组成

  1. @BeforeGroups(@AfterGroups)
  • 作用及作用域范围

@BeforeGroups组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。

@AfterGroups注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行;

组是由测试组自定义的一个测试的集合

  1. @BeforeMethod(@AfterMethod)
  • 作用及作用域范围

@BeforeMethod 注解的方法将每个测试方法之前运行。

@AfterMethod注解的方法将每个测试方法之前运行。

在class中的方法每执行一次,就会分别调用一次@BeforeMethod和@AfterMethod

测试级别为:suite -> test -> class -> method。test指的是中的test 标签,而不是测试类里的一个 @Test。测试类里的@Test实际上对应的是method。所以在使用 @BeforeSuite、 @BeforeTest、 @BeforeClass、 @BeforeMethod这些标签的时候,它们的实际执行顺序也是按照上述级别来的。

超类上的注解,子类也将得到继承。在这种情况下,TestNG保证“@Before”方法按照继承顺序执行(首先是最高的超类,然后向下继承链),以及“@After”方法按照相反的顺序执行(向上继承链)。

  1. testNg测试示例解读
<!DOCTYPE suite SYSTEM "/testng-1." >



<!-- @BeforeSuite -->

<suite name="TestAll">

<packages>

<package name=""></package>

</packages>

<!-- @BeforeTest -->

<test name="case1">

<groups>

<run>

<exclude name="shopping"></exclude>

</run>

</groups>

<classes>

<class name="" />

<class name="" />

</classes>

</test>

<!-- @AfterTest -->



<!-- @BeforeTest -->

<test name="case2">

<classes>

<class name="" />

</classes>

</test>

<!-- @AfterTest -->



<test name="case3">

<groups>

<run>

<include name="shopping"></include>

</run>

</groups>

<classes>

<class name="" />

</classes>

</test>

</suite>

<!-- @AfterSuite -->

 

TestAll测试组,由3个test(case1,case2,case3)组成;

其中case1中定义了一个groups和一个classes组成;groups中定义了一个run标签,标签下面包含一个exclude标签;classes中定义了两个class文件(TestConfiguration和TestDBConnection);

public class TestConfiguration {



@BeforeSuite()

public void beforeSuite() {

System.out.println("@BeforeSuite");

}



@AfterSuite()

public void afterSuite() {

System.out.println("@AfterSuite");

}

@BeforeTest()

public void beforeTest() {

System.out.println("@BeforeTest");

}



@AfterTest()

public void afterTest() {

System.out.println("@AfterTest");

}



@BeforeGroups(groups = "shopping")

public void beforeGroups() {

System.out.println("@BeforeGroups");

}



@AfterGroups(groups = "shopping")

public void afterGroups() {

System.out.println("@AfterGroups");

}



@BeforeClass

public void beforeClass() {

System.out.println("@BeforeClass");

}



@AfterClass

public void afterClass() {

System.out.println("@AfterClass");

}



@BeforeMethod

public void beforeMethod() {

System.out.println("@BeforeMethod");

}



@AfterMethod

public void afterMethod() {

System.out.println("@AfterMethod");

}



@Test(groups = "shopping")

public void runTest1() {

System.out.println("@Test - runTest1");

}



@Test

public void runTest2() {

System.out.println("@Test - runTest2");

}

}

 

TestConfiguration中分别定义了我们上面的所有的注解文件:

(@BeforeSuite(),@AfterSuite(),@BeforeTest(),@AfterTest(),@BeforeGroups(groups="shopping"),@AfterGroups(groups = "shopping"),@BeforeClass, @AfterClass,@BeforeMethod, @AfterMethod)

还有两个测试方法(runTest1()和runTest2());其中runTest1()上面有groups=”shopping”的分组标识.

public class TestDBConnection {



@Test

public void runOtherTest1() {

System.out.println("@Test - runOtherTest1");

}



@Test

public void runOtherTest2() {

System.out.println("@Test - runOtherTest2");

}



}

 

TestDBConnection中只有两个测试方法runOtherTest1()和runOtherTest2();

在case2中只有TestDBConnection一个class;

在case3中,首先有一个groups,在run标签下包含了一个include,引用了TestConfiguration文件.

运行文件后得到的输出结果:

@BeforeSuite

    @BeforeTest

        @BeforeClass

            @BeforeMethod

                @Test - runTest2

            @AfterMethod

        @AfterClass

        @Test - runOtherTest1

        @Test - runOtherTest2

    @AfterTest

    @Test - runOtherTest1

    @Test - runOtherTest2

    @BeforeGroups

        @Test - runTest1

    @AfterGroups

@AfterSuite

在执行中,@BeforeSuite和@AfterSuite分别在开始执行和最后结束执行后执行了一次;上面的输出文件中,红色字体为case1中的执行结果;蓝色内容为case2的执行结果,紫色内容为case的执行结果.

Case1中的TestConfiguration中的@BeforeSuite(),@AfterSuite()作用域在整个测试组的最外层;@BeforeTest()和@AfterTest()作用域在case1的开始和结束时运行;@BeforeClass和@AfterClass作用域在TestConfiguration文件的执行开始和结束时运行;在TestConfiguration中有两个测试方法,但是执行中只有runTest2执行了,那是因为在case1中进行的groups组的排除;

Case2中只有两个输出方法,没有任何的其他注解配置;

Case3中,执行了@BeforeGroups,@AfterGroups和runTest1,TestConfiguration中的runTest2没有执行是由于groups中指定了”shopping”分组的进行执行.