[英]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>
对我来说,为<junit>
元素添加forkmode="once"
并为<formatter>
元素添加usefile="false"
会使测试运行得更快。 同时删除不需要的格式化程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.