繁体   English   中英

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

[英]Ant Junit tests are running much slower via ant than via IDE - what to look at?

我通过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任务输出的时间。 这不是蚂蚁运行结束时报告的总时间。

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

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

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

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

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

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

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

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

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

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

尝试将fork,formode和线程设置为以下值:

<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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM