Fusion des rapports D'intégration et de test D'unité avec JaCoCo

je génère des rapports de sécurité avec maven avec le plugin JaCoCo, mais je ne peux les obtenir que dans des rapports séparés. J'aimerais avoir une vue d'ensemble de la couverture (fusion entre les tests unitaires et les tests D'intégration).

après ce que je pense être une recherche approfondie sur google, je n'ai pu trouver qu'un moyen de le faire avec Sonar. Est-il un moyen plus simple de faire cela?

question connexe: Maven unité distincte Essais d'essai et D'intégration

20
demandé sur Community 2015-10-26 18:42:39

5 réponses

vous devriez jeter un oeil à la documentation de jacoco maven plugin qui contient un merge objectif.

8
répondu khmarbaise 2015-10-26 16:03:35

j'ai récemment mis en œuvre: après quelques maux de tête et beaucoup de tests, j'ai une configuration qui fonctionne à merveille.

                 <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                    <executions>
                        <execution>
                            <id>pre-unit-test</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                                <propertyName>surefireArgLine</propertyName>
                            </configuration>
                        </execution>
                        <execution>
                            <id>pre-integration-test</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <configuration>
                                <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
                                <propertyName>testArgLine</propertyName>
                            </configuration>
                        </execution>

                        <execution>
                            <id>post-integration-test</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-unit-test</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                            </configuration>
                        </execution>
                        <execution>
                            <id>merge-results</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>merge</goal>
                            </goals>
                            <configuration>
                                <fileSets>
                                    <fileSet>
                                        <directory>${project.build.directory}/coverage-reports</directory>
                                        <includes>
                                            <include>*.exec</include>
                                        </includes>
                                    </fileSet>
                                </fileSets>
                                <destFile>${project.build.directory}/coverage-reports/aggregate.exec</destFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-merge-report</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/aggregate.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <argLine>${surefireArgLine}</argLine>
                <skipTests>${skip.unit.tests}</skipTests>
                <includes>
                    <include>**/*UT.java</include>
                    <include>**/*MT.java</include>
                    <include>**/*Test.java</include>
                </includes>
                <skipTests>${skipUTMTs}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
                <argLine>${testArgLine}</argLine>
                <excludes>
                    <exclude>**/*UT*.java</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

comme vous pouvez le voir, il y a 6 exécutions Jacoco distinctes pour exécuter les tests, fusionner les fichiers et créer un rapport agrégé. En plus de la config Jacoco, vous devez également configurer Surefire et Failsafe pour prendre un argument de Jacoco (Surefire exécute les tests de l'unité et Failsafe exécute les tests d'intégration).

toute la configuration que j'ai utilisée devrait être là, ce que vous faites avec elle est votre architecture de conception pour la faire correspondre à vos exigences souhaitées. Personnellement, je recommande un regard dans ce que j'exclus et inclure dans surefire et failsafe si vous avez des problèmes avec les fichiers ne sont pas lus.

18
répondu Chad Van De Hey 2017-01-12 23:45:45

ce n'est pas la réponse que vous cherchez, mais quand même...

dans la plupart des cas, vous ne devez pas fusionner la couverture des tests unitaires et d'intégration.

la valeur des tests unitaires est d'améliorer la conception de votre application et de s'assurer que les cases de coin de votre code fonctionne correctement. Vous devriez essayer d'avoir une haute branche de la couverture des tests unitaires.

la valeur de vos tests d'intégration est qu'ils assurent que le principal les cas d'utilisation de votre application fonctionne correctement et que l'ensemble de la pile est correctement intégré. Vous devriez essayer d'avoir une grande couverture fonctionnelle pour vos tests d'intégration. (Mais il est assez difficile de mesurer la couverture fonctionnelle avec un outil).

si vous avez besoin de tests d'intégration pour améliorer la couverture de votre succursale, c'est une bonne indication que vous devriez revoir la conception de votre code. Et si vous avez déjà une couverture de branche élevée sans tests d'intégration, en ajoutant ne devrait pas modifier de façon significative vos paramètres.

N'hésitez pas à voter cette réponse car elle est un peu de sujet et assez opiniâtre...

17
répondu Guillaume 2015-10-26 16:14:05

s'appuyer sur la réponse du Tchad, voici ma configuration. Il est configuré comme un profil séparé appelé jacoco afin que je puisse l'allumer et l'éteindre facilement. Il utilise uniquement la configuration par défaut. Il peut créer un rapport de couverture de code séparé pour les tests unitaires, un rapport de couverture de code séparé pour les tests d'intégration et aussi un rapport de couverture de code combiné.

    <profile>
        <id>jacoco</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>pre-unit-test</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>post-unit-test</id>
                            <phase>test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>pre-integration-test</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>post-integration-test</id>
                            <goals>
                                <goal>report-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>merge-results</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>merge</goal>
                            </goals>
                            <configuration>
                                <fileSets>
                                    <fileSet>
                                        <directory>${project.build.directory}</directory>
                                        <includes>
                                            <include>*.exec</include>
                                        </includes>
                                        <excludes>
                                            <exclude>aggregate.exec</exclude>
                                        </excludes>
                                    </fileSet>
                                </fileSets>
                                <destFile>${project.build.directory}/aggregate.exec</destFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-merge-report</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/aggregate.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
0
répondu Nikolaos Georgiou 2018-04-18 08:22:52

peut - être plus belle façon est de réaliser est d'utiliser le même fichier jacoco, mais laissez-le un autre test, qui fonctionne pour nous-unité et il tests.

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <skip>${maven.surefire.skipTests}</skip>
                            <propertyName>maven.surefire.argLine</propertyName>
                            <!-- using the same dest file for both UT and IT -->
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-prepare-agent-integration</id>
                        <goals>
                            <goal>prepare-agent-integration</goal>
                        </goals>
                        <configuration>
                            <skip>${maven.failsafe.skipTests}</skip>
                            <propertyName>maven.failsafe.argLine</propertyName>
                            <!-- append to the UT dest file -->
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                            <append>true</append>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>${maven.surefire.skipTests}</skipTests>
                <failIfNoTests>${maven.surefire.failIfNoTests}</failIfNoTests>
                <!-- allow argLine to be modified by other plugins, e.g. jacoco -->
                <argLine>@{maven.surefire.argLine}</argLine>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
                <skipTests>${maven.failsafe.skipTests}</skipTests>
                <failIfNoTests>${maven.failsafe.failIfNoTests}</failIfNoTests>
                <!-- allow argLine to be modified by other plugins, e.g. jacoco -->
                <argLine>@{maven.failsafe.argLine}</argLine>
            </configuration>
        </plugin>
0
répondu Cipous 2018-09-11 15:31:48