testng之listener

发表于:2017-8-07 13:48

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

 作者:经纬    来源:博客

   以下是 TestNG 提供的几种监听器:
  ●IAnnotationTransformer
  ●IAnnotationTransformer2
  ●IHookable
  ●IInvokedMethodListener
  ●IMethodInterceptor
  ●IReporter
  ●ISuiteListener
  ●ITestListener
  尽管名字叫监听器,但事实上它们只是一些预定义的 Java 接口。用户创建这些接口的实现类,并把它们加入到 TestNG 中,TestNG 便会在测试运行的不同时刻调用这些类中的接口方法。 
  目前的框架主要用到IReporter 和 ITestLisntener。
  IReporter
  TestNG 提供了默认的测试报表。但如果用户希望有不同格式的测试报表,就需要使用 IReporter 监听器。IReporter 监听器只有一个方法需要实现。
  ITestListener
  如果要在测试方法执行成功、失败或者跳过时指定不同后续行为,可以通过 IInvokedMethodListener 实现,不过更为简便的方式是利用 ITestListener 监听器。ITestListener 监听器要求实现的方法中包含如下三个
  void onTestFailure(ITestResult result) 
  void onTestSkipped(ITestResult result) 
  void onTestSuccess(ITestResult result)
  然后在testsuite.xml里加上listeners标签:
  <?xml version="1.0" encoding="UTF-8"?>
  <suite name="Simple Suite">
    <listeners>
      <listener class-name="Listener-name" />
    </listeners>
    <test name="Simple test">
      <classes>
        <class name="SampleTest" />
      </classes>
    </test>
  </suite>
  同时需要在脚本的类定义前面加上@listener标签。
  这里如果Listener-name是个实现了IReporter的方法,那么他就会在最后按具体实现生产report.
  而如果他是个实现了ITestLisntener的方法,那么其实在测试脚本里,他能根据执行的成功或失败或跳过,自动的给出执行的结果,如下列:
  import org.testng.Assert;
  import org.testng.annotations.Test;
  public class SampleTest {
      @Test
      public void testMethodOne(){
          Assert.assertTrue(true);
      }
        
      @Test
      public void testMethodTwo(){
        Assert.assertTrue(false);
      }
        
      @Test(dependsOnMethods={"testMethodTwo"})
      public void testMethodThree(){
          Assert.assertTrue(true);
      }
  }
  这里有3个测试方法,每个里面有断言,但这里并没有对结果进行输出。
  import org.testng.ITestResult;
  import org.testng.TestListenerAdapter;
  public class myListener extends TestListenerAdapter{
      private int m_count = 0;
       
      @Override
      public void onTestFailure(ITestResult tr) {
          log(tr.getName()+ "--Test method failed\n");
      }
       
      @Override
      public void onTestSkipped(ITestResult tr) {
          log(tr.getName()+ "--Test method skipped\n");
      }
       
      @Override
      public void onTestSuccess(ITestResult tr) {
          log(tr.getName()+ "--Test method success\n");
      }
       
      private void log(String string) {
          System.out.print(string);
          if (++m_count % 40 == 0) {
          System.out.println("");
          }
      }
  }
  这是实现了ITestListener的类,同样利用前面那个testsuite.xml。把listener-name修改成myListener,执行后得到如下结果:
  testMethodOne--Test method success
  testMethodTwo--Test method failed
  testMethodThree--Test method skipped
  ===============================================
  Simple Logger Suite
  Total tests run: 3, Failures: 1, Skips: 1
  ===============================================
  它的作用很明显了,就不用在测试脚本/方法里再去添加结果的记录代码了,当然你也可以根据项目需求加上结果记录代码,然后决定到底用哪一种,这个就按需取舍了。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号