竹笋

首页 » 问答 » 常识 » 单元测试框架系列教程14用例失败重跑方
TUhjnbcbe - 2023/3/26 20:06:00
白癜风用仪器治疗 http://news.39.net/bjzkhbzy/180202/6039424.html

前面我们介绍了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;

Override

publicbooleanretry(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{

Override

publicvoidtransform(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{

Test

publicvoidtest01(){

System.out.println(test01);

}

Test

publicvoidtest02(){

Assert.assertTrue(10==11);

System.out.println(test02);

}

Test

publicvoidtest03(){

System.out.println(test03);

}

}

设置两个成功,一个失败的用例。

下面配置testng.xml,添加上监听。

?xmlversion=1.0encoding=UTF-8?

!DOCTYPEsuiteSYSTEM

1
查看完整版本: 单元测试框架系列教程14用例失败重跑方