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

Allure插件未生成allure-results目录问题求助

Cucumber7 + JUnit5 + Allure 报告生成失败问题

我有一个基于Cucumber7和JUnit5的测试项目,在pom.xml中配置了Allure插件用于生成测试报告,但遇到以下问题:

  • Allure未自动生成allure-results目录
  • 执行时抛出错误:[ERROR] Directory C:\Users\Username\IdeaProjects\my.testing.project\target\allure-results not found.

我已在maven-surefire-plugin中添加了结果目录配置,但未生效:

<name>allure.results.directory</name>
<value>${project.build.directory}/allure-results</value>

项目完整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>

    <groupId>org.example</groupId>
    <artifactId>my.testing.project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!--versions -->
        <junit-jupiter-engine.version>5.9.1</junit-jupiter-engine.version>
        <cucumber.version>7.8.1</cucumber.version>
        <aspectj.version>1.8.10</aspectj.version>
    </properties>

    <dependencies>

        <!-- WebElement Wrapper -->
        <dependency>
            <groupId>ru.yandex.qatools.htmlelements</groupId>
            <artifactId>htmlelements-all</artifactId>
            <version>1.20.0</version>
        </dependency>

        <!--WebDriverManager 自动查找任意浏览器驱动 -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.3.1</version>
            <scope>compile</scope>
        </dependency>

        <!--断言匹配器 -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>

        <!--JUnit 测试引擎 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit-jupiter-engine.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit-jupiter-engine.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- Cucumber BDD测试 -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- 自动生成Getter和Setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

        <!--Allure Cucumber集成 -->
        <dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-cucumber7-jvm</artifactId>
            <version>2.20.1</version>
        </dependency>

    </dependencies>

    <build>
        <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
            <plugins>

                <plugin>
                <!--测试执行管理插件 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.0</version>
                    <configuration>
                        <testFailureIgnore>false</testFailureIgnore>
                        <argLine>
                            -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                            -Dcucumber.options="--plugin io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"
                        </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>
                        <properties>
                            <configurationParameters>
                                cucumber.junit-platform.naming-strategy=long
                            </configurationParameters>
                        </properties>
                    </configuration>
                    <dependencies>
                        <!--JUnit与插件兼容依赖 -->
                        <dependency>
                            <groupId>org.junit.platform</groupId>
                            <artifactId>junit-platform-surefire-provider</artifactId>
                            <version>1.2.0</version>
                        </dependency>
                        <dependency>
                            <groupId>org.junit.jupiter</groupId>
                            <artifactId>junit-jupiter-engine</artifactId>
                            <version>${junit-jupiter-engine.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjweaver</artifactId>
                            <version>${aspectj.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <!--测试阶段报告生成插件 -->
                <plugin>
                    <groupId>io.qameta.allure</groupId>
                    <artifactId>allure-maven</artifactId>
                    <version>2.12.0</version>
                    <configuration>
                        <allureDownloadUrl>
                            https://github.com/allure-framework/allure2/releases/download/2.7.0/allure-2.7.0.zip
                        </allureDownloadUrl>
                        <reportVersion>2.7.0</reportVersion>
                    </configuration>
                </plugin>
            </plugins>
    </build>

</project>

解决方案

针对pom.xml配置问题,按以下步骤修改:

1. 清理过时依赖并更新插件版本

  • 删除maven-surefire-plugin依赖中的junit-platform-surefire-provider,Maven Surefire 3.x+已内置支持JUnit Platform,无需额外依赖
  • 将maven-surefire-plugin版本升级到3.1.2(兼容JUnit5和Cucumber7的稳定版本)
  • 更新aspectj.version到1.9.20.1,确保和Allure 2.20.1版本兼容

2. 修正Allure依赖与插件配置

  • 给allure-cucumber7-jvm添加<scope>test</scope>,该依赖仅用于测试阶段
  • 更新allure-maven插件版本到2.15.0,并将reportVersion改为2.20.1,与依赖版本保持一致

3. 调整Cucumber插件配置方式

Cucumber7推荐通过JUnit Platform配置插件,而非cucumber.options,修改maven-surefire-plugin的configurationParameters添加Allure插件:

<configurationParameters>
    cucumber.junit-platform.naming-strategy=long
    cucumber.plugin=io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm
</configurationParameters>

同时移除argLine中的-Dcucumber.options参数。

4. 确保结果目录自动生成

添加maven-antrun-plugin在测试前自动创建allure-results目录,避免找不到目录的错误:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>create-allure-results-dir</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <mkdir dir="${project.build.directory}/allure-results"/>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

修改后的关键配置片段

Properties部分:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <!--版本统一管理 -->
    <junit-jupiter-engine.version>5.9.1</junit-jupiter-engine.version>
    <cucumber.version>7.8.1</cucumber.version>
    <aspectj.version>1.9.20.1</aspectj.version>
    <allure.version>2.20.1</allure.version>
</properties>

Allure依赖:

<!--Allure Cucumber集成 -->
<dependency>
    <groupId>io.qameta.allure</groupId>
    <artifactId>allure-cucumber7-jvm</artifactId>
    <version>${allure.version}</version>
    <scope>test</scope>
</dependency>

Build插件部分:

<build>
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
    <plugins>
        <plugin>
            <!--测试执行管理插件 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <testFailureIgnore>false</testFailureIgnore>
                <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>
                <properties>
                    <configurationParameters>
                        cucumber.junit-platform.naming-strategy=long
                        cucumber.plugin=io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm
                    </configurationParameters>
                </properties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
        </plugin>

        <!-- 创建allure-results目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>create-allure-results-dir</id>
                    <phase>process-test-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <mkdir dir="${project.build.directory}/allure-results"/>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!--测试阶段报告生成插件 -->
        <plugin>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-maven</artifactId>
            <version>2.15.0</version>
            <configuration>
                <reportVersion>${allure.version}</reportVersion>
            </configuration>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

验证步骤

  1. 执行mvn clean test,检查target/allure-results目录是否生成
  2. 执行mvn allure:serve查看生成的Allure报告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:45:34