对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
最新文章
- liunux mysql MySQL表名不区分大小写的设置方法
- 使用GROUP BY统计记录条数 COUNT(*) DISTINCT
- cmd 窗口配置mysql数据库
- opencv笔记5:频域和空域的一点理解
- centos 6.4下安装postgresql 9.2
- Android开发之内容观察者
- java socker编程
- leetcodequestion_56 Merge Intervals
- zabbix 模版其实就是主机
- 使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP注意事项
- Building Your First EDM
- SSRS报表服务随笔(rdl报表服务)-报表结构与样式
- js中的setTimeout第三个参数
- W5100S芯片特性
- day 023-python 包
- 互换元素(swap,swap_ranges)
- logstash获取日志,时间戳相差8小时
- end=‘’
- 设置网站默认用IE7打开
- EasyMock的使用
热门文章
- Android基础总结(五)网络通信2
- Spring mvc 返回JSON 在IE 下提示下载 解决办法
- Ci 错误 In order to use the Session class you are required to set an encryption key in your config file.
- ComBoFuzzySearch.js
- jQuery &;&; jEasyUI 扩展功能集合
- javascript父、子页面交互小结
- jquery ajax生成Select
- Linux JAVA 配置
- Python+selenium之获取文本值和下拉框选择数据
- mysql备份数据库常见问题