1

J'essaie d'obtenir un rapport de couverture de code pour les tests d'intégration. Jacoco maven plugin est capable de donner la couverture de code pour les tests unitaires, mais donnant une couverture de 0% pour les tests d'intégration. Les tests d'intégration atteignent les points de terminaison api restants de l'application, qui a été déployée dans tomcat.Jacoco Maven instrumentation hors ligne - Tomcat

Mon plugin jacoco de maven & Le plugin surefire ressemble à ceci.

<plugin> 
      <groupId>org.jacoco</groupId> 
      <artifactId>jacoco-maven-plugin</artifactId> 
      <version>0.7.9</version> 
      <executions> 
       <execution> 
        <id>prepare-agent</id> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>prepare-agent-integration</id> 
        <goals> 
         <goal>prepare-agent-integration</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>report</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>post-unit-test</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
        <configuration> 
         <dataFile>${project.build.directory}/target/jacoco-it.exec</dataFile> 
         <outputDirectory>${project.build.directory}/target/jacoco-ut</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 

      <configuration> 
       <systemPropertyVariables> 
        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile> 
       </systemPropertyVariables> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20</version> 
      <configuration> 
       <!-- <skip>true</skip> --> 
       <!-- <systemPropertyVariables> <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile> 
        </systemPropertyVariables> --> 
      </configuration> 
      <!-- <configuration> <skip>true</skip> </configuration> --> 
      <executions> 
       <execution> 
        <id>unit-tests</id> 
        <phase>test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
        <configuration> 
         <!-- Never skip running the tests when the test phase is invoked --> 
         <!-- <skip>true</skip> --> 
         <argLine>@{argLine} 
          -javaagent:c:\\iat\\mavenrepository\\org\\jacoco\\org.jacoco.agent\\0.7.10-SNAPSHOT\\org.jacoco.agent-0.7.10-SNAPSHOT-runtime.jar=destfile=C:\\Users\\dmahapat\\Workspaces\\MyEclipse 
          2016 CI\\JaxRsApp\\target\\jacoco.exec</argLine> 
         <includes> 
          <include>**/*UnitTest.java</include> 
         </includes> 
         <excludes> 
          <exclude>**/*IntegrationTest.java</exclude> 
         </excludes> 
        </configuration> 
       </execution> 
       <execution> 
        <id>integration-tests</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
        <configuration> 
         <!-- Never skip running the tests when the integration-test phase 
          is invoked --> 
         <!-- argLine>-javaagent:$WORKSPACE/target/lib/jacoco-agent-0.7.9.jar=includes=*,destfile=*/jacoco-coverage.exec,append=false</argLine --> 
         <skip>false</skip> 
         <argLine>@{argLine} 
          -javaagent:c:\\iat\\mavenrepository\\org\\jacoco\\org.jacoco.agent\\0.7.10-SNAPSHOT\\org.jacoco.agent-0.7.10-SNAPSHOT-runtime.jar=destfile=C:\\Users\\dmahapat\\Workspaces\\MyEclipse 
          2016 CI\\JaxRsApp\\target\\jacoco-it.exec 
         </argLine> 

         <includes> 
          <include>**/*IntegrationTest.java</include> 
         </includes> 
         <excludes> 
          <exclude>**/*UnitTest.java</exclude> 
         </excludes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

J'exécute des tests unitaires en phase de test & tests d'intégration en phase de test d'intégration. La dernière erreur que je reçois est «Ignorer l'exécution de JaCoCo en raison d'un fichier de données d'exécution manquant».

Répondre

0

Avec l'aide d'Evgeny, j'ai fait ce travail. Le serveur a été changé pour glassfish & ide à intellij pour faciliter le débogage.

Démarrez le serveur glassfish avec les options JVM suivantes.

-DargLine=-javaagent:c:/iat/mavenrepository/org/jacoco/org.jacoco.agent/0.7.9/org.jacoco.agent-0.7.9-runtime.jar=destfile=C:/dmahapat_JaxRsApp/target/coverage-reports/jacoco-it.exec 

Mise à jour pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<groupId>org.mathworks</groupId> 
<artifactId>JaxRsApp</artifactId> 
<packaging>war</packaging> 
<version>0.0.1-SNAPSHOT</version> 
<name>JaxRsApp</name> 

