FAQ
Domande dalla parte superiore della mia testa da quel momento sono impazzito con Jacoco.
Il mio server delle applicazioni (jBoss, Glassfish ..) si trova in Iraq, in Siria, qualunque cosa ... È possibile ottenere una copertura multi-modulo durante l'esecuzione di test di integrazione su di esso? Anche Jenkins e Sonar si trovano su server diversi.
Sì. Devi usare l'agente jacoco che gira in modalità output=tcpserver
, jacoco ant lib. Fondamentalmente duejar
secondi. Questo ti darà il 99% di successo.
Come funziona l'agente Jacoco?
Aggiungi una stringa
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
sul server delle applicazioni JAVA_OPTS e riavviarlo. Solo in questa stringa[your_path]
deve essere sostituito solo con il percorso di jacocoagent.jar, archiviato (memorizzalo!) Nella VM in cui è in esecuzione il server delle app. Da quel momento in cui avvii il server delle app, tutte le applicazioni distribuite verranno monitorate in modo dinamico e la loro attività (che significa utilizzo del codice) sarà pronta per ottenere in formato jacocos .exec su richiesta tcl.
Posso ripristinare l'agente jacoco per iniziare a raccogliere i dati di esecuzione solo dal momento in cui è iniziato il mio test?
Sì, a tale scopo hai bisogno di jacocoant.jar e dello script di build ant situati nell'area di lavoro di jenkins.
Quindi, in pratica, ciò di cui ho bisogno da http://www.eclemma.org/jacoco/ è che jacocoant.jar si trova nell'area di lavoro di jenkins e jacocoagent.jar si trova sulla VM del mio server di app?
Giusto.
Non voglio usare la formica, ho sentito che anche il plugin jacoco maven può fare tutto.
Non è vero, il plug-in Jacoco Maven può raccogliere i dati dei test unitari e alcuni dati dei test di integrazione (vedi Arquillian Jacoco ), ma se ad esempio hai dei test sicuri come build separato in jenkins e vuoi mostrare la copertura multi-modulo, posso vedrai come il plugin Maven può aiutarti.
Cosa produce esattamente l'agente Jacoco?
Solo i dati di copertura in .exec
formato. Il sonar può quindi leggerlo.
Jacoco deve sapere dove si trovano le mie lezioni di java?
No, sonar, ma non Jacoco. Quando fai il mvn sonar:sonar
percorso per le lezioni entra in gioco.
E la sceneggiatura della formica?
Deve essere presentato nell'area di lavoro di jenkins. Il mio script di formica, l'ho chiamato jacoco.xml
sembra così:
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
</project>
Due parametri obbligatori che dovresti passare quando invochi questo script lo
-Dworkspace=$WORKSPACE
usano per indicare lo spazio di lavoro di jenkins e l' -Djacoco.host=yourappserver.com
host senzahttp://
Nota anche che ho messo my jacocoant.jar
in $ {workspace} /tools/jacoco/jacocoant.jar
Cosa dovrei fare dopo?
Hai avviato l'app server con jacocoagent.jar?
Hai inserito script di formiche e jacocoant.jar nell'area di lavoro di jenkins?
Se sì, l'ultimo passaggio è configurare una build jenkins. Ecco la strategia:
- Richiama il bersaglio formica
jacocoReset
per ripristinare tutti i dati precedentemente raccolti.
- Esegui i tuoi test
- Richiama il bersaglio di formica
jacocoReport
per ottenere il rapporto
Se tutto va bene, vedrai it-jacoco.exec
nel tuo spazio di lavoro di compilazione.
Guarda lo screenshot, ho anche ant
installato nel mio spazio di lavoro in $WORKSPACE/tools/ant
dir, ma puoi usarne uno installato nei tuoi jenkins.
Come inviare questo rapporto nel sonar?
Maven sonar:sonar
farà il lavoro (non dimenticare di configurarlo), lo punta su pom.xml principale in modo che esegua tutti i moduli. Utilizzare il sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
parametro per indicare al sonar dove si trova il report del test di integrazione. Ogni volta che analizzerà nuove classi di moduli, cercherà informazioni sulla copertura in it-jacoco.exec
.
Ho già jacoco.exec nella mia directory `target`,` sonar mvn: sonar` lo ignora / rimuove
Per impostazione predefinita mvn sonar:sonar
, clean
elimina la directory di destinazione, utilizzare sonar.dynamicAnalysis=reuseReports
per evitarlo.