2012-09-16 17 views
14

Ho una configurazione di test per un sistema cloud che utilizza una miscela di python per il controllo del livello di processo e junit per l'ispezione dello stato interno. Essenzialmente, porto su VM diverse macchine come il cloud e poi una junit VM che fa parte del cloud ma guida i test e controlla lo stato interno. Le nostre risorse di gestione del cloud esistenti sono guidate da python e vorrei mantenerlo.Generazione di rapporti JUnit dalla riga di comando

Ho una configurazione di lavoro che verrà eseguito dalla riga di comando tramite JUnit

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests> 

ma questo non produrre un file di report. So che la formica è in grado di produrre un report xml, ma non voglio coinvolgere formiche in questo processo (ho già abbastanza parti in movimento).

C'è un modo per lanciare junit dalla riga di comando in modo che produca un report?

Idealmente, avrei i test di junit produrre report xml, i test python producono report xml e quindi unirli per il consumo dal nostro sistema CI.

Aggiornamento: L'esecuzione della riga di comando deve supportare Windows, Linux e Mac. Non siamo autorizzati a spedire una formica esterna, anche se la confezione di una formica interna potrebbe essere un'opzione.

+0

Windows o Unix (in termini di riga di comando)? –

risposta

16

La libreria JUnit non ha opzioni di output XML. Per ottenere una cosa del genere, dovrai scrivere il tuo RunListener, che ascolterà l'output e nel tuo caso scriverà il file XML.

Tuttavia, per ottenere il file XML nel formato corretto in modo che possa essere letto dal sistema di CI, penso che sarebbe molto più facile da usare solo formica, o tramite la riga di comando utilizzando un build.xml (JUnitReport) o utilizzando java api: How can i use Apache ANT Programmatically.

EDIT: Inizialmente, abbiamo avuto quattro opzioni:

  1. Usa formica dalla riga di comando
  2. Usa formica di programmazione (utilizzando l'API Java)
  3. Utilizzare il XMLJUnitResultFormatter direttamente con JUnitCore
  4. Crea un RunListener personalizzato che produce l'output XML corretto.

date le restrizioni aggiunti dal PO, che non possono utilizzare formica dalla riga di comando, che elimina 1.

Dopo aver guardato più da vicino il compito Ant JUnit, sembra essere impossibile da usare questo con JUnitCore (aggiungendo un TestListener), perché ant usa direttamente il nome della classe di test, quindi non puoi fare una classe bridge. Da XMLJUnitResultFormatter.java

private void formatError(String type, Test test, Throwable t) { 
    ... 
    nested.setAttribute(ATTR_TYPE, t.getClass().getName()); 

    String strace = JUnitTestRunner.getFilteredTrace(t); 
    Text trace = doc.createTextNode(strace); 
    nested.appendChild(trace); 
} 

Questo elimina 3.

Invoke Formica di programmazione, tramite l'API Java. Non riesco a trovare alcuna documentazione recente su questo. Questo sembra essere difficile.

Quindi, infine, vorrei fare 4, un RunListener personalizzato, utilizzando il codice da XMLJUnitResultFormatter come base. E poi, lo pubblicherei su github.com, quindi questa domanda potrebbe essere risolta correttamente :-)

+0

dispiace, mi sembra in grado di fare linebreaks apparire ... Se ho capito bene, si sta suggerendo che dovrei: 1) includere il vaso formica 2) principale personalizzato 3) aggiungere RunListener del vaso formica a un'istanza di JUnitCore 4) lasciarlo strappare? o c'è una versione più breve del modulo 1) includere il contenitore di formiche 2) invocarlo più direttamente e gestirà la parte JUnitCore? – Matt

+1

Ant invoca junit, esegue i test. Quindi lo fornirebbe con un build.xml e invocherà formica. Il modo più semplice sarebbe quello di assicurarsi che il form sia stato installato da qualche parte nel tuo sistema, e poi lo faccia dalla riga di comando. Invece di java ... avresti un form ... –

+1

Purtroppo, richiedere un'installazione di formica è una delle cose che non posso fare. Questo messaggio è venuto giù dall'alto. – Matt