当测试方法单独运行时,为junit生成报告

时间:2014-06-06 15:02:16

标签: java ant junit jenkins

我有一个带有JUnit测试的Java项目,我使用Ant在Jenkins上运行。在线阅读了各种教程之后,我使所有测试都可以单独运行。

我的 build.xml 如下所示:

<target name="run_junit" depends="compile, ensure-test-name"
                                  description="Run JUnit tests">
    <echo message="Execute Test" />
    <junit printsummary="withOutAndErr" fork="yes">
        <sysproperty key="tests" value="${tests}"/>
        <classpath>
            <path refid="classpath"/>
            <pathelement path="bin"/>
        </classpath>
      <formatter type="xml"/>
      <batchtest>
         <fileset dir="src">
             <include name="${test}.java"/>
         </fileset>
      </batchtest>
    </junit>
</target>

这与我自己的Runner和Filter类以及@RunWith注释一起,意味着我可以在单个类中运行单独的测试,如下所示:

ant run_junit -Dtest=ClassWithTests -Dtests=testMethod

这在Jenkins中完全正常,我也可以并行运行测试。我遇到的问题是每个方法运行后都会覆盖每个类的报告。

例如,上面的命令将生成一个文件 TEST-ClassWithTests.xml ,其中包含有关 testMethod 的结果和输出的信息。但是,如果我再运行

ant run_junit -Dtest=ClassWithTests -Dtests=anotherTestMethod

TEST-ClassWithTests.xml 文件将被覆盖,并且只包含有关 anotherTestMethod 的结果和输出的信息。



所以我的问题是:如何让JUnit为每种方法生成单独的测试报告?是否有一些很好地结合它们的方式,以便它们在Jenkins上显示良好?我会问是否可以将方法附加到现有的JUnit报告中,但是这些测试是并行运行的,所以这可能没有帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用<test>代替<batchtest>,因为这允许指定专用的输出文件。像这样:

  <test name="${test}" outfile="TEST-${test}-${tests}"/>

从ant 1.8.2开始,这甚至允许您通过属性methods运行单独的测试方法:

  <test name="${test}" outfile="TEST-${test}-${tests}" methods="${tests}"/>

这可能会帮助您摆脱自定义跑步者。

Jenkins应该能够正确收集所有报告文件并将它们合并到一个视图中。