我正在将我的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
答案 0 :(得分:1)
根据TestNG doc。您可以使用IInvokedMethodListener
或ITestListener
这些监听器可以帮助您实现目标。
例如,使用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侦听器。