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

Allure报告中无法查看@Step注解方法内日志语句的问题咨询

解决Allure报告中@Step方法内日志不显示的问题

我来帮你搞定这个问题——你遇到的是Allure默认不会自动捕获SLF4J/Log4j日志到@Step步骤中的情况,结合你的Gradle配置和测试代码,咱们一步步解决:

1. 统一Allure相关版本(避免版本冲突)

你的build.gradle里Allure插件版本是2.8.1,但allure-testng依赖是2.12.0,版本不一致可能导致兼容性问题。建议统一为同一稳定版本,比如2.24.0:

plugins {
    id 'java-library'
    id "io.qameta.allure" version "2.24.0"
}

dependencies {
    // ... 其他依赖保持不变
    implementation 'io.qameta.allure:allure-testng:2.24.0'
    // ...
}

allure {
    version = '2.24.0'
    autoconfigure = true
    aspectjweaver = true
    useTestNG {
        version = '2.24.0' // 这里也统一版本
    }
}

2. 配置Log4j让日志输出到Allure附件

Allure可以通过配置Log4j的Appender,将日志自动关联到对应的测试步骤。你需要添加一个log4j2.xml配置文件到src/test/resources目录:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <!-- Allure附件输出 -->
        <AllureAppender name="Allure">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </AllureAppender>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Allure"/>
        </Root>
    </Loggers>
</Configuration>

这个配置会把日志同时输出到控制台和Allure的测试附件中,你可以在Allure报告对应测试用例/步骤的"Attachments"模块找到日志。

3. 直接在@Step中使用Allure API记录日志(步骤内显示更直观)

如果希望日志直接显示在@Step的详情里,而不是附件,你可以使用Allure自带的API来绑定日志:
修改你的测试代码:

import io.qameta.allure.Allure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
import io.qameta.allure.Description;
import io.qameta.allure.Step;

public class SampleTestForAllureReport {
    public static Logger logger = LoggerFactory.getLogger(SampleTestForAllureReport.class);
    
    @Severity(SeverityLevel.BLOCKER)
    @Description("This is a sample test for printing welcome")
    @Test()
    public void welcomeEvent() {
        loggingSteps();
        System.out.println("WELCOME");
    }
    
    @Test()
    public void exitEvent() {
        System.out.println("EXIT");
    }
    
    @Step("logger for welcome test")
    public void loggingSteps() {
        String logMsg = "log for step1";
        logger.info(logMsg);
        // 把日志添加到当前步骤的详情中
        Allure.addAttachment("Step Log", logMsg);
        // 或者直接用Allure日志API
        Allure.log(io.qameta.allure.model.Status.PASSED, logMsg);
    }
}

这样日志会直接显示在@Step的详情区域,不用切换到附件查看。

4. 确保AspectJ织入生效

@Step是基于AOP实现的,若上述配置后仍有问题,可以强制指定测试运行时加载AspectJ代理:
在build.gradle中添加:

test {
    jvmArgs "-javaagent:${classpath.find { it.name.contains('aspectjweaver') }.absolutePath}"
}

完成以上步骤后,重新运行测试(gradle clean test allureReport),就能在Allure报告里看到@Step方法的日志内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:52:59