测试失败时截图无法附加到Allure结果及报告问题求助
解决Allure测试失败时截图无法附加到报告的问题
核心问题
你当前的代码中,虽然调用了带@Attachment注解的saveScreenshotPNG方法,但没有将方法返回的截图字节流关联到当前测试的上下文,导致Allure无法捕获并保存这个附件。
修复方案
修改onTestFailure方法,直接使用Allure的API将截图附加到测试结果中,替代单纯调用注解方法的方式:
import io.qameta.allure.Allure; import java.io.ByteArrayInputStream; @Override public void onTestFailure(ITestResult iTestResult) { System.out.println("Test Method '" + getTestMethodName(iTestResult) + "' is Failed"); WebDriver driver = BaseTest.getDriver(); if (driver != null) { System.out.println("Screenshot has captured for the Test Method '" + getTestMethodName(iTestResult) + "'"); // 手动将截图字节流添加为Allure附件 Allure.addAttachment( "Page screenshot", "image/png", new ByteArrayInputStream(saveScreenshotPNG(driver)), ".png" ); } }
额外检查项
- 依赖确认:确保项目中引入了正确的Allure TestNG依赖(版本建议使用2.20+):
<!-- Maven示例 --> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-testng</artifactId> <version>2.21.0</version> <scope>test</scope> </dependency> - 监听器注册:确认监听器已正确注册:
- 方式1:在
testng.xml中添加:<listeners> <listener class-name="your.package.name.AllureReportListener"/> </listeners> - 方式2:在测试基类/测试类上添加注解:
@Listeners(AllureReportListener.class)
- 方式1:在
- Driver实例验证:确保
BaseTest.getDriver()返回的是当前测试线程对应的有效WebDriver实例,避免多线程测试下出现Driver为null的情况。 - 报告生成命令:确认生成报告的命令正确,比如:
# 启动本地服务查看报告 allure serve target/allure-results # 生成静态报告 allure generate target/allure-results -o allure-report
内容的提问来源于stack exchange,提问作者Olga S
相关产品推荐
相关产品推荐

