在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

最新文章

  1. liunux mysql MySQL表名不区分大小写的设置方法
  2. 使用GROUP BY统计记录条数 COUNT(*) DISTINCT
  3. cmd 窗口配置mysql数据库
  4. opencv笔记5:频域和空域的一点理解
  5. centos 6.4下安装postgresql 9.2
  6. Android开发之内容观察者
  7. java socker编程
  8. leetcodequestion_56 Merge Intervals
  9. zabbix 模版其实就是主机
  10. 使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP注意事项
  11. Building Your First EDM
  12. SSRS报表服务随笔(rdl报表服务)-报表结构与样式
  13. js中的setTimeout第三个参数
  14. W5100S芯片特性
  15. day 023-python 包
  16. 互换元素(swap,swap_ranges)
  17. logstash获取日志,时间戳相差8小时
  18. end=‘’
  19. 设置网站默认用IE7打开
  20. EasyMock的使用

热门文章

  1. Android基础总结(五)网络通信2
  2. Spring mvc 返回JSON 在IE 下提示下载 解决办法
  3. Ci 错误 In order to use the Session class you are required to set an encryption key in your config file.
  4. ComBoFuzzySearch.js
  5. jQuery &amp;&amp; jEasyUI 扩展功能集合
  6. javascript父、子页面交互小结
  7. jquery ajax生成Select
  8. Linux JAVA 配置
  9. Python+selenium之获取文本值和下拉框选择数据
  10. mysql备份数据库常见问题