与TestNG中的RunListener等效

时间:2019-01-29 21:07:07

标签: java testing cucumber testng gherkin

我正在将我的Cucumber-JUnit项目转换为Cucumber-TestNg。 在Junit中,我使用RunListener来获取正在执行的Gherkin步骤。我使用此侦听器将当前执行步骤的场景返回给我,例如:在“给定”条件下,在“何时”执行步骤或在“然后”执行步骤上,依此类推。 但是在TestNg中,我找不到类似的侦听器,该侦听器使我返回正在执行的Gherkin场景步骤。我尝试了其他TestNg侦听器,但无法解决此问题。我发现TestNg侦听器处于测试状态相关,而不像JuNit RunListener那样。即使有替代解决方案,也可以提出建议。

/**
 * Class used to do some report regarding the JUnit event notifier
 */
public class CustomJUnitListener extends RunListener {

  SeleniumTest test = null;

  public void setSeleniumTest(SeleniumTest test) {
    this.test = test;
  }

  /** {@inheritDoc} */
  @Override
  public void testFinished(Description description) throws Exception {
            // Get which scenario step under execution at run time..here    
  }

}```

//--------

让TestRunner使用此类的@Runwith incumed of Cucumber.class


1 个答案:

答案 0 :(得分:1)

根据TestNG doc。您可以使用IInvokedMethodListenerITestListener这些监听器可以帮助您实现目标。

例如,使用IInvokedMethodListener可以实现类似于以下的功能:

public class TestNGCustomInvokedMethodListener implements IInvokedMethodListener {

  private static final Logger LOG = LoggerFactory.getLogger(TestNGCustomInvokedMethodListener.class);

  @Override
  public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
   LOG.info("Running method: " + iInvokedMethod.getTestMethod().getMethodName());
  }

  @Override
  public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {

    LOG.info("Finished method: {} with result: {}", iInvokedMethod.getTestMethod().getMethodName(), statusToString(iTestResult.getStatus()));
  }

  private String statusToString(int status) {
    String statusStr;
    switch (status) {
      case ITestResult.FAILURE:
        statusStr = "FAILURE";
        break;

      case ITestResult.SKIP:
        statusStr = "SKIP";
        break;

      case ITestResult.STARTED:
        statusStr = "STARTED";
        break;

      case ITestResult.SUCCESS:
        statusStr = "SUCCESS";
        break;

     default:
        statusStr = "undefined";
        break;
    }

    return statusStr;
  }
}

最后,您可以看看this post,它很好地解释了如何使用配置的TestNG侦听器。