魅力报告。使用AfterMethod将屏幕截图添加到错误的报告中

Boh*_*anN 2 testng automated-tests allure

在我的项目中,我有maven和TestNG工具。我正在尝试将屏幕截图添加到“魅力”报告中。如果我直接从测试中调用带有“ @Attachment”注释的方法,则一切正常。

但是,如果我在“ @AfterMethod”部分中将其称为屏幕截图,则会将其添加到错误的报告中并混在一起。

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

我已经在这里看到了这个问题: 魅力框架:TestNG适配器错误地将@AfterMethod放置在报告中

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

调用“ @Attachment”方法的正确方法是什么?为了避免此问题,我必须使用什么适配器?也许有人可以为我提供一个示例,该示例仅在测试失败的情况下使用ITestListener制作屏幕截图?

Ill*_*lia 5

我对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);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您还不能使用testResult.isSuccess(),因为测试方法的结果执行未知,并且此时的状态为“ RUNNING”

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