2012-12-04 61 views
1

我有大量的junits,運行它們都需要很長時間。但CPU和內存利用率只有30%左右。我不能在同一個jvm中的並行線程中運行junit,因爲它們不是線程安全的並且不可能修復它們。 據我所知junit螞蟻任務開始分開jvm來運行junit。 是否有可能從螞蟻運行幾個jvms?我認爲這樣的解決方案可以顯着縮短執行時間在螞蟻的兩個jvms中運行junit

目前,我在螞蟻使用這樣的代碼運行它們:

<for param="bundle" keepgoing="true"> 
<path> 
    <dirset dir="${testdir}/plugins"> 
     <depth max="0"/> 
    </dirset> 
</path> 
<sequential> 

    <echo message="Running tests in bundle @{bundle}"/> 
    <junit outputtoformatters="no" printsummary="yes" failureproperty="test.failed" maxmemory="512m" fork="yes" forkmode="once"> 
     <classpath> 
      <path refid="tests.classpath" /> 
     </classpath> 

     <formatter type="xml" /> 
     <batchtest todir="${junit.result.dir}"> 
      <fileset dir="@{bundle}/src"> 
       <patternset refid="test.sources" /> 
      </fileset> 
     </batchtest> 
    </junit> 
</sequential> 

+2

不[本博客文章(http://blog.code-cop.org/2009/09/parallel- junit.html)描述你在做什麼? –

回答

1

看看這個 http://ant.apache.org/manual/Tasks/parallel.html

主要用例是運行外部程序, 作爲應用服務器以及 的JUnit或TestNG測試套件。任何試圖同時運行大型Ant任務序列的人,例如javadoc和javac,都會隱式地執行 的任務,即識別並修復它們運行的​​所有並行性錯誤任務,即 。

它有這個例子

<parallel> 
    <wlrun ... > 
    <sequential> 
    <sleep seconds="30"/> 
    <junit fork="true" forkmode="perTest" ... > 
    <wlstop/> 
    </sequential> 
</parallel> 

編輯:更新forkmode設置

+0

該文檔說並行性是使用線程實現的,對吧?這與請求者的要求不矛盾嗎? –

+0

線程用於啓動JUNIT Ant任務,後者又配置爲啓動單獨的JVM實例。這就是fork =「true」的用途。 – 1054211