2

我有大量的junit,运行它们需要很长时间。但是CPU和内存利用率只有30%左右。我不能在同一个 jvm 的并行线程中运行 junit,因为它们不是线程安全的,而且不可能修复它们。据我所知,junit ant 任务启动单独的 jvm 来运行 junit。是否可以从ant为junit运行几个jvm?我认为这样的解决方案可以显着减少执行时间。

目前我使用这样的代码用 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>

4

1 回答 1

2

看看这个 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 设置

于 2012-12-04T16:34:11.460 回答