TestNG的组管理

1. Groups的执行顺序。

如果选择执行某个组的Test,实际执行顺序是这样的:@BeforeClass->@BeforeGroups->@Test->@AfterGroups->@AfterClass。
如果Groups分布在多个类里,比如Test1和Test2两个类,则可能是这样子的:
Test1.@BeforeClass->[b]@BeforeGroups[/b]->Test1.@Test->Test1.@AfterClass->
Test2.@BeforeClass->Test2.@Test->[b]@AfterGroups[/b]->Test2.@AfterClass
另外注意,如果不声明@BeforeClass、@AfterClass是属于要执行的Groups的,则不会执行@BeforeClass、@AfterClass。

2. 再有多个分组时,慎用BeforeGroup、AfterGroups
如代码
    
@BeforeGroups(groups = { "function", "smoketest" })
public void beforeGroup() {
//something
}
@AfterGroups(groups = { "function", "smoketest" })
public void afterGroup() {
//do something
}
@Test(groups = { "function" })
public void testMethod2() {
//do something
}
@Test(groups = { "smoketest","function" })
public void testMethod2() {
//do something
}

这样的情况,如果在执行是不指定组也就是执行全部组的话,beforeGroup会执行两次(两个组执行之前、之后各一次),AfterGroups只会执行一次(不知道什么原因)。如果要想让beforeGroup只在第一个组执行前执行一次,afterGroup在最后一个组执行完毕后执行一次,可以用一个小技巧,用一个静态变量来记录执行的次数。如:

private static int runNum=0;
@BeforeGroups(groups = { "function", "smoketest" })
public void beforeGroup() {
if (runNum == 0) {
runNum++;
//do something
}else{
runNum++;
}
}
@AfterGroups(groups = { "function", "smoketest" })
public void afterGroup() {
//do something
}


以上其实只是一种情况,如果组分布在多个类里,情况可能又会有不同,还没有仔细研究。
我总觉得TestNG在组管理这方面做得比较乱,官方的文档也没有很好的说明。尽量慎用啊……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值