我有大量的junits并且运行所有这些都需要很长时间。但CPU和内存利用率仅为30%左右。我不能在同一个jvm中的并行线程中运行junits,因为它们不是线程安全的,并且无法修复它们。 据我所知junit ant任务启动单独的jvm来运行junits。 是否可以从ant运行几个jvms用于junits?我假设这样的解决方案可以显着缩短执行时间。
目前我使用这样的代码用ant运行它们:
<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>
答案 0 :(得分: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>
编辑:更新了kmode设置