Fork JUNIT执行

时间:2016-05-11 02:15:17

标签: java junit ant fork

今天我一直在努力解决这个问题。想知道是否有人可以提供帮助

目标 尝试减少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>

1 个答案:

答案 0 :(得分:1)

在花了一些时间之后,我发现JVM fork只是分叉出一个新的JVM,不一定是并行的。如果我们想要并行Junits,我们最好使用ANT并行结构。