2011-08-27 10 views
5

Tengo el siguiente objetivo Sonar Ant definido:¿Cómo hacer que Sonar exporte las estadísticas de prueba?

<target name='sonar'> 
    <property name='sonar.sources' value='${src.dir}'/> 
    <property name='sonar.tests' value='${test.src.dir}'/> 
    <property name='sonar.binaries' value='build/classes'/> 
    <path id='jars'> 
     <fileset dir='${env.JAVA_HOME}/jre/lib' includes='*.jar'/> 
     <fileset dir='build/lib/test' includes='*.jar'/> 
    </path> 
    <pathconvert property='sonar.libraries' refid='jars' pathsep=','/> 

    <exec executable='p4' outputproperty='p4.P4CLIENT'> 
     <arg value='set'/> 
     <arg value='P4CLIENT'/> 
    </exec> 
    <propertyregex 
      property='p4client' 
      input='${p4.P4CLIENT}' 
      regexp='P4CLIENT=([^ ]+) *.*' 
      replace='\1'/> 
    <propertyregex 
      property='sonar.timestamp' 
      input='${build.time}' 
      regexp='_' 
      replace='T'/> 
    <sonar:sonar key='com.netflix:${module.name}' version='${p4client}@${sonar.timestamp}' xmlns:sonar='antlib:org.sonar.ant'/> 

    <property name='sonar.dynamicAnalysis' value='reuseReports'/> 
    <property name='sonar.emma.reportPath' value='${coverage.dir}'/> 
</target> 

Cuando corro 'sónar hormiga' y criar a sonar en mi navegador, ver información acerca de las clases en el directorio src, pero nada acerca de las cosas en el directorio de prueba.

Si agrego $ {test.src.dir} a sonar.sources y no establezco sonar.tests, veo algo de información sobre las clases de prueba, pero Sonar aún informa 0 Successes de prueba.

¿Cómo puedo obtenerlo así que puedo profundizar en cada método de prueba y sus estadísticas?

Respuesta

2

La propiedad 'sonar.surefire.reportsPath' debe definirse antes de la definición del objetivo del sonar.

La siguiente definición se pone la información de prueba exportado (aunque todavía no exportar información de cobertura):

<property name='sonar.surefire.reportsPath' value='${test.dir}'/> 

<property name='sonar.dynamicAnalysis' value='reuseReports'/> 
<property name='sonar.emma.reportPath' value='${coverage.report.dir}'/> 

<target name='sonar'> 
    <property name='sonar.sources' value='${src.dir}'/> 
    <property name='sonar.tests' value='${test.src.dir}'/> 
    <property name='sonar.binaries' value='${build.dir}'/> 
    <path id='jars'> 
     <fileset dir='${env.JAVA_HOME}/jre/lib' includes='*.jar'/> 
     <fileset dir='${ivy.lib.dir}/test' includes='*.jar'/> 
    </path> 
    <pathconvert property='sonar.libraries' refid='jars' pathsep=','/> 

    <exec executable='p4' outputproperty='p4.P4CLIENT'> 
     <arg value='set'/> 
     <arg value='P4CLIENT'/> 
    </exec> 
    <propertyregex 
      property='p4client' 
      input='${p4.P4CLIENT}' 
      regexp='P4CLIENT=([^ ]+) *.*' 
      replace='\1'/> 
    <propertyregex 
      property='sonar.timestamp' 
      input='${build.time}' 
      regexp='_' 
      replace='T'/> 

    <sonar:sonar key='com.netflix:${module.name}' version='${p4client}@${sonar.timestamp}' xmlns:sonar='antlib:org.sonar.ant'/> 
</target> 
+0

Hola, estoy teniendo un [problema similar] (http://stackoverflow.com/questions/21267948/sonarqube-test-coverage-report-for-android-build-with -ant) pero no exactamente lo mismo. ¿Cómo están sacando un archivo .emma? – JaKXz

+0

De hecho, hemos dejado de usar Sonar y construiremos nuestro propio repositorio de datos de compilación. –

6

Para cualquier otra persona que se ejecuta a través de este tema, que finalmente me dieron Sonar para informar sobre nuestra cobertura de código Emma. El primer problema fue que el complemento Emma no incluía la versión de Sonar que estaba usando (3.1.1). Tenía que download it e instalarlo en el directorio extensions/plugins de Sonar y reiniciarlo.

Luego tuve que establezca las siguientes propiedades en mi build.xml:

<property name="sonar.core.codeCoveragePlugin" value="emma" /> 
<property name="sonar.emma.reportPath" value="${coverage.dir}" /> 

Después de esto, al menos vio la siguiente salida después de ejecutar la tarea ant Sonar:

[sonar:sonar] 13:41:49.705 WARN  org.sonar.INFO - No coverage (*.ec) file found in /my/local/path 
[sonar:sonar] 13:41:49.708 WARN  org.sonar.INFO - No metadata (*.em) file found in /my/local/path 

Después de algún cavando, encontré que dentro del Sonar Emma plugin, está codificado para buscar un archivo .ec (cobertura) y un archivo .em (metadata). Desafortunadamente, mi archivo de cobertura tenía una extensión .emma como mi archivo de metadatos y no pude cambiarles el nombre ya que rompería otras funciones. Así que escribí la siguiente tarea Ant para copiar los archivos para que coincidan con el estándar de nombres que espera el complemento Sonar Emma.

<target name="createEmmaFilesWithSonarNamingStandard" depends="defineAntContribTasks"> 
    <if> 
     <available file="${coverage.dir}/metadata.emma" /> 
     <then> 
      <copyfile src="${coverage.dir}/metadata.emma" dest="${coverage.dir}/metadata.em" /> 
     </then> 
    </if> 
    <if> 
     <available file="${coverage.dir}/coverage.emma" /> 
     <then> 
      <copyfile src="${coverage.dir}/coverage.emma" dest="${coverage.dir}/coverage.ec" /> 
     </then> 
    </if> 
</target> 

Después de ejecutar este nuevo, me encontré con un nuevo problema:

org.sonar.api.utils.SonarException: java.io.IOException: cannot read [/my/local/path/build/coverage/metadata.em]: created by another EMMA version [2.0.5312] 

Después de un poco más de excavación, encontré que el Sónar Emma 1.0.1 plug-in que fue compilada en Emma y el 2.0.5312 Sonar Emma 1.1 y 1.2.x contra Emma versión 2.1.5320 como se indica en la página Sonar Emma plugin.

He descargado la versión 2.1.5320 de Emma, ​​reemplazado tanto emma.jar como emma_ant.jar en mi directorio Ant lib. Después de una nueva compilación limpia y una prueba, pude volver a ejecutar la tarea Sonar Ant y tener mi cobertura de código reflejada en Sonar.

Cuestiones relacionadas