TestNG之注解的生命周期
有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有
| @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. |
|
英文看到不是很明白,那么我们从挨个实验。
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笔者目前还没有发现怎么生效。
画了个路程图更直接点。

TestNG之注解的生命周期的更多相关文章
- Java Servlet详解(体系结构+注解配置+生命周期)
Java Servlet详解(注解配置+生命周期) 什么是Servlet : (Server applet)? 顾名思义:服务端的小程序 Servlet只是一个接口,定义了Java被浏览器访问到(To ...
- spring注解-bean生命周期
https://www.jianshu.com/p/70b935f2b3fe bean的生命周期 bean创建---初始化----销毁的过程 容器管理bean的生命周期 对象创建:容器启动后调用bea ...
- Jetpack 架构组件 Lifecycle 生命周期 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 对Rust所有权、借用及生命周期的理解
Rust的内存管理中涉及所有权.借用与生命周期这三个概念,下面是个人的一点粗浅理解. 一.从内存安全的角度理解Rust中的所有权.借用.生命周期 要理解这三个概念,你首要想的是这么做的出发点是什么-- ...
- 17、生命周期-BeanPostProcessor在Spring底层的使用
17.生命周期-BeanPostProcessor在Spring底层的使用 bean赋值.注入其他组件.@Autowired注解.生命周期注解.@Async --都是 BeanPostProcesso ...
- rust 函数-生命周期
记录一下自己理解的生命周期. 每个变量都有自己的生命周期. 在c++里生命周期好比作用域, 小的作用域的可以使用大作用域的变量. 如果把这里的每个作用域取个名,那么就相当于rust里的生命周期注解. ...
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- Servlet生命周期和注解配置
Servlet的生命周期和注解配置问题 /* Servlet? 运行在服务器上的小程序 定义浏览器访问到Tomcat的规则 一.生命周期? 1.创建 2.提供服务 3.被销毁 二.servlet3.0 ...
- spring(二、bean生命周期、用到的设计模式、常用注解)
spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...
随机推荐
- bootstrap源码分析之scrollspy(滚动侦听)
源码文件: Scrollspy.js 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项2.导航必须是 .nav > li > a 结构,并且a ...
- HubSpot – 网站开发必备的 jQuery 信息提示库
HubSpot 一款功能丰富的 jQuery 消息提示插件.它可以帮助你个性化显示您的应用程序的事务性消息.您可以轻松地包裹 Ajax 请求进度,成功和错误消息,还可以添加操作链接到您的消息中. Hu ...
- Ajax关于readyState(状态值)和status(状态码)的研究
var getXmlHttpRequest = function () { try{ //主流浏览器提供了XMLHttpRequest对象 return new XMLHttpRequest(); } ...
- [原][CSS3]会动的盒子机器人
[PC与移动端皆可]会动的盒子机器人 浏览器必须可以解析perspective属性. 在线:http://wangxinsheng.herokuapp.com/boxMan 代码: <!DOCT ...
- C#开源项目汇总
Discuz nt: 一个开源的论坛项目.估计你现在逛过大大小小的论坛没有成百上千,也有几十个吧,其中是个论坛6个以上都是Discuz(以前大部分都是php版的),现 在官方也早就放出了DotNet( ...
- 浅析字符串操作方法slice、substr、substring及其IE兼容性
在截取字符串时常常会用到substr().substring().slice()方法,有时混淆之间的用法,故总结下. slice() 定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置. ...
- SQL SERVER代码生成器必备
写代码生成器的时候经常用到的SQL 1.表添加注释 EXECUTE sp_addextendedproperty N'MS_Description', N'表注释', N'user', N'dbo', ...
- Websphere 系列的https证书的配置说明
术语解释 v IHS IBM HTTP Server v WP Websphere portal v WAS Websphere Application Server 系统安装 WAS6.1 安装了例 ...
- Java输入/输出流体系
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...
- [读书笔记] CSS权威指南2: 结构和层叠
层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...