如何在本地运行测试时向pom传递Jenkins参数,解决空指针异常问题
问题解决方案
你遇到的空指针是因为${Dfilename}是Maven读取JVM系统属性的占位符,本地运行时没有正确传入该参数,导致占位符没有被正确替换,取值为null。
具体解决方法
- 方式1:Maven命令行运行时传参
本地执行测试命令时直接添加系统参数即可,和Jenkins的执行逻辑完全一致:mvn test -Dfilename=test - 方式2:在pom中配置默认值
如果需要固定硬编码默认值,直接在pom的properties节点中定义即可,注意变量名不需要加前缀D,D是JVM传递系统参数的标识,不属于变量名本身:
同时将pom中原<properties> <!-- 未外部传参时默认使用test作为值 --> <filename>test</filename> </properties>${Dfilename}的引用修正为${filename}即可。 - 方式3:IDE直接运行测试时配置参数
如果不通过Maven命令,直接在IDE中启动测试用例,需要在对应运行配置的VM options栏中添加参数:-Dfilename=test
排查验证方法
可以在测试代码入口处添加打印语句,确认参数是否正常传递:System.out.println("获取到的filename值:" + System.getProperty("filename"));
如果打印结果仍然为null,检查Maven Surefire插件的配置是否开启了系统属性传递:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.2</version> <configuration> <systemPropertyVariables> <!-- 将Maven变量传递给测试代码的系统属性 --> <filename>${filename}</filename> </systemPropertyVariables> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Sam Maul
相关产品推荐
相关产品推荐

