检测testng @AfterMethod中的测试失败

Ing*_*gel 17 java testng

如果测试失败,我想截取屏幕截图.我想将这个逻辑添加到带注释的方法中,而不是用try/catch块包装所有测试方法@AfterMethod.

如何检测@AfterMethod当前测试失败的方法?

Jac*_*ekM 28

如果注释的方法@AfterMethodITestResult参数,那么TestNG将自动注入测试结果.(来源:TestNG文档,第5.18.1节)

这应该做的工作:

@AfterMethod
public void tearDown(ITestResult result) {
   if (result.getStatus() == ITestResult.FAILURE) {
      //your screenshooting code goes here
   }        
}
Run Code Online (Sandbox Code Playgroud)


小智 7

一个好的选择是使用ITestListener而不是处理故障报告@AfterMethod.onTestFailed()测试方法运行后,但在@AfterMethod方法运行之前,将调用测试侦听器的函数.(请注意,onTestFinished()侦听器中没有函数;该角色由以下内容实现@AfterMethod.)

为了使自己更容易,你可以使用a TestListenerAdapter,它将实现你@Override自己不具备的所有其他功能.

你最终得到的是:

public class MyTestListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result){
    yourTakeScreenShotFunctionHere();
   }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将侦听器附加到测试类

@Listeners({MyTestListener.class})
public class MyTestClass(){etc}
Run Code Online (Sandbox Code Playgroud)

ITestResult是对测试类对象的引用,因此您可以使用反射从中获取数据,例如Selenium WebDriver实例等.

您可以根据需要拥有尽可能多的不同侦听器,以执行各种操作,例如清理或保留错误日志,截取屏幕截图,触发其他报告功能,发送电子邮件或任何您想要的内容.