TestNg提供了监听器和拦截器的几个接口供我们自己开发扩展,通过实现这些接口,来自定义我们在测试中想要的行为
接口列表:
- IAnnotationTransformer (doc,javadoc)
- IAnnotationTransformer2 (doc,javadoc)
- IHookable (doc,javadoc)
- IInvokedMethodListener (doc, javadoc)
- IMethodInterceptor (doc,javadoc)
- IReporter (doc,javadoc)
- ISuiteListener (doc, javadoc)
- ITestListener (doc,javadoc)
无论何时TestNG即将调用一个测试(被@Test
注解的)或者配置(任何使用@Before
or@After
注解标注的方法),监听器 IInvokedMethodListener
都可以让你得到通知。你所要做的就是实现如下接口:
public interface IInvokedMethodListener extends ITestNGListener {
void beforeInvocation(IInvokedMethod method, ITestResult testResult);
void afterInvocation(IInvokedMethod method, ITestResult testResult);
}
如:
public class MyTestListener implements IInvokedMethodListener2 { private static Logger logger = Logger.getLogger(MyTestListener.class); @Override public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { } @Override public void afterInvocation(IInvokedMethod method, ITestResult testResult) { } @Override public void beforeInvocation(IInvokedMethod method, ITestResult testResult, ITestContext context) { // TODO Auto-generated method stub } @Override public void afterInvocation(IInvokedMethod method, ITestResult testResult, ITestContext context) { KeepRun kRun = method.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(KeepRun.class); if(kRun != null){ Boolean isRun = kRun.value(); if(isRun){ //testResult.setStatus(testResult.getAttributeNames()); } } } }