今天我一直在努力解决这个问题。想知道是否有人可以提供帮助
目标 尝试减少JUnit执行所花费的时间。我正在尝试分出5个VM,每个VM都提供一个容器,用于执行的测试子集。我相信我的机器上有足够的内存(每个5 VM * 3G = 15GB)来处理负载。
我正在尝试使用forkmode =" perBatch"模式。但是,使用下面的ANT文件,我无法看到5个VM被分叉。 JUnit测试也不是并行执行的。
我哪里错了?
<target name="runTestSuite" depends="JunitTestsCompile">
<junit printsummary="yes" haltonfailure="no" failureProperty="runTestSuite.failure" showoutput="false" fork="true" forkmode="perBatch">
<jvmarg value="-XX:MaxPermSize=3072M"/>
<jvmarg value="-Xms3072M"/>
<jvmarg value="-XX:+UseParallelGC"/>
<jvmarg value="-server"/>
<jvmarg value="-Xmx3072M"/>
<jvmarg value="-XX:-UseSplitVerifier"/>
<jvmarg value="-Djavax.xml.parsers.XmlDocumentParserFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl" />
<formatter type="xml" />
<classpath location="${instrumented.dir}" />
<classpath location="${classes.dir}" />
<classpath>
<path refid="junit.classpath"/>
<pathelement location="${build.dir}"/>
<pathelement location="${src.main.dir}/project/properties"/>
<pathelement location="${src.main.dir}/build/svr/cls"/>
<pathelement location="${src.main.dir}"/>
<pathelement location="${src.aspects.dir}"/>
<pathelement location="${lib.dir}/junit.jar"/>
</classpath>
<!-- Execute all tests -->
<batchtest todir="${junit.log.dir}">
<fileset dir="${build.dir}" >
<include name="my/org/whatever/something/abc/myTest.class"/>
</fileset>
</batchtest>
<batchtest todir="${junit.log.dir}">
<fileset dir="${build.dir}" >
<include name="my/org/whatever/something/abc/myTest2.class"/>
</fileset>
</batchtest>
<batchtest todir="${junit.log.dir}">
<fileset dir="${build.dir}" >
<include name="my/org/whatever/something/abc/myTest3.class"/>
</fileset>
</batchtest>
<batchtest todir="${junit.log.dir}">
<fileset dir="${build.dir}" >
<include name="my/org/whatever/something/abc/myTest4.class"/>
</fileset>
</batchtest>
<batchtest todir="${junit.log.dir}">
<fileset dir="${build.dir}" >
<include name="my/org/whatever/something/abc/myTest5.class"/>
</fileset>
</batchtest>
答案 0 :(得分:1)
在花了一些时间之后,我发现JVM fork只是分叉出一个新的JVM,不一定是并行的。如果我们想要并行Junits,我们最好使用ANT并行结构。