【发布时间】:2014-06-06 15:02:15
【问题描述】:
我有一个带有 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 报告中,但这些测试是并行运行的,所以这可能没有帮助。
【问题讨论】:
-
什么说明文件将被称为
TEST-ClassWithTests.xml?找到它并弄清楚如何附加时间戳或其他东西,因此每次运行测试时都会应用一个唯一的时间戳等。 -
@CeilingGecko - 是的,我昨天和今天一直在寻找它,但没有运气。有关于将 .xml 文件连接到一份报告中的信息,但我找不到任何关于命名原始测试摘要的信息......
-
你能用
<test>元素代替<batchtest>吗?它允许您指定一个专用的测试结果文件(属性:outfile),甚至允许您选择要执行的测试方法(属性:methods)