TestNG之注解的生命周期
2016-03-24 22:28
295 查看
有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有
英文看到不是很明白,那么我们从挨个实验。
运行后的结果:
由此可见,testng运行时,顺序是这样的:
@BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass->@AfterTest->@AfterSuite
其中{}内的与多少个@Test,就循环执行多少次。
我们知道了在一个类中注解的生命周期,那么这些注解的作用范围呢,下面我们再建一个类
XML中这样配置
运行的结果是:
看到没有,除了@BeforeSuite、@BeforeTest、@AfterTest、@AfterSuite可以对不同的测试类生效外,其他的注解的作用范围只在本类中生效。这样就可以清晰的知道什么样的逻辑应该放在哪个注解中,如只想在测试中只启动、关闭一次浏览器,且再不同的测试类中共用,那么我们就可以把启动、关闭浏览器的方法放在suite和test中
至于@BeforeGroups和@AfterGroups笔者目前还没有发现怎么生效。
画了个路程图更直接点。
@BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeGroups @AfterGroups @BeforeClass @AfterClass @BeforeMethod @AfterMethod | Configuration information for a TestNG class: @BeforeSuite: The annotated method will be run before all tests in this suite have run. @AfterSuite: The annotated method will be run after all tests in this suite have run. @BeforeTest: The annotated method will be run before any test method belonging to the classes inside the <test> tag is run. @AfterTest: The annotated method will be run after all the test methods belonging to the classes inside the <test> tag have run. @BeforeGroups: The 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. @AfterGroups: The 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. @BeforeClass: The annotated method will be run before the first test method in the current class is invoked. @AfterClass: The annotated method will be run after all the test methods in the current class have been run. @BeforeMethod: The annotated method will be run before each test method. @AfterMethod: The annotated method will be run after each test method. |
package com.test; 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; /** * @author QiaoJiafei * @version 创建时间:2016年3月24日 下午9:21:00 * 类说明 */ public class TestNG2 { @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"); } @BeforeClass public void beforeclass() { System.out.println("beforeclass's TestNG2"); } @AfterClass public void aftertclass() { System.out.println("afterclass's TestNG2"); } @BeforeMethod public void beforemethod() { System.out.println("TestNG2's beforemethod"); } @AfterMethod public void aftertmethod() { System.out.println("TestNG2's aftermethod"); } @BeforeGroups public void beforegroups() { System.out.println("TestNG2's beforegroups"); } @AfterGroups public void aftergroups() { System.out.println("TestNG2's aftergroups"); } @Test public void test1() { System.out.println("TestNG2's testt1"); } @Test(groups="gr") public void test2() { System.out.println("TestNG2's testt2"); } public void ff() { System.out.println("nothing"); } }
运行后的结果:
beforesuite beforeTest beforeclass's TestNG2 TestNG2's beforemethod TestNG2's testt1 TestNG2's aftermethod TestNG2's beforemethod TestNG2's testt2 TestNG2's aftermethod afterclass's TestNG2 aftertest aftersuite
由此可见,testng运行时,顺序是这样的:
@BeforeSuite->@BeforeTest->@BeforeClass->{@BeforeMethod->@Test->@AfterMethod}->@AfterClass->@AfterTest->@AfterSuite
其中{}内的与多少个@Test,就循环执行多少次。
我们知道了在一个类中注解的生命周期,那么这些注解的作用范围呢,下面我们再建一个类
package com.test; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * @author QiaoJiafei * @version 创建时间:2016年3月24日 下午9:20:47 * 类说明 */ public class TestNG1 { @BeforeClass public void beforeclass() { System.out.println("beforeclass's TestNG1"); } @AfterClass public void afterclass() { System.out.println("afterclass's TestNG1"); } @Test public void test3() { System.out.println("TestNG1's test3"); } @Test(groups="haha") public void test4() { System.out.println("TestNG1's test4"); } }
XML中这样配置
<?xml version="1.0" encoding="UTF-8"?> <suite name="Suite" parallel="false"> <test name="Test"> <classes> <class name="com.test.TestNG1"/> <class name="com.test.TestNG2"/> </classes> <!-- <groups> <run> <include name="gr" /> </run> </groups>--> </test> <!-- Test --> </suite> <!-- Suite -->
运行的结果是:
beforesuite beforeTest beforeclass's TestNG1 TestNG1's test3 TestNG1's test4 afterclass's TestNG1 beforeclass's TestNG2 TestNG2's beforemethod TestNG2's testt1 TestNG2's aftermethod TestNG2's beforemethod TestNG2's testt2 TestNG2's aftermethod afterclass's TestNG2 aftertest aftersuite
看到没有,除了@BeforeSuite、@BeforeTest、@AfterTest、@AfterSuite可以对不同的测试类生效外,其他的注解的作用范围只在本类中生效。这样就可以清晰的知道什么样的逻辑应该放在哪个注解中,如只想在测试中只启动、关闭一次浏览器,且再不同的测试类中共用,那么我们就可以把启动、关闭浏览器的方法放在suite和test中
至于@BeforeGroups和@AfterGroups笔者目前还没有发现怎么生效。
画了个路程图更直接点。
相关文章推荐
- 小心情。
- 深入理解JavaScript系列(一): 函数的四种调用模式
- java编程思想第四版学习笔记-内部类
- 如何让HTML的编写更具结构性
- HDU 4513 吉哥系列故事——完美队形II
- Hadoop使用DATAJOIN软件包链接不同来源的数据
- hdoj 不容易系列之(4)——考新郎 2049 (错排)
- Java编程基础_为什么要设置Java环境变量(详解)
- iOS之即时通信 XMPP
- java中输入和输出重定向
- OC中的类的三大特性:继承,封装,多态
- 使用SQL Server 2014 In-Memory 内存数据库时需要注意的地方
- CSS经典操作之图片
- 数据结构算法 (一)
- Hello CSDN
- iOS 事件处理机制与图像渲染过程
- 值得纪念的日子,What a fucking bad day!
- Nagios Fusion-FAQs
- 【分享】一位技术人员成长历程
- malloc vs new