检测testng @AfterMethod中的测试失败

时间:2013-09-03 17:18:06

标签: java testng

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

如果当前测试失败,如何在使用@AfterMethod注释的方法中检测到?

4 个答案:

答案 0 :(得分:28)

如果使用@AfterMethod注释的方法具有ITestResult参数,则TestNG将自动注入测试结果。 (来源:TestNG documentation, section 5.18.1

这应该做的工作:

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

答案 1 :(得分:7)

一个不错的选择是使用ITestListener而不是@AfterMethod中处理失败报告。测试方法运行后,但在onTestFailed()方法运行之前,将调用测试监听器的@AfterMethod函数。 (请注意,侦听器中没有onTestFinished()函数; @AfterMethod完成了该角色。)

为了让自己更轻松,您可以使用TestListenerAdapter,这将实现您自己并非@Override自己的所有其他功能。

你最终得到的是:

public class MyTestListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result){
    yourTakeScreenShotFunctionHere();
   }
}

然后使用

将监听器附加到测试类
@Listeners({MyTestListener.class})
public class MyTestClass(){etc}

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

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

答案 2 :(得分:2)

以前答案的变体:

由于您已经知道只有在出现故障时才能截取屏幕截图,因此您可以使用onTestFailure()中的TestListenerAdapter方法:

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 })

(最好是在基类中,所有测试都从中继承)

答案 3 :(得分:1)

如果您可以实现一个监听器IInvokedMethodListener并实现afterInvocation()方法,那将是件好事。这使您可以访问方法的结果对象。你可以把你的代码放在这里截图。