Vérifiez la couverture avec Codecov dans la configuration Java + Gradle + Wercker

Il a un aspect fort en tant que dossier de travail, mais j'ai créé une procédure de travail pour le contenu du titre, je vais donc le poster.

Aperçu

Il s'agit de la procédure de validation des résultats de mesure de couverture dans Codecov via la phase de construction de Wercker dans le référentiel GitHub des applications Java à l'aide de Gradle.

Codecov

URL

https://codecov.io/gh

Raison de la sélection

Je me demandais lequel utiliser avec une combinaison, mais j'étais d'accord avec Article de référence et j'ai décidé d'utiliser Codecov.

Jacoco

Utilisé pour la mesure de la couverture. Courez de Gradle.

À propos de la version 0.8

Diverses options ont été ajoutées à la nouvelle syntaxe Java, telles que la couverture ou non. Article de référence

À propos de la couverture de constructeur non spécifiée

Pour les constructeurs implicites pour lesquels aucun constructeur n'a été déclaré, si le code de test du constructeur (instanciation) n'est pas écrit, Jacoco le traitera comme non passant et le taux de couverture diminuera. Par exemple, cela peut se produire dans une classe utilitaire avec des méthodes statiques. Pour les classes qui ne sont pas instanciées, le constructeur doit être soigneusement privé, bien qu'il puisse être un peu redondant. Jacoco traitera alors le constructeur comme étant hors de couverture et la couverture de couverture ne diminuera pas inutilement. Si vous déclarez explicitement le constructeur, il doit être utilisé à partir du code produit, assurez-vous donc d'écrire correctement le code de test.

Il semble qu'il ait été pris en charge depuis Jacoco 0.8.0

table des matières

  1. Ajouter le référentiel GitHub à Codecov
  2. Ajout de la description du test jacoco à build.gradle
  3. Ajout d'une description à wercker.yml pour envoyer une couverture à Codecov
  4. Créez codecov.yml et décrivez les conditions OK pour les résultats de mesure de couverture.
  5. Validez les ajouts et lancez la construction de Wercker
  6. Confirmer la transmission de la couverture à Codecov
  7. Forcer la vérification de Codecov dans le référentiel GitHub et rejeter la fusion si le résultat de la mesure de la couverture est NG
  8. Obtenez le badge Codecov

Ajout du référentiel GitHub à Codecov

  1. Accédez à https://codecov.io/gh
  2. Vous pouvez vous connecter avec votre compte GitHub, BitBucket ou GitLab ――Cet article est GitHub, alors sélectionnez GitHub
  3. Les référentiels disponibles pour le compte sélectionné seront affichés, sélectionnez donc les référentiels cibles.
  4. Le jeton d'envoi des informations de couverture à Codecov s'affiche.
  5. Gardez l'écran ouvert car vous utiliserez le jeton plus tard.

Ajout de la description du test Jacoco à build.gradle

  1. Ajoutez ce qui suit à build.gradle.

    //Spécifier le plug-in jacoco pour codecov
    apply plugin: 'jacoco'
    
    jacoco {
        //Les informations de version sont http://www.eclemma.org/jacoco/Voir
        toolVersion = "0.8.1"
    }
    
    jacocoTestReport {
        reports {
            xml.enabled = true
            html.enabled = true
        }
    }
    
    //Lorsque vous exécutez gradle build, vous exécutez également la mesure de la couverture dans Jacoco
    build.dependsOn jacocoTestReport
    
  2. Dans l'exemple de référence, la version Java de targetCompatibility a également été décrite, j'ai donc ajouté ce qui suit également.

    targetCompatibility = 10
    

construction entière.

Rétrospective, y compris l'accumulation jusqu'à présent.

//Spécifiez le plug-in java pour construire respectivement le main et le test
apply plugin: 'java'

//Spécifiez un plug-in de guerre pour l'empaquetage en guerre
apply plugin: 'war'