<build> 
    <finalName>JaxRsApp</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <inherited>true</inherited> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <id>add-test-source</id> 
        <goals> 
         <goal>add-test-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>${project.basedir}\src\integration-test\java</source> 
         </sources> 
        </configuration> 
       </execution> 
       <execution> 
        <id>add-test-resource</id> 
        <goals> 
         <goal>add-test-resource</goal> 
        </goals> 
        <configuration> 
         <resources> 
          <resource> 
           <!-- Don't forget <directory> label --> 
           <directory>${project.basedir}\src\integration-test\resources</directory> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
     <version>0.7.9</version> 
      <executions> 
       <!-- 
        Prepares the property pointing to the JaCoCo runtime agent which 
        is passed as VM argument when Maven the Surefire plugin is executed. 
       --> 
       <execution> 
        <id>pre-unit-test</id> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
        <configuration> 
         <!-- Sets the path to the file which contains the execution data. --> 
         <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> 
         <!-- 
          Sets the name of the property containing the settings 
          for JaCoCo runtime agent. 
         --> 
         <propertyName>surefireArgLine</propertyName> 
        </configuration> 
       </execution> 
       <!-- 
        Ensures that the code coverage report for unit tests is created after 
        unit tests have been run. 
       --> 
       <execution> 
        <id>post-unit-test</id> 
        <phase>test</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
        <configuration> 
         <!-- Sets the path to the file which contains the execution data. --> 
         <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> 
         <!-- Sets the output directory for the code coverage report. --> 
         <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> 
        </configuration> 
       </execution> 

       <execution> 
        <id>pre-integration-test</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
        <configuration> 
         <!-- Sets the path to the file which contains the execution data. --> 
         <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile> 
         <!-- 
          Sets the name of the property containing the settings 
          for JaCoCo runtime agent. 
         --> 
         <propertyName>failsafeArgLine</propertyName> 
        </configuration> 
       </execution> 
       <!-- 
        Ensures that the code coverage report for integration tests after 
        integration tests have been run. 
       --> 
       <execution> 
        <id>post-integration-test</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
        <configuration> 
         <!-- Sets the path to the file which contains the execution data. --> 
         <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile> 
         <!-- Sets the output directory for the code coverage report. --> 
         <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 

     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20.1</version> 
      <configuration> 
       <argLine>${surefireArgLine}</argLine> 
       <excludes> 
        <exclude>**/*IntegrationTest*</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.20.1</version> 
      <configuration> 
       <argLine>${failsafeArgLine}</argLine> 
       <includes> 
        <include>**/*IntegrationTest.java</include> 
       </includes> 
       <excludes> 
        <exclude>**/*UnitTest.java</exclude> 
       </excludes> 
      </configuration> 
      <executions> 
       <execution> 
        <id>integration-tests</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <!-- use the following artifactId if you don't need servlet 2.x compatibility --> 
     <!-- artifactId>jersey-container-servlet</artifactId --> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.3.5</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpmime</artifactId> 
     <version>4.5.3</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.7</version> 
    </dependency> 
</dependencies> 
<properties> 
    <jersey.version>2.25.1</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

</properties> 

0

mentionnant documentation of prepare-agent-integration:

identique à la préparation d'agent, mais fournit des valeurs par défaut adaptées à des tests d'intégration-:

  • lié à une pré-integration-test de phase
  • différent destfile

Citation documentation of prepare-agent:

Prépare une propriété montrant l'agent d'exécution JaCoCo qui peut être passé comme argument VM à l'application en cours de test. En fonction du type d'emballage de projet par défaut une propriété avec le nom suivant est défini:

  • tycho.testArgLine pour le type d'emballage Eclipse test-plugin et
  • argLine autrement.

Dans la plupart des cas argLine est automatiquement maven-surefire-plugin ramassé que JVM commence à exécuter des tests unitaires - http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argLine

argLine: options de JVM arbitraires pour définir la ligne de commande.

Ceci explique pourquoi vous obtenez une couverture pour les tests unitaires. Pour obtenir la couverture des tests d'intégration, vous devez vous assurer que cette propriété est transmise à la JVM de l'application testée, c'est-à-dire JVM qui exécute Tomcat, ce qui dépend entièrement de la façon dont vous le lancez.

+0

Ai-je besoin de commencer tomcat en fournissant argument suivant -javaagent: c: \\ IAT \\ mavenrepository \\ org \\ \\ jacoco org. jacoco.agent \\ 0.7.10-SNAPSHOT \\ org.jacoco.agent-0.7.10-SNAPSHOT-runtime.jar = destfile = C: \\ Utilisateurs \\ dmahapat \\ Espaces de travail \\ MyEclipse2016 CI \\ JaxRsApp \\ target \\ jacoco-it.exec –

+0

Si vous utilisez Maven pour démarrer Tomcat, 'jacoco-maven-plugin' prépare cet argument pour vous, il vous suffit donc de le passer à Tomcat comme d'habitude Propriété Maven - '$ {argLine}'. – Godin

+0

@debajyotimahapatro s'il vous plaît ne pas oublier de upvote utile et accepter + upvote réponses correctes pour être un bon utilisateur de ce site. – Godin