Ant Junit测试通过ant而不是通过IDE运行得慢得多 - 看什么?

时间:2008-09-23 19:11:14

标签: java performance ant junit

我正在通过ant运行我的junit测试,它们的运行速度远远低于IDE。我的蚂蚁电话是:

    <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>

在我的IDE(0.067s)中即时运行的相同测试在通过Ant运行时需要4.632秒。在过去,我已经能够通过使用junit fork参数来加速这样的测试问题,但在这种情况下这似乎没有帮助。我可以查看哪些属性或参数来加速这些测试?

更多信息:

我使用IDE中报告的时间与junit任务输出的时间。这不是蚂蚁运行结束时报告的总时间。

所以,奇怪的是,这个问题已经解决了。什么可能导致这个问题?系统在本地磁盘上运行,这不是问题。

7 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

很难说出这些信息。我要做的第一件事是查看测试结果,并确定所有单个测试是否运行速度均匀,或者是否可以缩小到某个测试用例子集。

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

答案 3 :(得分:1)

也许你看到的是因为Eclipse做了增量编译而Ant没有。你能否确认这个时间只是在测试目标中浪费了?

答案 4 :(得分:0)

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

将字符串加密调低到更快的模式可以解决问题。

答案 5 :(得分:0)

尝试将fork,formode和线程设置为这些值:

 findXpath=page.find('label', '$12,420.94', :match => :prefer_exact).path

另见https://ant.apache.org/manual/Tasks/junit.html

答案 6 :(得分:0)

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