<target name="test" depends="compile-test">
<junit failureProperty="test.failure">
<classpath refid="classpath.test" />
<formatter type="brief" usefile="false" />
<batchtest>
<fileset dir="${tst-dir}" includes="**/Test*.class" />
</batchtest>
</junit>
<fail message="test failed" if="test.failure" />
</target>
我想打印多少个测试用例:
仅在build.xml文件中进行更改。我怎么能这样做?
答案 0 :(得分:4)
您可以使用junitreport task收集测试结果。
如果您需要在构建文件中打印摘要指标,则可以使用过滤器链从生成的报告中提取信息。
可能(必须?)是一种更简单的方法,但我没有看到它。
<target>
<junit failureProperty="test.failure">
<classpath refid="classpath.test" />
<!-- use XML formatter and let it output to file -->
<formatter type="xml" />
<!-- specify output dir for test result files -->
<batchtest todir="tmp/results">
<fileset dir="${tst-dir}" includes="**/Test*.class" />
</batchtest>
</junit>
<!-- generate report with junitreport -->
<junitreport todir="tmp">
<fileset dir="tmp/results" />
<report todir="tmp/report" />
</junitreport>
<!-- concat the report through a filter chain to extract what you want -->
<concat>
<fileset file="tmp/report/overview-summary.html" />
<filterchain>
<linecontainsregexp>
<regexp pattern='title="Display all tests"' />
</linecontainsregexp>
<tokenfilter>
<replaceregex pattern='<td><a href="all-tests.html" title="Display all tests">(\d+)</a></td><td><a href="alltests-fails.html" title="Display all failures">(\d+)</a></td><td><a href="alltests-errors.html" title="Display all errors">(\d+).*$' replace="Run: \1, Failed: \2, Errors: \3" />
</tokenfilter>
</filterchain>
</concat>
<fail message="test failed" if="test.failure" />
</target>
输出类似于:
Buildfile: C:\\test\unit_test.xml
test:
[junit] Test MyUnitTest FAILED
[junit] Test MyUnitTest2 FAILED
[junitreport] Processing C:\\test\tmp\TESTS-TestSuites.xml to C:\DOCUME~1\xxx\LOCALS~1\Temp\1\null1075123857
[junitreport] Loading stylesheet jar:file:/C:/eclipse/eclipse-jee-ganymede-SR2-win32/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] Transform time: 906ms
[junitreport] Deleting: C:\DOCUME~1\xxx\LOCALS~1\Temp\1\null1075123857
[concat] Run: 8, Failed: 4, Errors: 1
BUILD FAILED
C:\test\unit_test.xml:32: test failed
Total time: 1 second
如果您正在运行大量测试,那么现在您将获得报告生成提取的开销。
答案 1 :(得分:2)
与sudocode完全相同的答案,但用这行来解析报告(适用于RSA 8.5.1 / JUnit 4.11 - 我不允许将这段代码作为注释放在sudocodes代码中 - 我也不允许评论......):
<replaceregex pattern='<td><a title="Display all tests" href="all-tests.html">(\d+)</a></td><td><a title="Display all failures" href="alltests-fails.html">(\d+)</a></td><td><a title="Display all errors" href="alltests-errors.html">(\d+).*$' replace="Run: \1, Failed: \2, Errors: \3" />
感谢sudocode!
答案 2 :(得分:1)
您可以使用junitreport从一组测试运行中生成组合的XML报告。
要生成文本摘要,您可以创建XSLT并使用ant XSLT目标格式化文件。这将生成一个输出文件,但您可以使用ant读取它并将其回显到控制台。
XSLT应该使用一些东西来计算测试用例,错误和失败。
count(//testsuites/testcase)
count(//testsuites/testcase/error)
count(//testsuites/testcase/error)
(如果你真的只想修改你的ant构建文件,你可以在构建时生成一个临时文件夹的XSLT,然后将其删除。)
答案 3 :(得分:0)
作为sudocodes-approach的替代方法:您可以将printsummary属性设置为junit-task。这将在每个测试类之后打印摘要。这不是一个总体概要。
<junit failureProperty="test.failure" printsummary="yes">
<classpath refid="classpath.test" />
<formatter type="brief" usefile="false" />
<batchtest>
<fileset dir="${tst-dir}" includes="**/Test*.class" />
</batchtest>
</junit>
答案 4 :(得分:0)
在junit任务上尝试此属性:
printsummary="yes"
对于类似于javadoc的流畅html报告,请将格式化程序更改为:
<formatter type="xml" />
然后使用调用此目标的目标创建报告:
<junitreport>
<fileset dir="${report.dir}/tmp">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" styledir="${junitxslt.dir}" todir="${report.dir}/html" />
</junitreport>
答案 5 :(得分:0)
尝试将Jsoup嵌入到自定义任务中,并使用构建中的任务从overview-summary.html中提取所需的数据。
我的下面的代码段 -
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class ExtractJunitSummaryTask extends Task {
protected String overviewSummaryHtml;
protected String outProperty;
public void execute() throws BuildException {
StringBuffer sb = new StringBuffer();
// TODO: read and put overviewSummaryHtml file content into a String
Document doc = Jsoup.parse(sb.toString());
String allTests = doc.getElementsByAttributeValueContaining("href", "all-tests").text();
String allFailures = doc.getElementsByAttributeValueContaining("href", "alltests-fails").text();
String allErrors = doc.getElementsByAttributeValueContaining("href", "alltests-errors").text();
String allSkippedTests = doc.getElementsByAttributeValueContaining("href", "alltests-skipped").text();