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

如何将Gradle命令行参数传递至Cucumber的步骤定义中?

问题描述

我想在Cucumber的步骤定义文件中获取Gradle传入的命令行参数,类似Maven里执行mvn test -Dbrowser=firefox的方式,然后在Java步骤定义里通过以下代码获取参数:

String browser = System.getProperty("browser", "chrome");

我的build.gradle内容如下:

plugins {
    id 'application'
}

repositories {
    mavenCentral()
}

application {
    mainClass = 'ts.api.automation.App'
}

configurations {
    cucumberRuntime {
        extendsFrom testImplementation
    }
}

task cucumber() {
    dependsOn assemble, testClasses
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--glue', 'smartconnect.steps.grab', 'src/test/java/smartconnect/features/grab']
        }
    }
}

task runTests(type: JavaExec, dependsOn: 'classes') {
    main = 'org.testng.TestNG'
    classpath = files("./src/test/resources",
            project.sourceSets.main.runtimeClasspath,
            project.sourceSets.test.runtimeClasspath)
    args = ["-parallel",  "methods", "-threadcount", "1", "-d", "./build/test-output", "./src/test/resources/TestNG.xml"]
}

请问该如何通过Gradle从命令行获取参数并传递到我的步骤定义文件中?我也可以在基础Java类中访问这些参数。

解决方案

要让Gradle把命令行传入的系统属性传递给Java代码,需要在对应的Gradle任务中配置systemProperties,实现命令行参数的透传。

1. 配置Cucumber任务

修改cucumber任务内的javaexec块,添加系统属性透传配置,这样就能把命令行传入的所有系统属性传递给Cucumber的Java进程:

task cucumber() {
    dependsOn assemble, testClasses
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--glue', 'smartconnect.steps.grab', 'src/test/java/smartconnect/features/grab']
            // 透传所有命令行传入的系统属性
            systemProperties = System.getProperties()
            // 若只需传递指定属性,比如仅传递browser:
            // systemProperties['browser'] = System.getProperty('browser', 'chrome')
        }
    }
}

执行Cucumber任务时,通过-D参数传入属性:

./gradlew cucumber -Dbrowser=firefox

2. 配置TestNG的runTests任务

如果你的TestNG测试也需要获取这些参数,同样修改runTests任务,添加系统属性透传:

task runTests(type: JavaExec, dependsOn: 'classes') {
    main = 'org.testng.TestNG'
    classpath = files("./src/test/resources",
            project.sourceSets.main.runtimeClasspath,
            project.sourceSets.test.runtimeClasspath)
    args = ["-parallel",  "methods", "-threadcount", "1", "-d", "./build/test-output", "./src/test/resources/TestNG.xml"]
    // 透传系统属性
    systemProperties = System.getProperties()
}

执行TestNG任务时同样用-D传入参数:

./gradlew runTests -Dbrowser=firefox

3. 在Java代码中获取参数

不管是Cucumber步骤定义还是基础Java类,都可以用你原本的代码获取参数:

String browser = System.getProperty("browser", "chrome");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34