Posso unire i dati di copertura Emma da unità e test di integrazione degli obiettivi?
-
19-09-2019 - |
Domanda
Abbiamo il nostro TeamCity costruisce configurato utilizzando una catena di generazione, in modo che i nostri test di unità e di integrazione e test possono essere eseguiti in parallelo, quando innescato da un commit:
- Crea Chain - dipendente da:
- Prove di unità
- test di integrazione
Sto cercando un modo che possiamo combinare / fondere i dati di copertura generati dai test di unità e di integrazione nella catena di generazione, in modo che possiamo ottenere un quadro migliore di quanto reale di codice è coperto da due messi insieme.
Il piano è quindi di essere in grado di monitorare i cambiamenti nella copertura del codice di impegno, e forse mancanza costruisce se le percentuali cadere!
Soluzione
Ho creato il target 'costruire la catena' in modo che i file di copertura (* .EM, * .ec) dagli obiettivi di unità e di integrazione sono a sua disposizione.
ho creato un file di configurazione formica appositamente per il target catena di build (con l'aiuto del doco emma!):
<project name="coverage-merge" basedir="." default="all">
<!-- directory that contains emma.jar and emma_ant.jar: -->
<property name="emma.dir" value="${basedir}/lib"/>
<property name="coverage.dir" location="${basedir}/coverage"/>
<path id="emma.lib">
<pathelement location="${emma.dir}/emma-teamcity-3.1.1.jar"/>
<pathelement location="${emma.dir}/emma_ant-2.0.5312.jar"/>
</path>
<taskdef resource="emma_ant.properties" classpathref="emma.lib"/>
<target name="all" depends="-report"/>
<target name="-report">
<emma>
<report sourcepath="${src.dir}" sort="+block,+name,+method,+class"
metrics="method:70,block:80,line:80,class:100">
<infileset dir="${coverage.dir}" includes="**/*.em, **/*.ec"/>
<!-- for every type of report desired, configure a nested
element; various report parameters
can be inherited from the parent <report>
and individually overridden for each report type:
-->
<txt outfile="${coverage.dir}/coverage.txt" depth="package"
columns="class,method,block,line,name"/>
<xml outfile="${coverage.dir}/coverage.xml" depth="package"/>
<html outfile="${coverage.dir}/coverage.html" depth="method"
columns="name,class,method,block,line"/>
</report>
</emma>
</target>
</project>
... che unisce tutti i file di copertura in un unico report!
Il parametro metrics
del report
imposta la soglia clou per il report HTML, in modo che le percentuali contro i pacchetti ei file che è inferiore alla soglia di sono evidenziati in rosso.
Modifica l'output XML mi permetterà di usare qualcosa come Andariel per eseguire un XPath sui risultati, e quindi forzare la build a fallire se le soglie non sono soddisfatte!
Altri suggerimenti
Tutto il riempimento. * File vengono rimossi all'inizio del costruire, in modo da avere al fine di garantire che la piena ricompilazione delle fonti viene eseguita nella build per avere il file coverage.em vero e proprio.
Quello che ho fatto per risolvere questo è qui sotto:
- Usa
-out emma.em
in TeamCity costruire i passaggi di configurazione, e assicurarsi che l'opzione è impostata sumerge
true
per preservare i dati strumentati. - Nell'ultimo passaggio quando viene generato rapporto di copertura, utilizzare Task mossa di formica
<move file="$YOUR_PATH/emma.em" tofile="$YOUR_PATH/coverage.em"/>
per rinominare a quello di default. - Il rapporto emma prenderà il file predefinito em per generare il rapporto.
Spero che questo aiuti chiunque che cosa è di avere un rapporto di copertura di emma accumulato.
La maggior parte degli strumenti di copertura del codice che ho incontrato non sembrano avere un modo per combinare i risultati dei test da sottosistemi diversi o sovrapposti. Come avete sottolineato, si tratta di una capacità molto utile.
I nostri strumenti di copertura SD prova fare hanno questa capacità e sono disponibili per Java, C, C ++, C #, PHP e COBOL. In realtà, gli strumenti di copertura di test SD possono combinare i dati di copertura di test da più lingue in un unico risultato monolitico, in modo da poter avere una panoramica della copertura di test per le applicazioni multi-lingue. E 'in grado di mostrare la copertura su tutti i linguaggi di origine coinvolti, oltre a fornire report di riepilogo.