2013-08-26 8 views
11

Sto cercando di ottenere la copertura del codice con Sonar e Jenkins. Vedo che il plug-in Sonar di Jenkins esegue correttamente i test case JUnit e completa con successo la compilazione. Ma Sonar non mostra i risultati della copertura del codice (mostra sempre 0,0% come copertura del codice) sul progetto. Ma Sonar mostra "successo test unitario".Sonar non viene visualizzato Copertura del codice dopo la creazione riuscita con il plug-in Jenkins Sonar

Sto usando Maven con Jenkins e Sonar.

ottengo il messaggio di seguito nei registri Jenkins durante l'esecuzione il plugin Sonar:

 
Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec 

Può uno help me come per ottenere una copertura codice corretto su qualsiasi progetto Sonar.

+0

Hai letto http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project e dai una prova ai relativi esempi di progetto? In tal caso, è possibile fornire informazioni più dettagliate: file di registro, configurazione di SonarQube nel file pom, come si esegue SonarQube: mvn clean install/mvn sonar: sonar? Versioni di SonarQube, ecc.? –

+0

Ho letto http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project e ho utilizzato cobertura come plug-in per la copertura del codice, quindi visualizzo la copertura del codice per piccoli progetti. Quando controllo il grande progetto in sonar, vedo solo la copertura del codice - cioè i suoi registri vuoti. Posso trovare il rapporto Cobertura non trovato nel percorso .../coverage.xml. Quale sarebbe la ragione per questo. la strumentazione del plugin di cobertura è andata bene prima di mostrare il messaggio precedente. – Venkat

+1

coverage.xml non è stato generato a causa di OutOfMemeryError: heapspace. Poiché il mio progetto è un progetto così grande quando imposto memoria heap a 2 GB e memoria di cobertura plug-in a sonar da 1,5 GB, viene visualizzata la copertura del codice. – Venkat

risposta

2

ho letto https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project e utilizzati cobertura come il mio codice di copertura plug poi vedo visualizza la copertura del codice per piccoli progetti. Quando controllo un grande progetto in sonar, vedo solo la copertura del codice - significa vuoto. Nei registri ho trovato che il rapporto Cobertura non è stato trovato nel percorso /.../coverage.xml.

coverage.xml non è stato generato a causa di OutOfMemeryError: heapspace. Poiché il mio progetto è un progetto così grande quando imposto memoria heap a 2 GB e memoria di cobertura plug-in a sonar da 1,5 GB, viene visualizzata la copertura del codice.

0

Invece di utilizzare il plug-in del sonar Jenkins per eseguire il sonar, provare a farlo con maven, eseguendo l'obiettivo sonar. Di solito questo è più semplice, quindi si imposta un passaggio aggiuntivo e si modificano tutti i percorsi fino a quando sonar non trova tutti i file rilevanti.

Nel tuo caso, suppongo che possa leggere il rapporto junit/testng, ma non riesca a trovare i risultati jacoco (jacoco.exec). Le uscite del percorso sonar (../sonar/target/jacoco.exec) sono corrette?

+0

Grazie per aver risposto alla mia domanda. Ho provato a eseguire mvn sonar: sonar. Ma non ho avuto fortuna, mancava lo stesso messaggio La copertura del progetto è impostata allo 0% in quanto non è stato eseguito il dumping di dati di esecuzione JaCoCo: /user/mysys/.jenkins/jobs/../workspace/.../sonar/ target/jacoco.exec. Sì, legge i risultati dei test unitari ma fallisce per la copertura del codice. – Venkat

8

Solo perché Sonar ha invocato Surefire correttamente (e hai ricevuto il messaggio "Test di successo dell'unità") non significa che JaCoCo abbia strumentato il tuo codice.

Provare a eseguire JaCoCo direttamente. Si potrebbe scoprire perché JaCoCo sta venendo a mancare direttamente:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo metterà jacoco.exec così come i suoi rapporti XML/HTML all'interno target/jacoco. Oppure fallirà e, si spera, avrai un'idea migliore del perché.

Un problema molto comune è che il javaagent JaCoCo non funzionerà se hai cambiato l'infallibile argLine a tutti, perché jacoco:prepare-agent imposta solo la proprietàargLine che in questo scenario, è convenientemente ignorato. È possibile impostare preparare-agente immobiliare di propertyName a qualcos'altro (come jacocoArgLine) e comprendono che nel argLine config:

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

0

Secondo questa blog post, probabilmente dimentica di impostare la proprietà sonar.binaries nelle proprietà del progetto

Don’t forget sonar.binaries, otherwise, you might get something like « Project coverage is set to 0% since there is no directories with classes. » in your logs.

[...] 
sonar.surefire.reportsPath=target/surefire-reports 
sonar.jacoco.reportPath=target/jacoco.exec 
sonar.binaries=target/classes 
[...] 
0

il sonar plug-in non riesce a trovare il file di report generato da Jacoco.

Nel tuo pom (genitore o bambino) cerca il tag <destFile> sotto jacoco/prepare-agent esecuzione. Cambia il nome e la posizione in target/jacoco.exec e sei a posto!