Распечатка количества сбоев JUnit в Ant - PullRequest
6 голосов
/ 21 июня 2011
<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. не удалось
  2. ошибка
  3. 1009 прошло * *

, внося изменения только в файл build.xml. Как я могу это сделать?

Ответы [ 6 ]

4 голосов
/ 22 июня 2011

Вы можете использовать задачу junitreport для сбора результатов теста.

Если вам нужно распечатать сводные показатели в файле сборки, вы можете использовать цепочку фильтров для извлечения информации.из сгенерированного отчета.

Может быть (должен?) быть более простой способ сделать это, но я этого не видел.

<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='&lt;td&gt;&lt;a href="all-tests.html" title="Display all tests"&gt;(\d+)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="alltests-fails.html" title="Display all failures"&gt;(\d+)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="alltests-errors.html" title="Display all errors"&gt;(\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

Если вы выполняете большое количество тестов, теперь у вас будут накладные расходы на извлечение отчета.

2 голосов
/ 10 июня 2013

Точно такой же ответ, как и у sudocode, но с этой строкой для разбора отчета (работает для RSA 8.5.1 / JUnit 4.11 - и мне не разрешили поместить этот фрагмент кода в качестве комментария в коде sudocodes - и мне не разрешено комментарий ...):

<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!

1 голос
/ 14 апреля 2012

Вы можете использовать junitreport для генерации комбинированного отчета XML из набора тестовых прогонов.

Чтобы затем создать текстовую сводку, вы можете создать XSLT и использовать муравей XSLT цель для форматирования файла.Это создаст выходной файл, но вы можете использовать ant для чтения и вывода его на консоль.

XSLT должен использовать что-то вроде строк для подсчета тестовых случаев, ошибок и сбоев.

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

(Если вы действительно хотите изменить только файл сборки ant, вы можете сгенерировать XSLT во временную папку во время сборки и затем удалить его.)

0 голосов
/ 21 декабря 2016

Попробуйте встроить 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();
0 голосов
/ 24 июня 2011

Попробуйте этот атрибут в своей задаче 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>
0 голосов
/ 23 июня 2011

В качестве альтернативы подходу 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...