Creació d’informes de cobertura de code per a test unitaris i d’integració amb JaCoCo Maven Plugin

X

Privadesa i galetes

Aquest lloc utilitza galetes. A l’continuar, acceptes el seu ús. Aconsegueix més informació; per exemple, sobre com controlar les galetes.

Entès

Anuncis

Per als desenvolupadors que feien ús de l’connector cobertura plugin Maven, hauran descobert amb pena que si estan fent servir la versió Java 1.7, aquest connector no és òptim.

Com considero que és molt important realitzar l’anàlisi de cobertura vaig buscar per intentar trobar un nou connector que pogués realitzar les tasques que realitzava amb el plugin cobertura i finalment vaig trobar JaCoCo code coverage library.

JaCoCo és una llibreria lliure per analitzar cobertura de test. JaCoCo fa servir la llibreria estàndard de JVM.

jacoco

El problema d’aquest connector que vaig trobar a l’intentar configurar va ser que no era gens senzill. Vaig llegir bastant tutorials fins a aconseguir configurar-lo. Aquest bloc pretén ser un resum dels passos seguits per a la seva configuració.

Com sempre, anem a resumir els requisits que es pretenen cobrir amb aquesta tasca.

  • Es pretén aconseguir informes de cobertura tant dels tests unitaris com d’integració.
  • els informes han de ser generats en rutes diferents, és a dir, els informes dels tests unitaris han de ser generats en una ruta diferent de la que es faci servir per a els tests d’integració.

Comencem amb la configuració.

configurant JaCoCo Maven plugin

En general, el connector JaCoCo s’usa amb dos propòsits :

  • Proveir d’un accés a l’JaCoCo runtime agent el qual grava l’execució dels tests.
  • Crear informes de cobertura de codi des de l’execució dels tests gravats pel agent JaCoCo runtime.

Per configurar el connector JaCoCo s’han de seguir aquests passos:

  • Incloure el connector JaCoCo Maven plugin a la secció de connector dels nostres o fitxer pom.xml
  • Configura els informes de cobertura de test unitaris.
  • Configura els informes de cobertura de test d’integració.

A continuació es descriuen cadascun dels passos.

incloure connector JaCoCo Maven plugin a la secció connectors de el fitxer pom.xml

Per incloure el connector dins de la Seccionde connector s’ha d’incloure la següent declaració en la secció de plugis del nostre fitxer pom.xml

<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.6.4</version></plugin>

Configura informe cobertura test unitaris.

Per configurar l’execució de cobertura de codi dels tests unitaris s’han d’afegir dues execucions a la declaració de l’connector.

  • la primera execució crea els punts de l’JaCoCo Runtime agent. Això assegura que les dades de l’execució seran escrits en el fitxer /target/coverage-reports/jacoco.ut.exec. S’estableix el valor de la propietat a surefireArgLine. Aquest valor és passat com a argument de la VM quan el test sigui executat.
  • La segona execució crea l’informe de cobertura de codi per als test unitaris després de ser executats. Assegura que les dades són llegits des del fitxer target / coverage-reports / jacococ-ut.exec. Els informes són guardats en el directori / target / site / jacoco-ut.

La part més important de la configuració de l’connector es escribre a continuació.

<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.6.4</version> <executions> <!-- Prepara la propiedad para que el agente JaCoCo runtime será pasado como argumento VM cuando el plugin maven surefire sea ejecutado. --> <execution> <id>pre-unit-test</id> <goals> <goal>prepare-agent</goal> </goals> <configuration> <!-- Establece el path al archivo el cual contiene los datos de la ejecución. --> <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> <!-- Establece el nombre de la propiedad que contiene la configuracion del agente VM runtime JaCoCo. --> <propertyName>surefireArgLine</propertyName> </configuration> </execution> <!-- Asegura que el informe de cobertura de codigo para test unitarios es creado después de ejecutar los test unitarios. --> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <!-- Establece el path del archivo que contiene los datos de ejecución. --> <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> <!-- Establece el directorio de salida para los informes de cobertura. --> <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> </configuration> </execution> </executions></plugin>

Configurant els informes de cobertura de codi per tests d’integració

