TestNG的ITestListener

8 篇文章 0 订阅

testng listener 类图

在这里插入图片描述

  • 主要是继承 ItestListener里面的方法。当自定义listener 时候,主要是使用这些方法与运行时的testng交互获取结果。invoke 方法的定义见下面所示。
  • 后续开发者可编写自己的Listener进行对结果的再处理。 for example,testng类中有一个ExitCodeListener,其代码如下。

定义于 SuiteRunner这个上下文管理类中。(此方法用于invoke suiteListener, 并不是用于处理ItestListener)

private void invokeListeners(boolean start) {
  for (ISuiteListener sl : m_listeners) {
    if (start) {
      sl.onStart(this);
    }
    else {
      sl.onFinish(this);
    }
  }

ItestListener 的invoke, 是testng中的一个Invoker类,
This class is responsible for invoking methods:
test methods ,configuration methods possibly in a separate thread and then for notifying the result listeners.

代码如下:

public static void runTestListeners(ITestResult tr, List<ITestListener> listeners) {
  for (ITestListener itl : listeners) {
    switch(tr.getStatus()) {
      case ITestResult.SKIP: {
        itl.onTestSkipped(tr);
        break;
      }
      case ITestResult.SUCCESS_PERCENTAGE_FAILURE: {
        itl.onTestFailedButWithinSuccessPercentage(tr);
        break;
      }
      case ITestResult.FAILURE: {
        itl.onTestFailure(tr);
        break;
      }
      case ITestResult.SUCCESS: {
        itl.onTestSuccess(tr);
        break;
      }

      case ITestResult.STARTED: {
        itl.onTestStart(tr);
        break;
      }
      default: {
        assert false : "UNKNOWN STATUS:" + tr;
      }
    }

ExitcodeListener
用于监测这个testng 整体有没有run m_hasTests,以及run的结果m_status是怎么样的。

private int m_status;
private boolean m_hasTests= false;

m_status有几种state:

  • protected static final int HAS_FAILURE = 1;
  • protected static final int HAS_SKIPPED = 2;
  • protected static final int HAS_FSP = 4;
  • protected static final int HAS_NO_TEST = 8;

exitcodeListener代码如下:

public static class ExitCodeListener implements IResultListener2 {
  private TestNG m_mainRunner;

  public ExitCodeListener() {
    m_mainRunner = TestNG.m_instance;
  }

  public ExitCodeListener(TestNG runner) {
    m_mainRunner = runner;
  }

  @Override
  public void beforeConfiguration(ITestResult tr) {
  }

  @Override
  public void onTestFailure(ITestResult result) {
    setHasRunTests();
    m_mainRunner.setStatus(HAS_FAILURE);
  }

  @Override
  public void onTestSkipped(ITestResult result) {
    setHasRunTests();
    m_mainRunner.setStatus(HAS_SKIPPED);
  }

  @Override
  public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
    setHasRunTests();
    m_mainRunner.setStatus(HAS_FSP);
  }

  @Override
  public void onTestSuccess(ITestResult result) {
    setHasRunTests();
  }

  @Override
  public void onStart(ITestContext context) {
    setHasRunTests();
  }

  @Override
  public void onFinish(ITestContext context) {
  }

  @Override
  public void onTestStart(ITestResult result) {
    setHasRunTests();
  }

  private void setHasRunTests() {
    m_mainRunner.m_hasTests= true;
  }

  /**
   * @see org.testng.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
   */
  @Override
  public void onConfigurationFailure(ITestResult itr) {
    m_mainRunner.setStatus(HAS_FAILURE);
  }

  /**
   * @see org.testng.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
   */
  @Override
  public void onConfigurationSkip(ITestResult itr) {
    m_mainRunner.setStatus(HAS_SKIPPED);
  }

  /**
   * @see org.testng.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
   */
  @Override
  public void onConfigurationSuccess(ITestResult itr) {
  }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值