2011-08-27 13 views
5

Mam następujący cel Sonar Ant zdefiniowane:Jak uzyskać Sonar do eksportowania statystyk testowych?

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

Kiedy biegnę „ant sonar” i wychować Sonar w przeglądarce, widzę informacji o zajęciach w katalogu src, ale nic o rzeczy w katalog testowy.

Jeśli dodaję $ {test.src.dir} do sonar.sources i nie ustawię sonar.tests, widzę pewne informacje o klasach testowych, ale Sonar nadal zgłasza 0 sukcesów testowych.

Jak mogę to zrobić, aby przejść do każdej metody testowania i ich statystyk?

Odpowiedz

2

Właściwość "sonar.surefire.reportsPath" należy zdefiniować przed definicją celu sonaru.

następująca definicja dostaje info testową eksportowany (choć wciąż nie eksportowania informacji pokrycia):

<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

Witam Mam [podobny problem] (http://stackoverflow.com/questions/21267948/sonarqube-test-coverage-report-for-android-built-with-ant), ale nie do końca taki sam. .. jak wybraliście plik .emma? – JaKXz

+0

Właściwie przestaliśmy używać sonaru i będziemy budować własne repozytorium danych o kompilacji. –

6

dla nikogo innego, który działa w całej tej sprawie, ale w końcu dostał Sonar zgłosić na naszej pokrycie kodu Emma. Pierwszy problem polegał na tym, że wtyczka Emma nie pochodziła z wersją Sonaru, której używałem (3.1.1). Musiałem download it i zainstalować go w katalogu Sonar z extensions/plugins i ponownie go uruchomić.

Potem musiałem ustawić następujące właściwości w moim build.xml:

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

po tym, ja conajmniej zobaczyłem następujący wynik po uruchomieniu Sonar ant zadanie:

[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 

Po pewnym kopanie, znalazłem, że wewnątrz Sonar Emma plugin, jest zakodowany, aby szukać pliku .ec (zasięg) i pliku .em (metadanych). Niestety, mój plik zasięgu miał rozszerzenie .emma, podobnie jak mój plik metadanych i nie mogłem zmienić ich nazwy, ponieważ spowodowałoby to uszkodzenie innych funkcji. Napisałem następujące zadanie Ant, aby skopiować pliki zgodnie ze standardem nazewnictwa, którego oczekuje wtyczka 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> 

Po ponownym uruchomieniem tego, natknąłem się nowy problem:

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] 

Po jakimś bardziej kopanie, okazało się, że 1.0.1 Wtyczka Sonar Emma została opracowana przed Emmą 2.0.5312 a Sonar Emma 1.1 i 1.2.x przeciwko Emmie w wersji 2.1.5320, jak podano na stronie Sonar Emma plugin.

Pobrałem wersję Emmy 2.1.5320, zastąpiłem zarówno emma.jar, jak i emma_ant.jar w moim katalogu mrówek. Po czystej ponownym skompilowaniu i przetestowaniu udało mi się ponownie uruchomić zadanie Sonar Ant i odzwierciedlić zasięg mojego kodu w sonarze.

Powiązane problemy