基于testNG的监听器-IMethodInterceptor,动态加载@Test的注释

通常testNG最常使用的方法就是@Test,@Test有一些常用的注释。比如我们需要控制不同的方法的执行顺序或者依赖关系,通常会使用priority,或者要控制一个类里某些@Test暂时不运行,会使用enabled。这些注释一般都写在代码里,如果我们需要动态修改@Test方法的优先级或者依赖关系等属性,需要用到监听器IMethodInterceptor。

1、创建监听器

2、创建表存储需要动态修改的属性

3、在@Test测试类里增加@Listeners({ExtentTestNGMethodInterceptor.class})

首先,先创建一个类ExtentTestNGMethodInterceptor 实现 IMethodInterceptor接口

public class ExtentTestNGMethodInterceptor implements IMethodInterceptor {
    List<IMethodInstance> returnMethod = new ArrayList<IMethodInstance>();

    @Override
    public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
        // IMethodInstance 这个接口所返回的是所有测试方法或实例(所有方法都在里面)
        // 将IMethodInstance对象的list 创建为迭代器
        Iterator<IMethodInstance> tie = methods.iterator();
        // 遍历
        while (tie.hasNext()) {
            IMethodInstance methon = tie.next();
            // 带注释的TestNG方法
            ITestNGMethod x = methon.getMethod();
            // 判断这个方法时@注释描述的
            if (x.isTest()) {
                String methodname = x.getMethodName();
                String sql = "select description,status,priority from tb_method where casename = '" + methodname + "' and status  = 'true'";
                List<Map<String, Object>> list = null;
                try {
                    list = exeSqlApi("auto_test", sql);
                    if (list.size() > 0) {
                        Map<String, Object> map = list.get(0);
                        String priority = map.get("priority").toString();
                        String description = map.get("description").toString();
                        x.setDescription(description);
                        x.setPriority(Integer.parseInt(priority));
                        returnMethod.add(methon);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        // return
        return returnMethod;
    }

}

 其次,创建表,表结构如下:

 最后,在测试类里增加监听

@Listeners({ExtentTestNGMethodInterceptor.class})
public class Bvt {
    @Test
    public void test(){
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值