我有一个带有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报告中,但是这些测试是并行运行的,所以这可能没有帮助。
答案 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应该能够正确收集所有报告文件并将它们合并到一个视图中。