Igual que s’ha inclòs la configuració per executar cobertura de codi per als tests unitaris també es pot configurar per als test d’integració, per a ells hem de configurar el connector afegint dues execucions a el connector.

  • La primera execució crea els punts de l’JaCoCo Runtime agent. Això assegura que les dades de l’execució seran escrits en el fitxer /target/coverage-reports/jacoco.it.exec. S’estableix el valor de la propietat a failsafeArgLine. Aquest valor és passat com a argument de la VM quan el test sigui executat.
  • La segona execució crea l’informe de cobertura de codi per als test d’integració després de ser executats. Assegura que les dades són llegits des del fitxer /target/coverage-reports/jacococ-it.exec. Els informes són guardats en el directori / target / site / jacoco-it.

<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.6.4</version> <executions> <!-- Las ejecuciones requeridas para test unitarios son omitidas. --> <!-- Prepara la propiedad para el agente runtime JaCoCo el cual es pasado como argumento de la VM cuando maven failsafe sea ejecutado. --> <execution> <id>pre-integration-test</id> <phase>pre-integration-test</phase> <goals> <goal>prepare-agent</goal> </goals> <configuration> <!-- Establece el path al archivo que contiene la información de ejecución. --> <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile> <!-- Establece la propiedad que contiene la configuración del agenteJaCoCo runtime agent. --> <propertyName>failsafeArgLine</propertyName> </configuration> </execution> <!-- Asegura que los informes de cobertura para los test de integración seran ejecutados despues de ejecutar los test de integracion. --> <execution> <id>post-integration-test</id> <phase>post-integration-test</phase> <goals> <goal>report</goal> </goals> <configuration> <!-- Establece el path al archivo que contiene los datos de ejecucion. --> <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile> <!-- Establece el directorio de salida para los test de cobertura. --> <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> </configuration> </execution> </executions></plugin>

Configuració de l’connector Maven SureFire Plugin

Es faran servir el connector maven SureFire plugin per executar els tests unitaris. A causa de que el quese pretén és crear la cobertura de codi dels tests unitaris, hem d’assegurar que l’agent JaCoCo és executat quan els nostres test són executats.Per assegurar això podem afegir el valor de la propietat surefireArgLine com a valor de de la propietat de l’connector argLine.

A continuació incloem la configuració comentada per al connector Maven SureFire Plugin:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.15</version> <configuration> <!-- Establece el argumento VM que sera usado cuando los test unitarios son ejecutados. --> <argLine>${surefireArgLine}</argLine> <!-- Salta los test unitarios cuando el valor de la propiedad skip.unit.tests es true --> <skipTests>${skip.unit.tests}</skipTests> <!-- Excluye los test de integracion cuando los test unitarios son ejecutados.. --> <excludes> <exclude>**/IT*.java</exclude> </excludes> </configuration></plugin>

Configuració de l’connector Maven failsafe plugin

Com ja es va explicar en anterior entrada, aquest plugin és el que s’usa per executar els test d’intgración. Així, de maner anàloga, per poder executar la cobertura de codi dels nostres test d’integració, hem d’assegurar que l’agent de JaCoCo serà executat quan els nostres test d’integració siguin executats. Per a això podem incloure dins de la configuració de l’connector el valor de la propietat failsafeArgLine dins de la propietat argLine de l’connector.

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.15</version> <executions> <!-- Asegura que tanto los test de integracion y los objetivos de failsafe maven plugin seran ejecutados. --> <execution> <id>integration-tests</id> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <!-- Establece el argumento VM usado cuando los test de integracion son ejecutados. --> <argLine>${failsafeArgLine}</argLine> <!-- Salta los test de integracion si el valor de la propiedad skip.integration.tests es true --> <skipTests>${skip.integration.tests}</skipTests> </configuration> </execution> </executions></plugin>

Crendo informes de cobertura de codi

  • Amb tot això ja tenim configurat tot per poder executar els informes de cobertura de codi. A continuació anem a configurar com crear els informes de cobertura de codi per a test unitaris i d’integració.
  • xatejar dev serà executat durant el desenvolupament i serà el perfil per defecte de la nostra construcció. Quan aquest perfil sigui executat, sól test unitaris seran executats.
  • xatejar integration-test serà usat per executar test d’integració.
  • xatejar all-test serà usat per executar tant test unitaris com d’integració.

Es poden executar diferents informes de cobertura executant els següent comandaments:

La comanda MVN clean test executarà test unitaris i crearà els informes de cobertura de test unitaris en el directori / target / site / jacoco-ut

la comanda MVN clean test -P integration-test executarà els tests d’integració i crearà els informes de cobertura de codi per als test d’integració en el directori / target / site / jacoco-it.

La comanda MVN clean verify -P all-tests executarà els tests unitaris i d’integració i crearà els informes de cobertura de codi de test unitaris i d’integració.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *