如何将系统属性从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
相关产品推荐
相关产品推荐

