web-dev-qa-db-fra.com

SonarQube ne capte pas la couverture du test unitaire

J'ai des problèmes avec le sonar lors de la collecte du rapport d'analyse Jacoco. Jenkins est cependant capable de récupérer le rapport et d’afficher les résultats ..__ Mon projet est une construction maven construite par Jenkins. Le rapport jacoco est généré par maven (configuré dans le pom). Sonar est exécuté à l'aide du plugin Jenkins.

Voici ce que je vois sur SonarQube:

SonarQube Screen Capture

C'est le rapport que je peux voir du projet à Jenkins.

Jacoco report in Jenkins

La configuration du plugin maven:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.4.201312101107</version>
    <executions>
      <execution>
        <id>default-prepare-agent</id>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>default-report</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>report</goal>
        </goals>
      </execution>
      <execution>
          <id>default-check</id>
          <goals>
              <goal>check</goal>
          </goals>
      </execution>
    </executions>
</plugin>

Jenkins Sonar Plugin config enter image description here

34
anton91

Il vous manquait quelques propriétés de sonar importantes. Voici un exemple d’une de mes versions:

sonar.jdbc.dialect=mssql
sonar.projectKey=projectname
sonar.projectName=Project Name
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=Java
sonar.binaries=build/classes
sonar.tests=junit
sonar.dynamicAnalysis=reuseReports
sonar.junit.reportsPath=build/test-reports
sonar.Java.coveragePlugin=jacoco
sonar.jacoco.reportPath=build/test-reports/jacoco.exec

L'erreur dans la sortie de la console Jenkins peut être très utile pour que la couverture de code fonctionne.

La couverture du projet est définie sur 0% puisqu'il n'y a pas de répertoires avec des classes.  
Indique que vous n'avez pas défini correctement la propriété Sonar.Binaries

Aucune information sur la couverture par test  
Indique que vous n'avez pas défini correctement la propriété Sonar.Tests

Les informations de couverture n'ont pas été collectées. Peut-être que vous oubliez d'inclure des informations de débogage dans les classes compilées? Indique que la propriété sonar.binaries a été définie correctement, mais que ces fichiers n'ont pas été compilés en mode débogage et qu'ils doivent être

57
Cole9350

D'après https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml , le POM suivant fonctionne pour moi:

<properties>
    <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.0.201403182114</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <destFile>${sonar.jacoco.reportPath}</destFile>
            </configuration>
        </plugin>
    </plugins>
</build>
  • Définir le fichier de destination sur le chemin du rapport garantit que Sonar lit exactement le fichier généré par JaCoCo.
  • Le chemin du rapport doit se situer en dehors des répertoires des projets afin de prendre en compte la couverture inter-projets (par exemple, dans le cas de Tycho où la convention prévoit des projets distincts pour les tests).
  • Le paramètre reuseReports empêche la suppression du fichier de rapport JaCoCo avant sa lecture! (Depuis la version 4.3, ceci est la valeur par défaut et est obsolète.)

Puis je cours

mvn clean install
mvn sonar:sonar
9
thSoft

J'avais le même problème, une couverture de 0,0% et aucun test unitaire ne compte sur le tableau de bord Sonar avec SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: Fonctionne avec 7.0/7.9/8.0, OS: Windows

Après beaucoup de mal à trouver une solution correcte pour un projet multi-module Maven, mais pas comme un projet à module unique ici, nous devons dire de choisir les rapports jacoco de modules individuels et de les fusionner en un seul rapport, problème résolu avec cette configuration lorsque mon parent pom semble comme:

 <properties>
            <!--Sonar -->
            <sonar.Java.coveragePlugin>jacoco</sonar.Java.coveragePlugin>
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
        <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.language>Java</sonar.language>

        </properties>

        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.Apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>1.5</source>
                            <target>1.5</target>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.sonarsource.scanner.maven</groupId>
                        <artifactId>sonar-maven-plugin</artifactId>
                        <version>3.4.0.905</version>
                    </plugin>

                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>0.7.9</version>
                        <configuration>
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                            <append>true</append>
                        </configuration>
                        <executions>
                            <execution>
                                <id>agent</id>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                </plugins>
            </pluginManagement>
        </build>

J'ai essayé quelques autres options comme jacoco-aggreg et même la création d'un sous-module en l'incluant dans le pom parent, mais rien ne fonctionnait vraiment et c'est simple. Je vois dans les journaux que <sonar.jacoco.reportPath> est obsolète, mais fonctionne toujours tel quel et semble être remplacé automatiquement à l'exécution ou peut être mis à jour manuellement vers <sonar.jacoco.reportPaths> ou plus tard. Une fois que vous avez terminé l’installation dans cmd, démarrez avec mvn clean install then mvn org.jacoco: plugin jacoco-maven: prepare-agent install (vérifiez dans le dossier cible du projet si jacoco.exec est créé) & do mvn sonar: sonar , c’est ce que j’ai essayé, faites-le moi savoir si une autre solution optimale est disponible.Espoir que cela aide !! Si non, merci de poster votre question ..

5
srinivas y

Jenkins ne montre pas les résultats de couverture car il s'agit d'un problème de compatibilité de version entre le plugin jenkins jacoco et le plugin maven jacoco . De mon côté, je l'ai corrigé en utilisant une version plus récente de maven jacoco plugin

<build>
   <pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.jacoco</groupId>
         <artifactId>jacoco-maven-plugin</artifactId>
         <version>0.7.9</version>
       </plugin>
     <plugins>
   <pluginManagement>
<build>
1
TomateEtCarotte

Incluez les plugins sunfire et jacoco dans les fichiers pom.xml et Exécutez la commande maven comme indiqué ci-dessous.

mvn jacoco: préparer-agent jacoco: rapport sonar: sonar

<properties>
    <surefire.version>2.17</surefire.version>
    <jacoco.version>0.7.2.201409121644</jacoco.version>

<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${surefire.version}</version>
        </plugin> 

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>

            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals><goal>prepare-agent</goal></goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <phase>prepare-package</phase>
                    <goals><goal>report</goal></goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
0
Raghav Mo