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

    xiaoxiao2022-07-03  118

    通常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(){ } }

     

    最新回复(0)