//Spécifiez le plug-in d'application pour spécifier la classe exécutable et la classe contenant la méthode principale exécutable.
apply plugin: 'application'
//Spécifiez la classe cible d'exécution
mainClassName = 'kentfordevgithub.helloworld.HelloWorld'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 10
targetCompatibility = 10

//Spécifiez le référentiel à utiliser
repositories {
    //Utiliser le référentiel Maven
    mavenCentral()
}

dependencies {
    // JUnit
    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'
    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.2.0'
    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.2.0'
}

//Paramètres d'exécution de test dans Gradle
test {
    //Paramètres pour exécuter Junit5 avec Gradle, Gradle4.Peut être décrit car Gradle prend en charge nativement Junit 5 à partir de 6
    useJUnitPlatform()
    //Nombre de fils de test parallèles(Nombre d'exécutions simultanées)L'ensemble(1 fil pour chaque classe de test)
    maxParallelForks = 4
}

//Spécifiez le plug-in IDE pour prendre en charge chaque IDE
apply plugin: 'eclipse'
apply plugin: 'idea'

//Spécifier le plug-in jacoco pour codecov
apply plugin: 'jacoco'

jacoco {
    //Les informations de version sont http://www.eclemma.org/jacoco/Voir
    toolVersion = "0.8.1"
}

jacocoTestReport {
    reports {
        xml.enabled = true
        html.enabled = true
    }
}

//Lorsque vous exécutez gradle build, vous exécutez également la mesure de la couverture dans Jacoco
build.dependsOn jacocoTestReport

Ajout d'une description à wercker.yml pour envoyer une couverture à Codecov

  1. Ajoutez ce qui suit au bloc de construction.
  1. Ajoutez le jeton Codecov aux variables d'environnement de la phase de construction Wercker
  2. Ouvrez l'écran de l'application cible de Wercker
  3. Ouvrez l'onglet Workflows
  4. Ouvrir la version Pipelines
  1. Ouvrez l'onglet <> Environnement
  2. Entrez le nom de variable d'environnement ci-dessus CODECOV_TOKEN dans Clé.
  1. Entrez le jeton dans Value
  2. Vérifiez Protégé
  1. Cliquez sur le bouton Ajouter pour terminer l'ajout

wercker.yml entier

Rétrospective, y compris l'accumulation jusqu'à présent.

# This references an OpenJDK container from the
# Docker Hub https://hub.docker.com/_/openjdk/
# Read more about containers on our dev center
# http://devcenter.wercker.com/docs/containers/index.html
box: openjdk:10.0.1-jdk

# defining the dev pipeline
dev:
  steps:
    # A step that executes `gradle bootRun` command
    - script:
      name: run gradle
      code: |
        ./gradlew bootRun

# Build definition
build:
  # The steps that will be executed on build
  steps:
    # A step that executes `gradle build` command
    - script:
        name: run gradle
        code: |
          ./gradlew --full-stacktrace -q --project-cache-dir=$WERCKER_CACHE_DIR build
    - script:
        name: post coverage to codecov
        code: |
          bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN

Créez codecov.yml et décrivez les conditions OK pour les résultats de mesure de couverture

  1. Créez codecov.yml dans le répertoire racine du référentiel

  2. Décrivez ce qui suit. --Pour le seuil, etc., reportez-vous à celui défini dans RxJava. --Si vous avez un objectif, définissez-le en vous référant aux Spécifications. --Si le résultat de la mesure de couverture est inférieur aux valeurs cible et seuil, il est traité comme NG.

    codecov:
      notify:
        require_ci_to_pass: yes
    
    coverage:
      status:
        project:
          default:
            target: 95%
            threshold: 1%
    
        patch:
          default:
            target: 95%
            threshold: 1%
    
        changes: no
    

Validez vos ajouts et lancez la version Wercker

  1. Valider et pousser l'ajout
  2. Dans l'article précédent, la construction automatique et le test automatique à Wercker doivent être liés, de sorte que l'envoi des résultats de mesure de couverture à Codecov fonctionne également.

