对BeforeSuite和BeforeTest的理解
在BeforeSuite、BeforeTest、BeforeClass、BeforeMethod及BeforeGroups中,后面三个注解都比较好理解,其实BeforeSuite、BeforeTest的字面意思也是很简单的:
BeforeSuite:在整个测试集运行之前运行;
BeforeTest:在测试集中的每个Test之前运行。
但是有点疑惑的是:BeforeClass、BeforeMethod及BeforeGroups都是在一个测试类开始运行之后才执行的;而BeforeSuite、BeforeTest定义在测试类的内部,但是却在
测试类运行之前执行。这就有点不大好理解,如果有多个平行的测试类,这些测试类只需要一个BeforeSuite、BeforeTest,那么这个BeforeSuite、BeforeTest定义在哪个测试类
中比较好呢?或者如果每个测试类都定义了BeforeSuite、BeforeTest,这些BeforeSuite、BeforeTest以怎样的关系运行?
其实BeforeSuite、BeforeTest的运行与否也是与测试类相关的,如果你在某个测试类中定义了BeforeSuite、BeforeTest,但是在xml文件中不执行该测试类,那么这个
BeforeSuite、BeforeTest也不会被执行。
因此,我的理解是:如果多个测试类需要一个共同的BeforeSuite、BeforeTest,可以在一个单独的类中定义,但是运行测试时必须包含该类;如果每个测试类需要不同的
BeforeSuite、BeforeTest,那就各自定义各自的。
例如:Test1和Test2都定义了BeforeSuite、BeforeTest:
public class Test1 { @BeforeSuite
public void f_bs() {
System.out.println("Test1.f_bs()");
} @BeforeTest
public void f_bt() {
System.out.println("Test1.f_bt()");
} @BeforeClass
public void f_bc() {
System.out.println("Test1.f_bc()");
} @Test
public void test_m1() {
System.out.println("Test1.test_m1()");
}
}
public class Test2 { @BeforeSuite
public void f_bs() {
System.out.println("Test2.f_bs()");
} @BeforeTest
public void f_bt() {
System.out.println("Test2.f_bt()");
} @BeforeClass
public void f_bc() {
System.out.println("Test2.f_bc()");
} @Test
public void test_m2() {
System.out.println("Test1.test_m2()");
}
}
如果XML文件同时运行两个测试类:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1">
<test name="test1" verbose="2">
<classes>
<class name="sea.Test1" />
<class name="sea.Test2" />
</classes>
</test>
</suite>
那么运行结果为如下,可见每个类中定义的BeforeSuite、BeforeTest都执行了:
Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test2.f_bt()
Test1.f_bc()
Test1.test_m1()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m1
PASSED: test_m2
如果XML文件只执行1个测试类:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1">
<test name="test1" verbose="2">
<classes>
<class name="sea.Test1" />
</classes>
</test>
</suite>
那么运行结果为如下,可见只有Test1类中定义的BeforeSuite、BeforeTest被执行了:
Test1.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1
如果把两个测试类放在不同的Test中,那么他们的BeforeTest也是被单独执行的:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1">
<test name="test1" verbose="2">
<classes>
<class name="sea.Test1" />
</classes>
</test> <test name="test2" verbose="2">
<classes>
<class name="sea.Test2" />
</classes>
</test>
</suite>
Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1 Test2.f_bt()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m2
对BeforeSuite和BeforeTest的理解的更多相关文章
- Testng使用方法示例
TestNG TestNG是一个测试框架,灵感来自JUnit和NUnit.但引入了下面这些新的功能,使它更强大和更容易使用. 注解: 可在任意大的线程池运行您的测试(所有方法在它们自己的线程内,一个线 ...
- 5.6 TestNg的使用
Java语言编写的WebDriver测试程序通常使用单元测试框架运行.TestNG单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能.目前很大一部分自动化测试工程师已经开始 ...
- 【转】TestNG常用注解
http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...
- TestNG基本注解(二)
1. Before类别和After类别注解 @BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeClass @AfterClass @Befo ...
- testng 教程
Testng 简介: Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性: annotations 注释,如 @test ...
- TestNG之注解的生命周期
有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 @BeforeSuite@AfterSuite@BeforeTest@AfterTest@BeforeGroups@AfterGro ...
- TestNG关键字和testNG.xml结构学习
转自官网:http://testng.org/doc/documentation-main.html#test-results TestNG关键字 @BeforeSuite@AfterSuite@Be ...
- 简单聊聊TestNG中的并发
前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.S ...
- TestNG操作详解
运行测试步骤方法有如下两种: 1. 直接在Eclipse运行testNG的测试用例, 在代码编辑区域鼠标右键, 选择Run as ->testNG Test 2. 在工程的根目录下, 建立tes ...
随机推荐
- Java,Mysql-根据一个给定经纬度的点,进行附近500米地点查询–合理利用算法
Java,Mysql-根据一个给定经纬度的点,进行附近500米地点查询–合理利用算法 LBS 球面距离公式 http://wiki.myoa.info/zh-blog:20 Java,Mysql- ...
- 常用的easyui使用方法
-------datagrid 1.获取某行的行号(row)tdg.datagrid('getRowIndex',rows)2.通过行号移除该行tdg.datagrid('deleteRow',ind ...
- 第二百六十九节,Tornado框架-Session登录判断
Tornado框架-Session登录判断 Session需要结合cookie来实现 Session的理解 1.用户登录系统时,服务器端获取系统当前时间,进行nd5加密,得到加密后的密串 2.将密串作 ...
- java 多线程 3 synchronized 同步
多任务编程的难点在于多任务共享资源.对于同一个进程空间中的多个线程来说,它们都共享堆中的对象.某个线程对对象的操作,将影响到其它的线程. 在多线程编程中,要尽力避免竞争条件(racing condit ...
- 【BZOJ】2301: [HAOI2011]Problem b(莫比乌斯+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2301 和这题不是差不多的嘛--[BZOJ]1101: [POI2007]Zap(莫比乌斯+分块) 唯 ...
- 曲线学习PyQt5方案一
PyQt5官方网站没直接给出API,这个很操蛋啊. PtQt4官方网站有完整的API,C++版本的Qt5也能找到完整的API资料.由于Qt5的C++和Python3的类和函数实现应该是一致的,所以可以 ...
- notepad++程序员开发插件
1. sftp 2. explore 3. XBrackets 括号自动补全(引号,方括号)
- html转pdf工具:wkhtmltopdf.exe
百度云下载:http://pan.baidu.com/s/1dEX0h93
- C#,C++Dll文件调用心得
C#下: 1.新建-->项目-->控制台应用程序:填写各种名称之后项目新建成功:一下为默认生成方式. 2.如下,在Program.cs中添加如下代码: using System;using ...
- ArcGIS -- ArcSDE Lock request conflicts with an established lock
1.查询下列表是否有数据 select * from sde.state_locks; select * from sde.object_locks; select * from sde.layer_ ...