2011-08-27 17 views
5

Aşağıdaki Sonar Ant hedef tanımlamış: Ben karınca sonar 'çalıştırın ve benim tarayıcıda Sonar getirmek zamanSonar, test istatistiklerini dışa aktarmak için nasıl kullanılır?

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

, ben src dizininde sınıfları hakkında bilgi edinmek, ama şeyler hakkında hiçbir şey Test dizini

Sonar.sources dosyasına $ {test.src.dir} ekler ve sonar.tests değerini ayarlamazsam, test sınıfları hakkında bazı bilgiler görüyorum, ancak Sonar hala Test Başarılarını rapor ediyor.

Nasıl bu yüzden her test yöntemi ve istatistiklerinde ilerleyebilir alabilirim?

cevap

2

niteliği sonar.surefire.reportsPath sonar hedefin tanımı daha önce tarif edilmesi gerekmektedir. (Hala kapsama bilgi ihraç değil rağmen)

aşağıdaki tanım ihraç testi bilgi alır:

<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

Merhaba ben bir [benzer bir sorun] (http://stackoverflow.com/questions/21267948/sonarqube-test-coverage-report-for-android-built-with-ant) ama oldukça aynı değildir yaşıyorum. .. nasılsınız? .emma dosyası nasıl çıkıyor? – JaKXz

+0

Sonar'ı kullanmayı bıraktık ve kendi veri deposu oluşturduk. –

6

bu konuda genelinde, nihayet bizim Emma Kod kapsama hakkında rapor Sonar var çalışan herkesten için. İlk sorun, Emma eklentisinin kullanmış olduğum Sonar sürümü ile gelmemesiydi (3.1.1). download it'a vardı ve onu Sonar'ın extensions/plugins dizinine yükledim ve yeniden başlattım.

Sonra benim build.xml aşağıdaki özellikleri ayarlayın zorunda: Bazı sonra

[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 

: Bundan sonra

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

, ben en az Sonar karınca görevini çalıştırdıktan sonra şu çıktıyı gördü kazma, ben Sonar Emma plugin içinde bulundu, bir .ec (kapsama) dosya ve bir .em (meta veri) dosyası aramak için kodlanmıştır. Ne yazık ki, kapsama dosyasım meta veri dosyamda olduğu gibi bir .emma uzantısına sahipti ve diğer işlevleri kırdığı için onları yeniden adlandıramadım. Bu yüzden dosyaları Sonar Emma eklentisinin beklediği adlandırma standardına uyacak şekilde kopyalamak için aşağıdaki Ant görevini yazdım.

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

yine bu çalıştırdıktan sonra, ben yeni bir sorun karşılaştım: Biraz daha kazma sonra

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] 

, ben Sonar Emma 1.0.1 eklentisi Emma 2.0.5312 ve karşı derlendi bulundu Sonar Emma plugin sayfasında belirtildiği gibi Emma sürüm 2.1.5320 karşı Sonar Emma 1.1 ve 1.2.x.

Emma'nın 2.1.5320 sürümünü, Ant lib dizinimdeki emma.jar ve emma_ant.jar ile değiştirdim. Temiz bir yeniden derleme ve test edildikten sonra, Sonar Ant görevini yeniden çalıştırabildim ve kod kapsamımın Sonar'a yansıtılmasını sağladım.

İlgili konular