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