在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的理解的更多相关文章

  1. Testng使用方法示例

    TestNG TestNG是一个测试框架,灵感来自JUnit和NUnit.但引入了下面这些新的功能,使它更强大和更容易使用. 注解: 可在任意大的线程池运行您的测试(所有方法在它们自己的线程内,一个线 ...

  2. 5.6 TestNg的使用

          Java语言编写的WebDriver测试程序通常使用单元测试框架运行.TestNG单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能.目前很大一部分自动化测试工程师已经开始 ...

  3. 【转】TestNG常用注解

    http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...

  4. TestNG基本注解(二)

    1. Before类别和After类别注解 @BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeClass @AfterClass @Befo ...

  5. testng 教程

    Testng 简介: Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性: annotations  注释,如 @test ...

  6. TestNG之注解的生命周期

    有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 @BeforeSuite@AfterSuite@BeforeTest@AfterTest@BeforeGroups@AfterGro ...

  7. TestNG关键字和testNG.xml结构学习

    转自官网:http://testng.org/doc/documentation-main.html#test-results TestNG关键字 @BeforeSuite@AfterSuite@Be ...

  8. 简单聊聊TestNG中的并发

    前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.S ...

  9. TestNG操作详解

    运行测试步骤方法有如下两种: 1. 直接在Eclipse运行testNG的测试用例, 在代码编辑区域鼠标右键, 选择Run as ->testNG Test 2. 在工程的根目录下, 建立tes ...

随机推荐

  1. SenCha Touch HTML 5 应用程序缓存

    http://www.cnblogs.com/qidian10/p/3292876.html https://developer.mozilla.org/zh-CN/docs/HTML/Using_t ...

  2. Python高级编程之生成器(Generator)与coroutine(一):Generator

    转载请注明出处:点我 这是一系列的文章,会从基础开始一步步的介绍Python中的Generator以及coroutine(协程)(主要是介绍coroutine),并且详细的讲述了Python中coro ...

  3. linux 链接的使用 创建和删除符号连接(软、硬链接)

    1 . 使用方式 :ln [option] source_file dist_file   (source_file是待建立链接文件的文件,dist_file是新创建的链接文件)            ...

  4. tomcat上

    1. Tomcat简介 Tomcat是一个web服务器 web服务器:httpd,nginx web 处理静态文件:html css.js.jpg,png Tomcat 处理 html文件 php软件 ...

  5. Centsos7修改密码

    CentOS 7.0 进入单用户模式修改Root密码 时间:2017-05-02 01:10来源:blog.csdn.net  作者:海哥_大大的Java 举报   点击:506次 一.启动时,随便按 ...

  6. Appendix A. Common application properties

    Appendix A. Common application properties Prev  Part X. Appendices  Next URl链接:https://docs.spring.i ...

  7. shell向python传参数

    想要在shell中调用python脚本时实现: python pyServer.py argu1 argu2 argu3 利用 sys.argv 即可读取到 相应参数: # coding=utf-8 ...

  8. JS 拖动原理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 图像处理之二维码生成-qr

    Javascript生成二维码(QR)   网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器 ...

  10. TMS320C64x DSP L1 L2 Cache架构(1)——C64x Cache Architecture

    [前沿]研究生阶段从事于DSP和FPGA技术的相关研究工作,学习并整理了大量的技术资料,包括TI公司的官方文档和网络上的详细笔记,花费了大量的时间和精力总结了前人的工作成果.无奈工作却从事于嵌入式技术 ...