ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
2、TestNG常用注解 有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 : 注解 描述 @BeforeSuite 在该套件的所有测试运行之前运行,仅运行一次 @AfterSuite 在该套件的所有测试运行之后运行,仅运行一次 @BeforeTest 注释的方法将在属于test标签内的所有类的所有测试方法运行之前运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次 @AfterTest 注释的方法将在属于test标签内的所有类的所有测试方法运行之后运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次 @BeforeClass 在调用当前类的第一个测试方法之前运行,在当前类中仅运行一次 @AfterClass 在调用当前类的第一个测试方法之后运行,在当前类中仅运行一次 @BeforeGroups 配置方法将在组列表运行之前运行。 此方法保证在调用属于这些组中的任何第一个测试方法之前不久运行 @AfterGroups 此配置方法将在组列表运行之后运行。该方法保证在调用属于这些组的任何最后一个测试方法之后不久运行 @BeforeMethod 注释方法将在当前类中的每个测试方法之前运行 @AfterMethod 注释方法将在当前类中的每个测试方法之后运行 @Parameters 描述如何将参数传递给@Test方法 @DataProvider 标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称 @Listeners 定义测试类上的侦听器 @Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object [] @Test 将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法 如上列表中的@Factory、@Linsteners这两个是不常用的; 前十个注解看起来不太容易区分,顺序不太容易看明白,以如下范例做简单说明,代码: ``` import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class NewTest { @Test(groups="group1") public void test1() { System.out.println("test1 from group1"); Assert.assertTrue(true); } @Test(groups="group1") public void test11() { System.out.println("test11 from group1"); Assert.assertTrue(true); } @Test(groups="group2") public void test2() { System.out.println("test2 from group2"); Assert.assertTrue(true); } @BeforeTest public void beforeTest() { System.out.println("beforeTest"); } @AfterTest public void afterTest() { System.out.println("afterTest"); } @BeforeClass public void beforeClass() { System.out.println("beforeClass"); } @AfterClass public void afterClass() { System.out.println("afterClass"); } @BeforeSuite public void beforeSuite() { System.out.println("beforeSuite"); } @AfterSuite public void afterSuite() { System.out.println("afterSuite"); } //只对group1有效,即test1和test11 @BeforeGroups(groups="group1") public void beforeGroups() { System.out.println("beforeGroups"); } //只对group1有效,即test1和test11 @AfterGroups(groups="group1") public void afterGroups() { System.out.println("afterGroups"); } @BeforeMethod public void beforeMethod() { System.out.println("beforeMethod"); } @AfterMethod public void afterMethod() { System.out.println("afterMethod"); } } ``` 运行结果如下: ``` beforeSuite beforeTest beforeClass beforeGroups beforeMethod test1 from group1 afterMethod beforeMethod test11 from group1 afterMethod afterGroups beforeMethod test2 from group2 afterMethod afterClass afterTest PASSED: test1 PASSED: test11 PASSED: test2 =============================================== Default test Tests run: 3, Failures: 0, Skips: 0 =============================================== afterSuite ``` 由此可见,testng运行时,顺序是这样的: @BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeGroups[@BeforeMethod->@Test1->@AfterMethod,@BeforeMethod->@Test2->@AfterMethod, ...]@AfterGroups, @BeforeGroups[@BeforeMethod->@Test3->@AfterMethod,@BeforeMethod->@Test4->@AfterMethod, ...]@AfterGroups, ...}->@AfterClass->@AfterTest->@AfterSuite 其中{}内将@BeforeGroups@AfterGroups将@Test分组,每个分组内包含多个@Test。