Ant Junit测试通过ant比通过IDE运行慢得多 - 要看什么?


9

我正在通过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)同样的测试需要4.632s。在过去,我已经能够通过使用junit fork参数来加速这样的测试问题,但在这种情况下这似乎不起作用。我可以通过哪些特性或参数来加速这些测试?

更多信息:

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

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

+1

不会fork =是通过产生一个运行单个测试的新进程来伤害性能吗?不使用它的结果是什么? 23 9月. 082008-09-23 19:13:09

+1

with forkmode =“once”我以为它会在一个单独的线程中运行所有的junit测试。在fork =“no和fork =”yes“之间没有实质性的性能变化 23 9月. 082008-09-23 19:20:11

  0

你使用Ant的报告运行时间还是JUnit?Ant正在做更多的工作(决定运行什么样的测试,可能是编译)通过IDE进行测试 23 9月. 082008-09-23 21:18:10

1

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

(第零件事我会做的就是确保我的Ant任务是使用相同的JVM Eclipse和的路径依赖和进口的JAR是实实在在地相同)

+1

JAR和JVM是一样的,在IDE中运行时间小于1.0秒的任何测试都可以通过ant运行3.5-4.5秒 23 9月. 082008-09-23 19:21:22


1

也许你看到的是因为Eclipse会进行增量编译而Ant不会。你能确认这次只是在测试目标中浪费了吗?

  0

我也看到了'junit'任务需要很长时间,这绝对不是编译阶段,JUnit报告的实际时间很低(例如:'测试运行:21,失败:0,错误:0,经过的时间:0.034秒'),所以我期待这是时间在IntelliJ中运行所有测试大约需要两秒钟,但是通过Ant的junit任务运行需要花费将近20秒 30 12月. 122012-12-30 19:14:26


4

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

  0

我想提出这个建议,同时增加了Ant可用的堆大小本身也是如此。 24 10月. 082008-10-24 19:21:33


0

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

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


4

我猜这是因为您的antscript正在向XML文件输出结果,而IDE则将这些结果保留在内存中。写入文件比写入文件花费的时间要长。

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

这是< batchtest> call的一部分,它告诉它将结果粘贴到该目录中。它看起来像把它关闭只是告诉它坚持在“当前目录”的结果,不管是什么。乍一看,我没有看到任何东西可以完全消失。


0

尝试设置叉,forkmode和线程这些值:

<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


0

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