代码之家  ›  专栏  ›  技术社区  ›  Alex B

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

  •  9
  • Alex B  · 技术社区  · 16 年前

    我正在通过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.632s。在过去,我可以通过使用junit fork参数来加速这样的测试问题,但在这种情况下,这似乎没有帮助。我可以查看哪些属性或参数来加速这些测试?

    更多信息:

    我使用的是来自ide的报告时间与junit任务输出的时间。这不是Ant运行结束时报告的总时间总和。

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

    7 回复  |  直到 7 年前
        1
  •  4
  •   bsanders    16 年前

    这里有一个盲目的猜测:尝试通过使用嵌套的 <jvmarg> 标记以设置 -Xmx 选择权。

        2
  •  4
  •   Risser    16 年前

    我猜这是因为antscript将结果输出到xml文件,而ide将结果保存在内存中。写一个文件比不写一个文件要花更长的时间。

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

    这是<batchtest>调用的一部分,它告诉它将结果粘贴到该目录中。它看起来像是让它把结果保存在“当前目录”中,不管是什么。乍一看,我看不出有什么东西能把它完全关掉。

        3
  •  1
  •   Eric Asberry    16 年前

    用这些信息很难说清楚。我要做的第一件事是查看测试结果,并确定是否所有单独的测试运行速度都一致较慢,或者是否可以将其缩小到测试用例的特定子集。

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

        4
  •  1
  •   Drew Noakes    12 年前

    也许您看到了这一点,因为eclipse执行增量编译,而ant不执行增量编译。您能确认这一时间只浪费在测试目标中吗?

        5
  •  0
  •   James Van Huis    16 年前

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

    把字符串加密调到更快的模式解决了这个问题。

        6
  •  0
  •   Chin    7 年前

    尝试将fork、forkmode和threads设置为以下值:

    <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

        7
  •  0
  •   Chin    7 年前

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