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

使用Cucumber标签通过Gradle运行测试时出错

问题描述

我在使用Cucumber和JUnit标签运行测试时,执行以下命令均出现错误:

gradle test -DCucumber.options="--tags @LOGIN" 
gradle test -DCucumber.filter.tags="@LOGIN"

报错情况:

  • 使用gradle test -DCucumber.options="--tags @LOGIN"时,出现配置兼容性错误
  • 使用gradle test -DCucumber.filter.tags="@LOGIN"时,出现标签参数未正确传递导致的过滤失效问题

当前Gradle配置:

plugins{
    id "java"
    id "eclipse"
    id "idea"
    id "net.serenity-bdd.serenity-gradle-plugin" version "4.0.15"
}

group "org.example"
version "1.0-SNAPSHOT"

repositories { mavenCentral() }

sourceCompatibility = 16
targetCompatibility = 16
	ext {
    serenity_version = "4.0.15"
    junit_platform_launcher_version =" 1.10.0"
    cucumber_junit_platform_engine_version = "7.14.0"
    junit_platform_suite_version = "1.10.0"
    junit_jupiter_engine_version = "5.9.3"
    junit_vintage_engine_version = "5.9.3"
    logback_classic_version = "1.2.10"
    assertj_core_version = "3.23.1"
    slf4j_version = "2.0.5"
}
dependencies {
    implementation(
            "net.serenity-bdd:serenity-core:${serenity_version}",
            "net.serenity-bdd:serenity-cucumber:${serenity_version}",
            "net.serenity-bdd:serenity-screenplay:${serenity_version}",
            "net.serenity-bdd:serenity-screenplay-webdriver:${serenity_version}",
            "net.serenity-bdd:serenity-ensure:${serenity_version}",
            "io.cucumber:cucumber-junit-platform-engine:${cucumber_junit_platform_engine_version}",
            "org.slf4j:slf4j-log4j12:${slf4j_version}",
            "ch.qos.logback:logback-classic:${logback_classic_version}",
            "org.assertj:assertj-core:${assertj_core_version}"
    )

    testCompileOnly(
            "org.junit.platform:junit-platform-suite:${junit_platform_suite_version}",
            "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_engine_version}",
            "org.junit.vintage:junit-vintage-engine:${junit_vintage_engine_version}",
            "org.junit.platform:junit-platform-launcher:${junit_platform_launcher_version}"
    )
}

test {
    useJUnitPlatform()
    systemProperty "cucumber.filter.tags", System.getProperty("cucumber.filter.tags")
    testLogging { showStandardStreams = true }
    finalizedBy(aggregate)
}

serenity { reports = ["single-page-html"] }

gradle.startParameter.continueOnFailure = true
test.finalizedBy aggregate

使用版本:

  • Gradle 8.2.1
  • Java 16
解决方案

1. 修正命令行参数大小写

Gradle配置中读取的是小写的cucumber.filter.tags属性,但命令行用了大写Cucumber,导致参数无法传递。执行命令改为:

gradle test -Dcucumber.filter.tags="@LOGIN"

2. 弃用过时参数

Cucumber.options是Cucumber 6及更早版本的参数,Cucumber 7+已改用cucumber.filter.tags,且与Serenity 4.x存在兼容性问题,直接弃用该命令。

3. 调整依赖配置

  • 将testCompileOnly下的JUnit相关依赖改为testImplementation,运行时需要这些引擎类才能正常识别测试:
testImplementation(
        "org.junit.platform:junit-platform-suite:${junit_platform_suite_version}",
        "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_engine_version}",
        "org.junit.vintage:junit-vintage-engine:${junit_vintage_engine_version}",
        "org.junit.platform:junit-platform-launcher:${junit_platform_launcher_version}"
)
  • 删除冲突的日志依赖:slf4j-log4j12与logback-classic会引发日志框架冲突,移除org.slf4j:slf4j-log4j12:${slf4j_version}。

4. 检查测试启动类配置

确保测试启动类使用正确的JUnit Suite注解,示例:

import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;

@Suite
@IncludeEngines("cucumber")
@SelectPackages("你的测试代码包路径")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "io.cucumber.core.plugin.SerenityReporterParallel, pretty")
public class CucumberTestSuite {}

5. 验证执行

修改后执行以下命令:

gradle clean test -Dcucumber.filter.tags="@LOGIN"

若仍有问题,检查:

  • Feature文件中确实存在@LOGIN标签
  • Feature文件路径与测试类包路径对应(默认需放在src/test/resources下的同名包路径中)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:13:19