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

Spring Boot升级适配Junit5后Allure Jenkins报告显示NaN/UNKNOWN

Allure报告显示NaN%/UNKNOWN问题排查与修复

问题背景

将Spring Boot版本从2.1.3.RELEASE升级至2.6.6,同步完成JUnit4到JUnit5的迁移,测试代码结构和导入已适配JUnit5且功能运行正常,但Jenkins中生成的Allure报告全部显示为NaN%或UNKNOWN。已按照Allure官方文档调整pom.xml配置,但问题未解决,进一步发现data/test-cases目录不存在。

当前pom.xml关键配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version>
    <relativePath/>
</parent>

<artifactId>user-service</artifactId>
<packaging>jar</packaging>

<properties>
    <aspectj.version>1.9.2</aspectj.version>
</properties>

<dependencies>
    <!-- 其他依赖省略 -->
    <dependency>
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-junit5</artifactId>
        <version>2.17.3</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>io.qameta.allure.junit5.AllureJunit5</value>
                    </property>
                </properties>
                <argLine>
                    -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                </argLine>
                <systemProperties>
                    <property>
                        <name>junit.jupiter.extensions.autodetection.enabled</name>
                        <value>true</value>
                    </property>
                    <property>
                        <name>allure.results.directory</name>
                        <value>${project.build.directory}/allure-results</value>
                    </property>
                </systemProperties>
            </configuration>
        </plugin>
        <plugin>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-maven</artifactId>
            <version>2.11.2</version>
            <configuration>
                <reportVersion>2.14.0</reportVersion>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

Jenkins Allure插件版本为2.30.2。

核心原因分析

  1. Allure组件版本不兼容:

    • allure-maven插件版本2.11.2过于老旧,与allure-junit5 2.17.3、Jenkins Allure插件2.30.2版本差距过大,导致结果文件解析失败,无法生成有效报告。
    • reportVersion配置为2.14.0,与allure-junit5 2.17.3版本不匹配,进一步加剧兼容性问题。
  2. Surefire插件配置冗余且版本过低:

    • Spring Boot 2.6.x默认依赖的Surefire版本高于2.22.0,低版本插件可能对JUnit5的支持存在缺陷,导致Allure监听器无法正常捕获测试结果。
    • JUnit5的Allure集成无需手动配置listener,通过扩展自动检测即可,冗余配置可能引发冲突。
  3. AspectJ版本兼容性问题:

    • AspectJ 1.9.2与Spring Boot 2.6.x的依赖版本不匹配,可能导致JavaAgent无法正常工作,影响Allure的切面逻辑执行,无法生成测试结果文件(即data/test-cases目录缺失的原因)。

修复步骤

1. 统一Allure组件版本

将allure-maven插件版本升级至与allure-junit5匹配的版本(建议使用2.17.3),同时移除reportVersion配置(插件会自动适配对应版本的报告生成器):

<plugin>
    <groupId>io.qameta.allure</groupId>
    <artifactId>allure-maven</artifactId>
    <version>2.17.3</version>
</plugin>

2. 优化Surefire插件配置

  • 移除手动配置的listener属性,JUnit5会自动识别Allure扩展;
  • 升级Surefire插件至Spring Boot 2.6.x兼容的版本(或直接继承Spring Boot父项目的默认版本);
  • 简化配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <!-- 可省略版本,Spring Boot父项目已提供兼容版本 -->
    <configuration>
        <testFailureIgnore>false</testFailureIgnore>
        <argLine>
            -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
        </argLine>
        <systemProperties>
            <property>
                <name>allure.results.directory</name>
                <value>${project.build.directory}/allure-results</value>
            </property>
        </systemProperties>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
    </dependencies>
</plugin>

3. 升级AspectJ版本

将AspectJ版本升级至与Spring Boot 2.6.x兼容的版本(如1.9.9.1):

<properties>
    <aspectj.version>1.9.9.1</aspectj.version>
</properties>

4. 验证Jenkins配置

确保Jenkins的Allure报告构建步骤中,结果目录配置为${project.build.directory}/allure-results(与pom.xml中的配置一致),并且Jenkins节点有权限读取该目录下的文件。

验证方法

  1. 本地执行mvn clean test allure:report,检查target/allure-results目录是否生成.json格式的测试结果文件;
  2. 打开本地生成的Allure报告,确认测试用例是否正常显示;
  3. 推送修改后的代码至Jenkins,重新构建并查看报告是否恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:05:25