TestNG教程系列三:注解annotation及执行情况

在上一篇文章中,我们可能最疑惑的是@Test类似的注解是什么东西,它用来中什么。下面我们来讲解该部分内容。

这里是TestNG的支持列表中的注解:

注解

描述

@BeforeSuite

注解的方法将只运行一次,被注释的方法将在所有测试运行前运行。

@AfterSuite

注解的方法将只运行一次,被注释的方法将在所有测试运行后运行。

@BeforeClass

注解的方法将只运行一次,被注释的方法将在测试运行前运行。

@AfterClass

注解的方法将只运行一次,被注释的方法将在测试运行后运行。

@BeforeTest

注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。

@AfterTest

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

@BeforeGroups

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

@AfterGroups

组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。

@BeforeMethod

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

@AfterMethod

被注释的方法将被运行后,每个测试方法。

@DataProvider

标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。

该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。

@Factory

作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。

@Listeners

定义一个测试类的监听器。

@Parameters

介绍如何将参数传递给@Test方法。

@Test

标记一个类或方法作为测试的一部分。


使用 TestNG,不仅可以指定测试方法,还可以用专门的标注 @Configuration指定类中的其他特定方法,这些方法叫做 配置方法。配置方法有四种类型:

  • beforeTestClass方法在类实例化之后,但是在测试方法运行之前执行。
  • afterTestClass方法在类中的所有测试方法执行之后执行。
  • beforeTestMethod方法在类中的任何测试方法执行之前执行。
  • afterTestMethod方法在类中的每个测试方法执行之后执行。

图 1进一步描述了测试类的生命周期。

图 1. 测试类的生命周期
测试类的生命周期

清单 1 演示了配置方法的一些示例。请注意,如果您使用组,那么配置方法也必须属于某个组。而且,配置方法的四种类型彼此之间不是互斥的,所以可以把方法定义成同时属于一种或多种配置方法类型。(作为例子,请参阅清单 1 中的 aroundTestMethods()方法)。

清单 1. 配置方法示例
 @Configuration(beforeTestClass = true, groups = {"tests.workflow"}) 
 public void setUp() 
 { 
   System.out.println("Initializing..."); 
 } 
 @Configuration(afterTestMethod = true, beforeTestMethod = true
    , groups = {"tests.workflow"}) 
 public void aroundTestMethods() 
 { 
   System.out.println("Around Test"); 
 }

TestNG 中的配置方法是 JUnit 的 setUp()和 tearDown()方法的增强版;它们的主要目的是为测试创建正确的执行上下文,并在测试用例执行之后刷新数据。


我们来验证一下,TestNG中主要的注解的执行顺序 

[java]  view plain copy
  1. import java.util.*;  
  2. import org.testng.Assert;  
  3. import org.testng.annotations.*;  
  4.    
  5. public class TestNGTest1 {  
  6.    
  7.     private Collection collection;  
  8.    
  9.     @BeforeClass  
  10.     public void oneTimeSetUp() {  
  11.         // one-time initialization code     
  12.         System.out.println("@BeforeClass - oneTimeSetUp");  
  13.     }  
  14.    
  15.     @AfterClass  
  16.     public void oneTimeTearDown() {  
  17.         // one-time cleanup code  
  18.         System.out.println("@AfterClass - oneTimeTearDown");  
  19.     }  
  20.    
  21.     @BeforeMethod  
  22.     public void setUp() {  
  23.         collection = new ArrayList();  
  24.         System.out.println("@BeforeMethod - setUp");  
  25.     }  
  26.    
  27.     @AfterMethod  
  28.     public void tearDown() {  
  29.         collection.clear();  
  30.         System.out.println("@AfterMethod - tearDown");  
  31.     }  
  32.    
  33.     @Test  
  34.     public void testEmptyCollection() {  
  35.         Assert.assertEquals(collection.isEmpty(),true);  
  36.         System.out.println("@Test - testEmptyCollection");  
  37.     }  
  38.    
  39.     @Test  
  40.     public void testOneItemCollection() {  
  41.         collection.add("itemA");  
  42.         Assert.assertEquals(collection.size(),1);  
  43.         System.out.println("@Test - testOneItemCollection");  
  44.     }  
  45. }  
 @BeforeClass @AfterClass 等这些从字面上都可以很好理解,Class是整个测试类运行时的前后,而Method则在每个测试方法被调用前都会被调用。

    所以这一段代码执行后的结果如下:

[java]  view plain copy
  1. @BeforeClass - oneTimeSetUp  
  2. @BeforeMethod - setUp  
  3. @Test - testEmptyCollection  
  4. @AfterMethod - tearDown  
  5. @BeforeMethod - setUp  
  6. @Test - testOneItemCollection  
  7. @AfterMethod - tearDown  
  8. @AfterClass - oneTimeTearDown  
  9. PASSED: testEmptyCollection  
  10. PASSED: testOneItemCollection  


分析以上运行结果:

  • 首先,所有beforeSuite()方法只执行一次。
  • 最后,afterSuite的()方法只执行一次。
  • 即使方法 beforeTest(),beforeClass(), afterClass() 和afterTest() 方法只执行一次。
  • beforeMethod()方法执行每个测试用例,但在此之前执行的测试用例。
  • afterMethod()方法执行每个测试用例,但测试用例执行后。

可以总结如下:

TestNG测试的一个方法的生命周期:

                @BeforeClass(执行一次)

                @BeforeMethod(N个Test 方法执行N次)

                @Test Test方法(此注解可能在类上表示多个,在方法表示一个)

                @AfterMethod(N个Test 方法执行N次)

                @AfterClass(执行一次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值