基於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(){
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章