Confirmer la transmission de la couverture à Codecov

  1. Sur l'écran du référentiel cible de Codecov, le résultat de la mesure de couverture lors de la validation ci-dessus est ajouté.
  2. Si vous ouvrez les détails, vous pouvez voir le résultat dans un graphique, etc.

Forcer la vérification de Codecov dans le référentiel GitHub et rejeter la fusion si le résultat de la mesure de couverture est NG

  1. Ouvrez les paramètres dans le référentiel GutHub
  2. Branches ouvertes
  3. Sélectionnez et ouvrez la branche principale
  4. Vérifiez les éléments suivants dans Exiger que les vérifications d'état soient réussies avant la fusion
    • codecov/patch
    • codecov/project
  5. Les demandes d'extraction ultérieures vers le maître ne peuvent pas être fusionnées à moins que le résultat Codecov soit OK

Lorsque le résultat de la vérification est envoyé lentement depuis Codecov

Le résultat de l'exécution Worflow de Wercker est immédiatement reflété, mais il faut un certain temps pour que le résultat de la vérification de Codecov soit reflété. Dans ce cas, vous pouvez exécuter manuellement la notification à partir de l'onglet Build de l'écran des détails de validation de Codecov.

Obtenez le badge Codecov

  1. Vous pouvez obtenir le lien pour afficher le badge à partir de l'écran Paramètres.
  2. Affichez le résultat de la mesure de couverture en haut du référentiel en le décrivant dans README.md.

Recommended Posts

Vérifiez la couverture avec Codecov dans la configuration Java + Gradle + Wercker
Analyse de code statique par Checkstyle avec Java + Gradle
Créez et testez des applications Java + Gradle avec Wercker
Construire Java avec Wercker
Créer un multi-projet Java avec Gradle
Vérifiez la connexion https avec Java
[Java 8] Suppression en double (et vérification en double) avec Stream
Construire un projet Java avec Gradle
Analyse morphologique en Java avec Kuromoji
Faites HelloWorld avec Java / IntelliJ / Gradle
Couverture de test de sortie avec Clover + Gradle
[Java] Vérification de l'existence des éléments avec Stream
Vérifier les paramètres Java dans les pods Kubernetes
Tweak Markdown avec Java flexmark-java
Bonjour tout le monde en Java et Gradle
[Gradle] Construisez un projet Java avec une configuration différente de la convention
Méthode de concurrence en Java avec exemple de base
Application Java CICS-Run - (3) Gestion de build avec Gradle
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans
Diviser une chaîne avec ". (Dot)" en Java
Gérez d'énormes JSON avec Java Lambda
Présentation du test Java automatisé avec JUnit 5 + Gradle
Vérifier l'utilisation du tas avec Java Flight Recorder
Vérifiez avec Java / Kotlin que les fichiers ne peuvent pas être écrits en UAC sous Windows
Lire une chaîne dans un fichier PDF avec Java
Rendre l'environnement SpringBoot1.5 + Gradle4.4 + Java8 + Docker compatible avec Java11
Créer un CSR avec des informations étendues en Java
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
[Gradle] Opérations de construction souvent effectuées dans les projets Java
Extraction de texte en Java à partir de PDF avec pdfbox-2.0.8
Couverture de code Java plus confortable avec Jacoco 0.8.0
En utilisant Gradle avec VSCode, compilez Java → exécutez
Vérifier le comportement statique et public dans les méthodes Java
Conseils Java - Créez un projet Spring Boot avec Gradle
Ajouter un projet dans n'importe quel dossier avec Gradle
Entraînez-vous à travailler avec des paires de substitution Unicode en Java
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Vérifier les arguments d'appel de méthode dans les blocs avec RSpec
Crypter / décrypter avec AES256 en PHP et Java
Programmation utilisant le type de somme directe en Java (news)
S'entendre avec les conteneurs Java dans Cloud Run