详解TestNG中的用例失败重试和自定义监听器

TestNG预留了一些接口给用户来实现用户特殊的需求,这里重点介绍用例失败重试和自定义监听器。本文面向的读者是有一定编码能力并且熟悉TestNG框架的测试人员,文章默认读者掌握了java接口,继承,重写等基础知识,如果大家能够轻松掌握本文,那么大家就完全胜任了测试开发这一职位;如果大家的Java编码水平一般,那么可以先学习以下两篇关于TestNG的文章:

十分钟上手TestNg

详解TestNg中的依赖和并发

用例失败重试

用例失败重试即用例失败后重新执行用例,需要重写IRetryAnalyzer接口中的retry方法,实用例失败重试3次,代码如下:

import org.testng.IRetryAnalyzer;

import org.testng.ITestResult;

public class MyRetry implements IRetryAnalyzer{

 private int retryCount = 0;

 private static final int maxRetryCount = 3;//用例失败重新执行3次

 @Override

public boolean retry(ITestResultresult) {

 if (retryCount < maxRetryCount) {

 retryCount++;

 return true;

    }

 return false;

  }

}

测试用例代码如下:

import static org.testng.Assert.assertTrue;

import org.testng.Assert;

import org.testng.annotations.Test;

public class TestclassSample {

 @Test(retryAnalyzer = MyRetry.class)

 public void test2() {

 assertTrue(false);

  }

}

执行结果如下:

 

可见用例运行失败后,被重新执行了3次

自定义监听器

Testng虽然提供了不少强大的功能和灵活的选项,但不能解决所有的问题,而监听器就是用来定制额外的功能以满足我们的需求的,以下是 TestNG 提供的几种监听器:

IAnnotationTransformer

IAnnotationTransformer

IAnnotationTransformer2

IHookable

IInvokedMethodListener

IMethodInterceptor

IReporter

ISuiteListener

ITestListener

我们这里重点介绍ITestListener,如果要在测试方法执行成功、失败或者跳过时指定不同后续行为就可以使用 ITestListener 监听器了。ITestListener 监听器要求实现的方法如下:

 

 

显然onStart和onFinish是测试执行和结时运行的方法,而onTestFailure和onTestSuccess分别对应用例执行失败和用例执行成功时运行的方法,我们对这几个方法进行重写,实例代码如下:

import org.testng.ITestContext;

import org.testng.ITestResult;

import org.testng.TestListenerAdapter;

public class MyCaseListener extends TestListenerAdapter {

 @Override

 public void onStart(ITestContext testContext) {

        System.out.print("*****start*****\n");

         super.onStart(testContext);

      }

 @Override

 public void onFinish(ITestContext testContext){  

       System.out.print("*****test finish****\n*");

        super.onFinish(testContext);

      }

 @Override

 public void onTestFailure(ITestResult tr) {

         System.out.print("*****test failure*****\n");

         super.onTestFailure(tr);

      }

 @Override

 public void onTestSuccess(ITestResult tr) {

         System.out.print("*****test success*****\n");

         super.onTestSuccess(tr);

      }

    }

在配置配置文件中使用自定义的listener:MyCaseListener

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">

<suite name="Test listenerSuite" parallel="classes "thread-count="2">

 <listeners>

 <listener class-name="com.my.test6.MyCaseListener"/>

 </listeners>

 <test name="Simpletest">

 <classes>

 <class name="com.my.test6.MethodCase"/>

 <class name="com.my.test6.MethodCase2"/>

 </classes>

 </test>

</suite>

执行测试结果如下:

在测试执行之前输出了*****start*****

执行成功的用例输出了*****test success*****

执行失败的用例输出了*****test failure *****

在测试执行完毕后输出了***** finish *****

这样大家就可以在测试运行的过程中加入自己想添加的功能了,比如大家可以把测试结果写入到自定义的测试报告中,有兴趣的同学不妨自己动手试试!

总结

本文介绍了TestNG中用例失败重试和如何编写自定义监听器,大家可以看到想要掌握这两个知识点就必须有较强的编码能力了。从我个人经验来看,作为测试人员能对使用的框架进行功能完改进就已经非常优秀了,在行业内具备相当强的竞争能力了。我已经在简书中连续写了三篇关于TestNG的文章,他们的难度由浅入深,相信这三篇文章一定会在工作中给大家带来帮助!原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值