通过ant进行的Ant Junit测试比通过IDE进行的运行要慢得多-要看什么?
时间:2020-03-06 14:37:14 来源:igfitidea点击:
我通过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>
通过Ant运行时,几乎同时在我的IDE(0.067s)中运行的同一测试需要4.632s。过去,我可以通过使用junit fork参数来加快此类测试问题的速度,但在这种情况下似乎无济于事。我可以查看哪些属性或者参数来加快这些测试的速度?
更多信息:
我正在使用IDE中报告的时间与junit任务输出的时间。这不是蚂蚁运行结束时报告的总时间。
因此,奇怪的是,这个问题已经解决了。是什么引起了这个问题?系统在本地磁盘上运行,所以这不是问题。
解决方案
很难用这些信息来告诉。我要做的第一件事是查看测试结果,并确定所有单个测试的运行速度是否均一,或者是否可以缩小到测试用例的某些子集。
(我要做的第零件事是确保我的ant任务使用与Eclipse相同的JVM,并确保类路径依赖项和导入的JAR确实相同)
也许我们看到了,因为Eclipse进行了增量编译,而Ant却没有。我们可以确认仅在测试目标中浪费了该时间吗?
这是一个盲目的猜测:尝试使用嵌套的<jvmarg>标签设置-Xmx选项来增加分叉VM可用的最大堆大小。
记录下来,我发现了我的问题。我们一直在为该项目使用代码混淆器,并且该混淆器的字符串加密部分设置为"最大"。这减慢了存在字符串的任何操作。
将字符串加密调低到更快的模式可以解决此问题。
我猜是因为上标将结果输出到XML文件,而IDE却将结果保存在内存中。写文件要比不写文件花费更多的时间。
todir="${test.results.dir}/xml"
这是<batchtest>调用的一部分,该调用告诉它将结果粘贴到该目录中。看起来不管它是什么,只是告诉它将结果粘贴在"当前目录"中,无论是什么。乍一看,我什么都没有把它关掉。