正在打印Ant中的JUnit失败数

v64noz0r  于 2022-11-29  发布在  其他
关注(0)|答案(6)|浏览(144)
<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>

我要打印的测试用例有多少:
1.失败的
1.误差
1.已通过
通过只在build.xml文件中进行更改。我该怎么做呢?

vzgqcmou

vzgqcmou1#

您可以使用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>
                <!-- escaped values of < and > are "&gt;" and "&lt;" -->
                <replaceregex pattern='.*all tests.*&gt;(\d+)&lt;.*all failures.*&gt;(\d+)&lt;.*all errors.*&gt;(\d+)&lt;.*$' 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

如果您正在运行大量的测试,您现在将有报告生成提取的开销。

a0x5cqrl

a0x5cqrl2#

答案与sudocode的答案完全相同,但使用此行解析报告(适用于RSA 8.5.1 / JUnit 4.11 -不允许我将这段代码作为注解放在sudocode代码中-也不允许我注解...):

<replaceregex pattern='&lt;td&gt;&lt;a title="Display all tests" href="all-tests.html"&gt;(\d+)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a title="Display all failures" href="alltests-fails.html"&gt;(\d+)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a title="Display all errors" href="alltests-errors.html"&gt;(\d+).*$' replace="Run: \1, Failed: \2, Errors: \3" />

感谢sudocode!

xuo3flqw

xuo3flqw3#

您可以使用junitreport从一组测试回合产生组合的XML报告。
为了生成文本摘要,可以创建一个XSLT,并使用ant XSLT目标来格式化文件。这将生成一个输出文件,但可以使用ant读取该文件并将其回显到控制台。
XSLT应该使用沿着的方法来计算测试用例、错误和失败。

count(//testsuites/testcase)
    count(//testsuites/testcase/error)
    count(//testsuites/testcase/error)

(If您实际上只想修改Ant构建文件,可以在构建时将XSLT生成到一个临时文件夹中,然后再将其删除。)

qvk1mo1f

qvk1mo1f4#

作为sudocodes方法的替代方法:您可以将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>
omtl5h9j

omtl5h9j5#

在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>
nkhmeac6

nkhmeac66#

尝试将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();

相关问题