倾城报道。使用AfterMethod将屏幕截图添加到错误的报告中

时间:2015-03-17 19:36:55

标签: automated-tests testng allure

在我的项目中,我有maven和TestNG工具。 我正在尝试为Allure报告添加屏幕截图。 如果我直接从我的测试中调用带有“@Attachment”注释的方法,一切都还可以。

但如果我在“@AfterMethod”部分中调用它,屏幕截图会被添加到错误的报告中并且会混淆。

在这两种情况下,屏幕截图都会生成并正确保存在磁盘上。

我已经在这里看到了这个问题:Allure Framework: TestNG adapter incorrectly places @AfterMethod in report

我想,我的困难可能是因为TestNG适配器。

调用“@Attachment”方法的正确方法是什么? 我必须使用什么适配器才能避免此问题? 也许有人可以向我提供使用ITestListener仅在测试失败时制作屏幕截图的示例?

2 个答案:

答案 0 :(得分:4)

我与Allure + TestNG有类似问题,并通过我的BaseTest类实现 IHookable 界面解决了这个问题。实现它的run()方法你只需告诉TestNG像往常一样运行测试但是捕获异常以便在任何情况下截取屏幕截图

Javadoc说:

  将调用

run()方法而不是找到每个@Test方法。然后在调用IHookCallBack参数的callBack()方法时执行测试方法的调用。

代码段如下:

public class BaseTest implements IHookable {

    @Override
    public void run(IHookCallBack callBack, ITestResult testResult) {

        callBack.runTestMethod(testResult);
        if (testResult.getThrowable() != null) {
            try {
                takeScreenShot(testResult.getMethod().getMethodName());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Attachment(value = "Failure in method {0}", type = "image/png")
    private byte[] takeScreenShot(String methodName) throws IOException {
        return getWebDriver().getScreenshotAs(OutputType.BYTES);
    }
}

注意,你还不能使用testResult.isSuccess(),因为测试方法结果执行尚未知,而且它已经" RUNNING"当时的状态

这将在捕获异常后立即截取屏幕截图,并将其放入合适报告中的正确测试用例

答案 1 :(得分:1)

我也遇到了与Maven / TestNG项目完全相同的问题,其中@AfterMethod无法成功附加屏幕捕获。来自Illia的上述解决方案对我来说非常有效。谢谢Illia!