TestNG+Cucumber环境下Allure报告未正常展示Cucumber步骤
问题
我使用以下工具进行API测试:
- TestNG
- Cucumber 7.9.0
- Allure Report
- Rest Assured
测试通过TestNG套件执行,执行完成后用Maven命令mvn allure:report生成Allure报告,但报告未展示Cucumber步骤,当前报告仅显示TestNG测试类,预期要展示Feature文件里的Scenario和步骤。
相关代码示例:
测试类代码
@Test @CucumberOptions (features="src/main/java/com/abc/tests/caseTest/caseTest.feature" ,glue={"com.tests.caseTest"} ,plugin={"pretty", "html:target/cucumber-reports" , "html:target/cucumber-html-reports" ,"rerun:target/failed_scenarios.txt"} ) public class CaseTest extends AbstractTestNGCucumberTests { }
Pom.xml配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <rest-assured.version>5.1.1</rest-assured.version> <allure.testng.version>2.19.0</allure.testng.version> <allure.rest-assured.version>2.19.0</allure.rest-assured.version> <jackson.version>2.12.3</jackson.version> <json.version>20210307</json.version> <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <aspectj.version>1.9.7</aspectj.version> <assertj-core.version>2.23.1</assertj-core.version> <elasticsearch-client.version>7.17.0</elasticsearch-client.version> <maven-surefire-plugin-version>3.0.0-M5</maven-surefire-plugin-version> <cucumber.version>7.9.0</cucumber.version> <cucumber-testng.version>7.9.0</cucumber-testng.version> <allure-cucumber-jvm.version>2.20.0</allure-cucumber-jvm.version> </properties> <dependencies> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>${rest-assured.version}</version> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>${assertj-core.version}</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-rest-assured</artifactId> <version>${allure.rest-assured.version}</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.github.automatedowl</groupId> <artifactId>allure-environment-writer</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>${cucumber.version}</version> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-testng</artifactId> <version>${cucumber-testng.version}</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-cucumber-jvm</artifactId> <version>${allure-cucumber-jvm.version}</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-testng</artifactId> <version>${allure.testng.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.compiler.plugin.version}</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <groupId>io.qameta.allure</groupId> <artifactId>allure-maven</artifactId> <configuration> <buildDirectory>${project.basedir}</buildDirectory> </configuration> <version>2.10.0</version> </plugin> <plugin> <!-- This plugin is very important for Allure attachments and steps --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin-version}</version> <configuration> <suiteXmlFiles> <suiteXmlFile>TestNG.xml</suiteXmlFile> </suiteXmlFiles> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" -Dcucumber.options="--plugin io.qameta.allure.cucumber4jvm.AllureCucumber4Jvm" </argLine> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
Feature文件代码
Feature: Case creation update and pemissions Scenario: create new case from Search Given User get list of ecomms When User create case using 3 ecomms from the list Then Response body should be valid with response code 200 And Case should include 3 ecomms taken from search api
解决方案
问题根源是Cucumber版本与Allure Cucumber插件版本不匹配,以及配置错误导致Allure无法捕获Cucumber步骤。按以下步骤修改:
1. 替换Allure Cucumber依赖
你的Cucumber版本是7.9.0,需要使用对应Cucumber 7的Allure插件,替换原有的allure-cucumber-jvm依赖:
<!-- 移除旧的依赖 --> <!-- <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-cucumber-jvm</artifactId> <version>${allure-cucumber-jvm.version}</version> </dependency> --> <!-- 添加Cucumber 7对应的Allure依赖 --> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-cucumber7-jvm</artifactId> <version>2.20.0</version> <!-- 与原allure-cucumber-jvm版本保持一致 --> </dependency>
同时更新properties里的变量:
<properties> <!-- 替换原有allure-cucumber-jvm.version --> <allure-cucumber7-jvm.version>2.20.0</allure-cucumber7-jvm.version> </properties>
2. 修正Surefire插件的Cucumber插件配置
原配置中使用的是Cucumber 4的Allure插件io.qameta.allure.cucumber4jvm.AllureCucumber4Jvm,需要替换为Cucumber 7的插件路径:
修改surefire插件的argLine部分:
<argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" -Dcucumber.options="--plugin io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm" </argLine>
3. 在@CucumberOptions中添加Allure插件(可选但推荐)
直接在测试类的@CucumberOptions里配置Allure插件,避免依赖命令行参数:
@Test @CucumberOptions (features="src/main/java/com/abc/tests/caseTest/caseTest.feature" ,glue={"com.tests.caseTest"} ,plugin={"pretty", "html:target/cucumber-reports" , "html:target/cucumber-html-reports" ,"rerun:target/failed_scenarios.txt" , "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"} // 添加这一行 ) public class CaseTest extends AbstractTestNGCucumberTests { }
4. 清理并重新执行测试
执行以下命令清理旧报告并重新运行:
mvn clean test allure:report
完成后打开Allure报告,就能看到Feature、Scenario以及对应的步骤了。
内容的提问来源于stack exchange,提问作者Ali Taha
相关产品推荐
相关产品推荐

