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

发表于:2020-8-10 11:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:测试开发Kevin    来源:简书

  TestNG预留了一些接口给用户来实现用户特殊的需求,这里重点介绍用例失败重试和自定义监听器。本文面向的读者是有一定编码能力并且熟悉TestNG框架的测试人员,文章默认读者掌握了java接口,继承,重写等基础知识,如果大家能够轻松掌握本文,那么大家就完全胜任了测试开发这一职位。
  用例失败重试
  用例失败重试即用例失败后重新执行用例,需要重写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的文章,他们的难度由浅入深,相信这三篇文章一定会在工作中给大家带来帮助!原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号