9

I am running my junit tests via ant and they are running substantially slower than via the IDE. My ant call is:

    <junit fork="yes" forkmode="once" printsummary="off">
        <classpath refid="test.classpath"/>
        <formatter type="brief" usefile="false"/>
        <batchtest todir="${test.results.dir}/xml">
            <formatter type="xml"/>
            <fileset dir="src" includes="**/*Test.java" />
        </batchtest>
    </junit>

The same test that runs in near instantaneously in my IDE (0.067s) takes 4.632s when run through Ant. In the past, I've been able to speed up test problems like this by using the junit fork parameter but this doesn't seem to be helping in this case. What properties or parameters can I look at to speed up these tests?

More info:

I am using the reported time from the IDE vs. the time that the junit task outputs. This is not the sum total time reported at the end of the ant run.

So, bizarrely, this problem has resolved itself. What could have caused this problem? The system runs on a local disk so that is not the problem.

4

7 回答 7

4

这是一个盲目的猜测:尝试通过使用嵌套<jvmarg>标记设置-Xmx选项来增加分叉 VM 可用的最大堆大小。

于 2008-09-26T17:56:07.693 回答
4

我猜这是因为您的 antscript 将结果输出到 XML 文件,而 IDE 将这些结果保存在内存中。写文件比不写文件需要更长的时间。

todir="${test.results.dir}/xml"

这是 <batchtest> 调用的一部分,它告诉它将结果粘贴到该目录中。看起来将其关闭只是告诉它将结果粘贴在“当前目录”中,无论是什么。乍一看,我没有看到任何可以将其完全关闭的东西。

于 2008-12-18T13:50:53.177 回答
1

也许您看到了这一点,因为 Eclipse 进行增量编译而 Ant 没有。你能确认这段时间只浪费在测试目标上吗?

于 2008-09-24T03:42:21.580 回答
1

很难用这些信息来判断。我要做的第一件事是查看测试结果,并确定是否所有单独的测试都运行得较慢,或者是否可以缩小到某个测试用例子集。

(我要做的第零件事是确保我的 ant 任务使用与 Eclipse 相同的 JVM,并且类路径依赖项和导入的 JAR 确实完全相同)

于 2008-09-23T19:18:05.863 回答
0

作为记录,我发现了我的问题。我们一直在为这个项目使用代码混淆器,并且该混淆器的字符串加密部分设置为“最大”。这减慢了存在字符串的任何操作。

将字符串加密调低到更快的模式解决了这个问题。

于 2008-10-27T16:26:05.077 回答
0

对我来说,forkmode="once"<junit>元素添加和usefile="false"为元素添加<formatter>使测试运行得更快。还要删除您不需要的格式化程序。

于 2017-06-17T06:11:30.093 回答
0

尝试将 fork、forkmode 和 threads 设置为这些值:

<junit fork="yes" forkmode="perTest" printsummary="off" threads="4">
    <classpath refid="test.classpath"/>
    <formatter type="brief" usefile="false"/>
    <batchtest todir="${test.results.dir}/xml">
        <formatter type="xml"/>
        <fileset dir="src" includes="**/*Test.java" />
    </batchtest>
</junit>

另请参阅https://ant.apache.org/manual/Tasks/junit.html

于 2016-04-21T17:05:13.790 回答