You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试失败时截图无法附加到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)
  • Driver实例验证:确保BaseTest.getDriver()返回的是当前测试线程对应的有效WebDriver实例,避免多线程测试下出现Driver为null的情况。
  • 报告生成命令:确认生成报告的命令正确,比如:
    # 启动本地服务查看报告
    allure serve target/allure-results
    # 生成静态报告
    allure generate target/allure-results -o allure-report
    

内容的提问来源于stack exchange,提问作者Olga S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:35:20