检测testng @AfterMethod中的测试失败
如果测试失败,我想截取屏幕截图。 我想将这个逻辑添加到用@AfterMethod
注释的方法,而不是用try / catch块包装所有测试方法。
如果当前测试失败,如何在使用@AfterMethod
注释的方法中检测?
如果使用@AfterMethod
注释的方法具有ITestResult
参数,则TestNG将自动注入测试结果。 (来源: TestNG文档,第5.18.1节 )
这应该做的工作:
@AfterMethod public void tearDown(ITestResult result) { if (result.getStatus() == ITestResult.FAILURE) { //your screenshooting code goes here } }
一个好的选择是使用ITestListener
而不是在@AfterMethod
中处理失败报告。 测试监听器的onTestFailed()
函数将在测试方法运行后调用,但在@AfterMethod
方法运行之前。 (请注意,侦听器中没有onTestFinished()
函数;该角色由@AfterMethod
完成。)
为了使自己更容易,您可以使用TestListenerAdapter
,它将实现您自己没有特别@Override
所有其他function。
你最终得到的是:
public class MyTestListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult result){ yourTakeScreenShotFunctionHere(); } }
然后,您将侦听器附加到测试类
@Listeners({MyTestListener.class}) public class MyTestClass(){etc}
ITestResult
是对测试类对象的引用,因此您可以使用reflection来从中获取数据,例如Selenium WebDriver实例等。
您可以根据需要拥有尽可能多的不同侦听器,以执行各种操作,例如清理或保留错误日志,截取屏幕截图,触发其他报告function,发送电子邮件或任何您想要的内容。
与以前的答案不同:
由于您已经知道只想在发生故障时才截取屏幕截图,因此可以使用TestListenerAdapter
onTestFailure()
方法:
import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class LFailure extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { System.out.println("Failure"); // your screenshot code } }
PS:不要忘记将LFailure
添加到你的testng.xml中,或者直接在代码中添加如下:
@Listeners({ LFailure.class })
(最好是在基类中,所有测试都从中inheritance)
如果您可以实现一个侦听器IInvokedMethodListener并实现afterInvocation()
方法,那将是一件好事。 这使您可以访问方法的结果对象。 你可以把代码放在这里截图。