2012-02-16 8 views
7

Ho scritto diversi test XMLUnit (che si adattano al framework JUnit) in groovy e posso eseguirli facilmente sulla riga di comando come da groovy doco ma non capisco cosa altro devo fare per questo per produrre l'output xml necessario a Jenkins/Hudson (o altro) per visualizzare i risultati pass/fail (come this) e il report dettagliato degli errori ecc. (come this). (scuse a proprietari di immagine)Come potrei produrre un rapporto di test JUnit per test groovy, adatto al consumo da parte di Jenkins/Hudson?

Attualmente, il mio script calcio d'inizio è questo:

def allSuite = new TestSuite('The XSL Tests') 

//looking in package xsltests.rail.* 
allSuite.addTest(AllTestSuite.suite("xsltests/rail", "*Tests.groovy")) 

junit.textui.TestRunner.run(allSuite) 

e questo produce qualcosa di simile:

Running all XSL Tests... 
.... 
Time: 4.141 

OK (4 tests) 

Come posso fare questo creare un xml rapporto di prova JUnit file adatto per essere letto da Jenkins/Hudson?

Devo dare il via ai test con un altro corridore JUnit?

Ho visto risposta this ma vorrei evitare di dover scrivere il mio output del rapporto di test.

+1

Stai utilizzando alcuni framework di test? Cosa stai usando per costruire il progetto? –

+0

C'è qualche avversione nell'usare uno strumento di costruzione come Gradle/Maven/Ant? –

+0

@Eric Questo è un progetto parallelo e stava cercando di mettere in moto qualcosa rapidamente. Tuttavia, potrei seguire la via dell'apprendimento e dell'uso di Gradle così come lo è nella mia sfera di "cose ​​da imparare". –

risposta

4

Dopo un po 'di hackage ho preso il suggerimento di Eric Wendelin e sono andato con Gradle.

Per fare ciò ho spostato i miei test di unità groovy nella struttura di directory richiesta src/test/groovy /, con le risorse di supporto (input e file XML di output previsto) nella directory/src/test/resources /.

Tutte le librerie richieste sono state configurate nel build.file di Gradle, come descritto (nella sua interezza) qui:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.+' 

    groovy module('org.codehaus.groovy:groovy:1.8.2') { 
     dependency('asm:asm:3.3.1') 
     dependency('antlr:antlr:2.7.7') 
     dependency('xmlunit:xmlunit:1.3') 
     dependency('xalan:serializer:2.7.1') 
     dependency('xalan:xalan:2.7.1') 
     dependency('org.bluestemsoftware.open.maven.tparty:xerces-impl:2.9.0') 
     dependency('xml-apis:xml-apis:2.0.2') 
    } 
} 

test { 
    jvmArgs '-Xms64m', '-Xmx512m', '-XX:MaxPermSize=128m' 

    testLogging.showStandardStreams = true //not sure about this one, was in official user guide 

    outputs.upToDateWhen { false } //makes it run every time even when Gradle thinks it is "Up-To-Date" 
} 

Questo vale il plugin Groovy, imposta da usare Maven per afferrare le dipendenze specificate e poi aggiunge alcuni valori in più per il compito "test" built-in .

Una cosa in più in là è l'ultima linea che rende Gradle eseguito tutti i miei test ogni volta e non solo quelli che pensa siano nuovo/cambiato, questo rende Jenkins gioca bene.

Ho anche creato un file gradle.properties per ottenere attraverso il Corporate proxy/firewall etc:

systemProp.http.proxyHost=10.xxx.xxx.xxx 
systemProp.http.proxyPort=8080 
systemProp.http.proxyUser=username 
systemProp.http.proxyPassword=passwd 

Con questo, ho creato un progetto di 'free-style' a Jenkins che i sondaggi la nostra repo Mercurial periodicamente e ogni volta che qualcuno esegue un XSL aggiornato al repository, verranno eseguiti tutti i test.

Uno dei miei obiettivi iniziali era la possibilità di produrre la grafica Jenkins/Hudson pass/fail standard e i rapporti JUnit, che è un successo: Pass/Fail con JUnit Reports.

Spero che questo aiuti qualcun altro con requisiti simili.

0

Dato che stai chiedendo lo scopo di esporre il rapporto a Jenkins/Hudson, presumo che tu abbia una build Maven/Ant/etc che sei in grado di eseguire. Se è vero, la soluzione è semplice.

Prima di tutto, non c'è praticamente alcuna differenza tra i test JUnit di Groovy e Java. Quindi, tutto ciò che devi fare è aggiungere l'attività/plugin Ant/Maven alla tua build e fare eseguire i test della tua unità Groovy (proprio come faresti se fossero scritti in Java). Tale esecuzione creerà rapporti di prova. Da lì, è possibile configurare semplicemente la build Hudson/Jenkins per esaminare la directory in cui i report di test vengono creati durante il processo di generazione.

+0

No Non sto usando framework di costruzione come Maven o Ant, è semplicemente una raccolta di test unitari. Non c'è build, solo una serie di test con la speranza di avere un conteggio pass/fail per ogni volta che viene avviato. –

0

È possibile scrivere la propria personalizzata RunListener (o SuiteRunListener). Richiede comunque che tu scriva del codice, ma è molto più pulito dello script a cui hai fornito un link. Se lo desideri, posso inviarti il ​​codice per un giornalista JUnit che ho scritto in JavaScript per Jasmine e puoi "tradurlo" in Groovy.

2

trovo il modo più veloce per il bootstrap questa roba è con Gradle:

# build.gradle 
apply plugin: 'groovy' 

task initProjectStructure() << { 
    project.sourceSets.all*.allSource.sourceTrees.srcDirs.flatten().each { dir -> 
     dir.mkdirs() 
    } 
} 

Quindi eseguire gradle initProjectStructure e spostare la vostra fonte in src/main/groovy e test per test/main/groovy.

Sembra molto (davvero è < 5 minuti di lavoro), ma ottieni molte cose gratuitamente. Ora è possibile eseguire gradle test ed eseguirà i test e produrrà JUnit XML che è possibile utilizzare in build/test-reports nella directory del progetto.

+1

Grazie per la piccola spinta da usare Gradle. Mentre la mia risposta (chiaramente) ha risolto il mio problema, la taglia 50pt è tua. –

+0

Grazie :) - Penso che adorerai Gradle. –