欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
}