前面我们介绍了TestNG中的Listener和简单举例,这篇来介绍下网上很多人采用的修改代码来实现测试用例的重跑,这当然离不开Listener相关接口。在介绍实现相关代码之前,我们先来了解几个接口。
1.接口IRetryAnalyzer
该接口的作用是提供机会去实现能够让失败用例重跑。
实现该接口必须要实现retry(ITestResultresult)这个方法。返回值类型是布尔型,如果返回是True,那么就执行失败重跑,返回是false,就不重跑。参数result是当前运行的测试用例的结果状态。
2.接口IAnnotationTransformer
该接口的作用是在TestNG执行过程中动态改变测试类中Annotation的参数,当前这个接口主要是针对
Test注释。IAnnotationTransformer监听器接口只有一个方法transform(ITestAnnotationannotation,ClasstestClass,ConstructortestConstructor,MethodtestMethod)
下面我们写的几个类方法都是来源网上,都是实现上面两个接口。
3.项目结构如下
前面我们介绍了TestNG中的Listener和简单举例,这篇来介绍下网上很多人采用的修改代码来实现测试用例的重跑,这当然离不开Listener相关接口。在介绍实现相关代码之前,我们先来了解几个接口。
1.接口IRetryAnalyzer
该接口的作用是提供机会去实现能够让失败用例重跑。
实现该接口必须要实现retry(ITestResultresult)这个方法。返回值类型是布尔型,如果返回是True,那么就执行失败重跑,返回是false,就不重跑。参数result是当前运行的测试用例的结果状态。
2.接口IAnnotationTransformer
该接口的作用是在TestNG执行过程中动态改变测试类中Annotation的参数,当前这个接口主要是针对
Test注释。IAnnotationTransformer监听器接口只有一个方法transform(ITestAnnotationannotation,ClasstestClass,ConstructortestConstructor,MethodtestMethod)
下面我们写的几个类方法都是来源网上,都是实现上面两个接口。
3.项目结构如下
第一个Java文件,MyRetry.java实现了IRetryAnalyzer接口,代码如下
packagedemo3;
importorg.testng.IRetryAnalyzer;
importorg.testng.ITestResult;
/**
*createbyAnthonyon/11/27
*/
publicclassMyRetryimplementsIRetryAnalyzer{
//设置当前失败执行的次数
privateintretryCount=1;
//设置最大失败执行次数
privatestaticintmaxRetryCount=3;
Overridepublicbooleanretry(ITestResultiTestResult){
if(retryCountmaxRetryCount){
retryCount++;
returntrue;
}
returnfalse;
}
}
第二个Java文件,MyRetryListener.java实现了IAnnotationTransformer接口,代码如下
packagedemo3;
importorg.testng.IAnnotationTransformer;
importorg.testng.IRetryAnalyzer;
importorg.testng.annotations.ITestAnnotation;
importjava.lang.reflect.Constructor;
importjava.lang.reflect.Method;
/**
*createbyAnthonyon/11/27
*/
publicclassMyRetryListenerimplementsIAnnotationTransformer{
Overridepublicvoidtransform(ITestAnnotationiTestAnnotation,ClassaClass,Constructorconstructor,Methodmethod){
IRetryAnalyzermyRetry=iTestAnnotation.getRetryAnalyzer();
if(myRetry==null){
iTestAnnotation.setRetryAnalyzer(MyRetry.class);
}
}
}
最后一段代码的意思就是对当前运行的用例,先通过getRetryAnalyzer()获取重跑的次数的属性,如果属性为空,那么就设置我们自己设置的重跑次数(本文第一个类名称.class)
第三个java文件,写一个测试用例。
packagedemo3;
importorg.testng.Assert;
importorg.testng.annotations.Test;
/**
*createbyAnthonyon/11/18
*/
publicclassReRunFailedTestCaseDemo{
Testpublicvoidtest01(){
System.out.println(test01);
}
Testpublicvoidtest02(){
Assert.assertTrue(10==11);
System.out.println(test02);
}
Testpublicvoidtest03(){
System.out.println(test03);
}
}
设置两个成功,一个失败的用例。
下面配置testng.xml,添加上监听。
?xmlversion=1.0encoding=UTF-8?
!DOCTYPEsuiteSYSTEM