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

如何将系统属性从Gradle传递到JVM?测试代码获取属性为空

问题解决:Cucumber测试中无法获取SystemProperty参数

问题原因

  • 你配置的tasks.withType(Test)是给Gradle内置的Test任务设置系统属性,但实际运行的自定义uitests任务是通过javaexec直接启动Cucumber CLI,和内置Test任务完全独立,所以之前的系统属性配置不会作用到javaexec启动的进程上。
  • 行(1)能打印出正确值,是因为这段代码在Gradle构建脚本的配置阶段执行,读取的是Gradle进程自身的系统属性(即你通过-Dbrowser=chrome传入的),但该属性并没有传递给javaexec启动的Cucumber测试进程。

解决方案

修改uitests任务中的javaexec块,添加系统属性传递逻辑:

task uitests() {
    dependsOn assemble, testClasses
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            // 新增该行,将browser属性传递给Cucumber进程
            systemProperty 'browser', System.getProperty('browser')
            args = [
                    '--plugin', 'pretty',
                    '--plugin', 'html:target/cucumber-report.html',
                    '--glue', 'myproject.steps',
                    'src/test/resources/scenarios']
        }
    }
}

修改后,javaexec会把Gradle进程接收到的browser属性传递给新启动的Cucumber测试进程,此时你的测试代码中调用System.getProperty("browser")就能正确获取到chrome的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:09:23