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>
验证步骤
- 执行
mvn clean test,检查target/allure-results目录是否生成 - 执行
mvn allure:serve查看生成的Allure报告
内容的提问来源于stack exchange,提问作者Gerantarry
相关产品推荐
相关产品推荐

