2011-06-21 15 views
6
<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> 

Quiero imprimir el número de casos de prueba son:número de impresión de los fallos de JUnit en Ant

  1. fallidos
  2. error
  3. pasó

haciendo cambios sólo en el archivo build.xml ¿Cómo puedo hacer eso?

Respuesta

4

Puede usar el junitreport task para recopilar los resultados de sus pruebas.

Si necesita imprimir las métricas de resumen en su archivo de compilación, puede usar una cadena de filtros para extraer la información del informe generado.

Puede (¿debe ser?) Ser una forma más simple de hacer esto, pero no lo vi.

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

La salida será algo así como:

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 

Si está ejecutando un gran número de pruebas, que ahora tendrá la sobrecarga de extracción de generación de informes.

0

Como alternativa a sudocodes-approach: puede establecer el atributo printsummary en junit-task. Esto imprimirá un resumen después de cada clase de prueba. No es un resumen general.

<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> 
+1

He intentado que la primera, pero se imprime un resumen de cada ejecución TestCase, no un resumen general de todos los ensayos realizados. – sudocode

0

Prueba este atributo en su tarea junit:

printsummary="yes" 

Para un informe HTML Javadoc como pulido, cambiar su formateador a:

<formatter type="xml" /> 

y luego crear los informes con una objetivo que llama a esto:

<junitreport> 
<fileset dir="${report.dir}/tmp"> 
     <include name="TEST-*.xml" /> 
</fileset> 
<report format="frames" styledir="${junitxslt.dir}" todir="${report.dir}/html" /> 
</junitreport> 
0

Puede usar junitreport para generar un informe XML combinado de un conjunto de ejecuciones de prueba.

Para generar un resumen textual, puede crear un XSLT y utilizar el objetivo ant XSLT para formatear el archivo. Esto producirá un archivo de salida, pero puede usar ant para leerlo y repetirlo en la consola.

El XSLT debe usar algo como: contar las pruebas, los errores y las fallas.

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

(Si realmente sólo desea modificar su archivo ant build que podría generar el XSLT a una carpeta temporal en tiempo de compilación y eliminarlo después.)

2

exactamente la misma respuesta que sudocode de pero con este línea para analizar el informe (funciona para RSA 8.5.1/JUnit 4.11 - y no se me permitió colocar este fragmento de código como comentario en el código de códigos de sudoración) ni puedo comentar ...):

<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" /> 

Gracias a sudocode!

0

Intente incrustar Jsoup en una tarea personalizada y utilice la tarea en su compilación para extraer los datos que necesita de overview-summary.html.

Mi fragmento de código a continuación -

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(); 
Cuestiones relacionadas