问题:
这段时间在写自动化测试的代码,想借助maven的surefire插件来做,写mvn test运行单元测试代码,出现dubbo配置文件找不到,个人单独运行Junit测试没问题,dubbo的配置放在JRE的vm配置中,走debug下来发现System.getProperties()压根没有dubbo的配置,觉得自己可能使用错方法了,然后尝试在maven中使用MAVEN_OPTS配置jvm参数,发现依然是这个错误。最后只能归结与surefire插件的问题。查询文档时发现surefire插件下可以配置参数,尝试配置在此处,正常测试。
1.Maven运行配置JVM参数
Windows下添加环境变量MAVEN_OPTS的value为-Xms1024m -Xmx1024m -Xss1m
Linux下可修改.profile或者.bash_profile文件,并做如下设置:
export MAVEN_OPTS=”-Xms1024m -Xmx1024m -Xss1m”
(注意:这里需要使用双引号或者单引号)
2. 为Maven fork出的新的子进程配置JVM参数(比如通过命令行mvn test运行测试用例时)
Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的,所以这里可以在surefire插件的配置中直接添加jvm参数,如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>pertest</forkMode>
<argLine>-Xms1024m -Xmx1024m -Xss1m </argLine>
</configuration>
</plugin>
注意:通过MAVEN_OPTS方式设置的JVM参数对于fork出的子进程是无效的,所以对于通过mvn test来运行测试用例,需要单独配置。
pretest: 每一个测试创建一个新进程,为每个测试创建新的JVM是单独测试的最彻底方式,但也是最慢的,不适合hudson上持续回归。
once:在一个进程中进行所有测试。once为默认设置,在Hudson上持续回归时建议使用默认设置。
always:在一个进程中并行的运行脚本,Junit4.7以上版本才可以使用,surefire的版本要在2.6以上提供这个功能,其中 threadCount:执行时,指定可分配的线程数量。只和参数parallel配合使用有效。默认:5。