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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:34