testNG-监听器自定义方法循环
程序员文章站
2022-05-17 07:57:54
...
- IAnnotationTransformer 在方法运行之前监听运行
- IAnnotationTransformer2
- IHookable
- IInvokedMethodListener 在 IMethodInterceptor 之后,每个方法运行之前调用,可修改方法运行之前的参数,每个方法运行之前或之后对应的参数的配置
- IMethodInterceptor 按照标签test次数调用,每次返回标签test中的所有方法,可添加返回method,方法按照class依次运行
- IReporter
- ISuiteListener
使用:在testng.xml中添加自定义的监听器文件目录
<suite name="test_type">
<test name="FIC.1" >
<classes >
<class name="TestCae.TEST_2"></class>
<class name="TestCae.Test1"></class>
</classes>
</test>
<test name="F.2" >
<classes >
<class name="TestCae.TEST_2"></class>
<class name="TestCae.Test1"></class>
</classes>
</test>
<listeners >
<listener class-name="Frame.testNG.TestMethodListener"/>
<listener class-name="Frame.testNG.CommentConst"/>
</listeners>
</suite>
自定义的监听:
继承需要的需要的监听器的接口,重写接口中的方法
如下为根据test name 配置添加每个class中的方法运行的次数或每个方法中对应的参数
配置返回方法可按照一个class中全部的method运行完之后再循环。
注:使用 annotation 修改@test中的属性,可修改方法的method次数,但该方法只能将每个method一次性全部运行到规定的次数,
public class TestMethodListener implements IMethodInterceptor {
TestNG_RunPlan.init();
int time=0;
String browser="";
TestNG_RunPlan.run_method=methods.size();
if(Context.getName().contains(".")){
browser=Context.getName().split("[.]")[0];
time=Integer.valueOf(Context.getName().split("[.]")[1]);
}else if(Context.getName().length()>0|Context.getName().length()<4|Context.getName().toUpperCase().contains("F")|Context.getName().toUpperCase().contains("I")|Context.getName().toUpperCase().contains("C")){
browser=Context.getName();
}
TestNG_RunPlan.run_browser=browser.toUpperCase();
TestNG_RunPlan.running_browser=browser.toUpperCase();
List<IMethodInstance> result = new ArrayList<IMethodInstance>();
for (int j2 = 0; j2 < time; j2++) { // run time
for (int i = 0; i < browser.length(); i++) { // browser
for (int j = 0; j < methods.size(); j++) { //method
result.add(methods.get(j));
}
}
}
for (int j = 0; j < methods.size(); j++) {
String key=methods.get(j).getInstance().toString();
if(TestNG_RunPlan.methodsN!=null){
if(TestNG_RunPlan.methodsN.get(key)!=null){
int numM=Integer.valueOf(TestNG_RunPlan.methodsN.get(key));
numM++;
TestNG_RunPlan.methodsN.put(methods.get(j).getInstance().toString(), ""+numM);
}else{
TestNG_RunPlan.methodsN.put(methods.get(j).getInstance().toString(), "1");
}
}else{
TestNG_RunPlan.methodsN.put(methods.get(j).getInstance().toString(), "1");
}
}
return result;
// TODO Auto-generated method stub
}