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

Java Cucumber测试中Maven随机端口获取为null的问题咨询

问题解决:让Cucumber测试获取build-helper分配的随机端口

是的,你需要在surefire插件中额外配置,把build-helper生成的端口属性传递给测试JVM的系统属性,否则Cucumber步骤里拿不到对应值。

问题原因

build-helper-maven-plugin的reserve-network-port目标生成的是Maven构建属性(仅在Maven构建生命周期内可见),并不会自动成为测试JVM的系统属性,所以你的测试代码通过System.getProperty()获取时会返回null。

解决方案

修改maven-surefire-plugin的配置,在systemPropertyVariables节点中添加这两个端口属性,直接引用Maven生成的变量:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <executions>
        <execution>
            <id>cucumber-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <systemPropertyVariables>
                    <log.dir>${project.build.directory}/logs</log.dir>
                    <!-- 添加这两行,把Maven属性映射为系统属性 -->
                    <kafka.port>${kafka.port}</kafka.port>
                    <service.port>${service.port}</service.port>
                </systemPropertyVariables>
                <includes>
                    <include>**/*Test.java</include>
                    <include>**/*Steps.java</include>
                    <excludes>**/*cucumber.RunCucumberIT.java</excludes>
                </includes>
                <testFailureIgnore>false</testFailureIgnore>
            </configuration>
        </execution>
    </executions>
</plugin>

原理说明

通过上述配置,surefire插件在启动测试JVM时,会把Maven中已生成的kafka.port和service.port属性值,注入为测试环境的系统属性,这样你的Cucumber步骤代码System.getProperty("service.port")就能正确获取到随机分配的端口值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:23:12