2013-10-16 14 views
5

Sto generando correttamente 2 file .exec di Jacoco nella cartella "build/jacoco" dopo aver eseguito una build basata su Gradle e test di integrazione.SonarQube - integrationTest.exec - sonarRunner (Gradle) o comando "sonar-runner" - mostra 0.0% di copertura

comando Gradle: "Gradle pulito accumulo integrationTest"

Una volta fatto, genera i seguenti file nella cartella .exec build/jacoco.

  1. test.exec
  2. integrationTest.exec

seguito è il mio file sonar-project.properties. Quando eseguo "sonar-runner" da Linux, il prompt lo completa ma sul dashboard di SonarQube per questo progetto, vedo che il test dell'unità dice il 34,5%, ma i test di integrazione dicono lo 0,0%. Entrambi i file .exec hanno dimensioni valide. Ho anche fatto "cat" sui file .exec e ho trasmesso l'output al comando "strings" in Linux e ho visto che integrationTest.exec ha colpito le funzioni Test - Ho solo 1 file .java.

Quando eseguo "Gradle generazione pulita integrationTest sonarRunner -Dxxx.xxx = yyy -Dyyy.xx = zzz", cioè facendo passare tutte le variabili del sonar come accennato nel file sonar-project.properties utilizzando -D opzione, funziona ma lo stesso risultato sul dashboard del progetto SonarQube. La dashboard del sonar di Project ha entrambi i widget configurati per Test di unità/integrazione e sto includendo i test IT per mostrare la copertura generale. La copertura totale mostra il 34,5% (che è il valore% del test unitario). Sonar vede test.exec, integrationTest.exec e genera automaticamente anche il file overall-xxx.exec durante questa operazione.

NOTA: Non sono dove - durante l'avvio di Tomcat su una console separata stucco/linux -OR entro Gradle costruire lo script, fornendo qualsiasi valore o l'impostazione JAVA agente per Jacoco. Sto ricevendo il file integrationTest.exec e il file test.exec, quindi non sono sicuro che JVM debba essere arrestato una volta che i test IT sono completi. Non penso di aver bisogno di quelli in quanto ho una dimensione di file valida per i file .exec.

mio: - Perché sonar non sta ottenendo IT copertura sul cruscotto, anche se sto impostando/passando la seguente variabile correttamente:?

sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

-bash-3.2 $ cat sonar- project.properties

# Root project information 
sonar.projectKey=com:company:product:ProjectA 
sonar.projectName=ProjectA 
sonar.projectVersion=1.0 
# optional description 
sonar.projectDescription=ProjectA Service 

#Tells SonarQube that the code coverage tool by unit tests is JaCoCo 
sonar.java.coveragePlugin=jacoco 

#Tells SonarQube to reuse existing reports for unit tests execution and coverage reports 
sonar.dynamicAnalysis=reuseReports 

# Some properties that will be inherited by the modules 
sonar.sources=src/java,test/java,src/java-test 

# Sonar Unit Test Report path 
sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

sonar.junit.reportsPath=build/UT/results 

# Sonar Binaries 
sonar.binaries=build/classes/main 

risposta

2

restringendo la causa: credo che sia a causa del file .exec per test di integrazione. Per dimostrarlo: ho passato il file exex UT a entrambi i reportPaths nelle variabili Sonar, ad esempio, il seguente e SonarQube hanno scelto entrambi i test di copertura UT/IT. Ciò dimostra che se il file .exec per i test IT è buono (che credo sia Ma devo ricontrollare), Sonar sceglierà il file .exec e mostrerà una percentuale di copertura valida anziché 0,0%. Nota: il seguente è solo per determinare se Sonar sta selezionando i valori oppure no. La variabile itReportPath dovrebbe utilizzare il file .exe generato dai test di integrazione di Jacoco.

sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
#sonar.jacoco.itReportPath=build/jacoco/testintegrationTest.exec 
sonar.jacoco.itReportPath=build/jacoco/test.exec 

OK Trovato il problema. Stavo eseguendo il task integrationTest in Gradle e NON stavo collegando jacocoagent.jar (come da documentazione Jacoco) all'ambito JVM di destinazione (istanza di Tomcat). Una volta fatto ciò, ho rimosso la sezione jacoco {...} dal task integrationTest in Gradle (build.gradle o GRADLE_HOME/init.d/some.common.gradle file come questo collega l'agente jacoco alla JVM Java in cui Gradle è in esecuzione). Ora, una volta jacocoagent.jar è stato collegato alla JVM di Tomcat (come da linea in basso che ho aggiunto nello script startup.sh di Tomcat e ho aggiunto la variabile al comando che avvia Tomcat), quindi ho eseguito l'attività Gradle (integrationTest) per l'esecuzione dei test IT.

PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false 

Poi mentre Gradle era in corso, le prove corse e ho ottenuto un file (jacocoIT.exec alla posizione indicata) con un po 'la dimensione del file ma questo non è ancora quella definitiva. Ho dovuto interrompere l'istanza di sessione/JVM di Tomcat eseguendo lo script stop.sh di Tomcat. Una volta interrotto Tomcat, ho notato che la dimensione del file jacocoIT.exec è aumentata in modo significativo e questo era il file jacocoIT.exec finale valido (che avevo bisogno di sonarRunner Gradle task O sonar-runner eseguibile per prelevare e inviare con successo dati di copertura del codice IT alla dashboard del progetto). Una volta terminato, ho ricevuto sia UT + IT che la copertura del codice combinato.

sonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec 
sonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
Problemi correlati