2010-10-15 14 views
8

Ho una suite di test che emette i risultati dei test in formato Python Unit Test: http://docs.python.org/library/unittest.htmlBuildbot parsing prova Python Unità risultati

Esiste un modulo Buildbot/plugin esistente che può analizzare questa forma?

Esempio:

DigitalReadWrite_02           ... ok 
DigitalReadWrite_03           ... ok 
DigitalReadWrite_04           ... ok 
PWMoutput_02 (PWM=128 50% LOW 49% HIGH)     ... ok 
PWMoutput_03 (PWM=128 50% LOW 49% HIGH)     ... ok 
PWMoutput_04 (PWM=128 50% LOW 49% HIGH)     ... ok 
-------------------------- 
Ran 6 tests in 1.652s 

OK 

Ho scritto un parser personalizzato, ma ha solo i casi di base. Vale la pena di renderlo completo per tutti i tipi di formato di test dell'unità Python.

+1

Sì, ne vale la pena –

+0

È un lavoro per un test * runner * come 'nose' o' py.test' per fornire un output parseable come il formato XUnit XML. – jfs

risposta

3

No, non ha senso sviluppare un parser. È possibile ottenere le informazioni equivalenti dalle classi nel modulo runner.py.

considerare di estendere entrambe le classi TextTestRunner e TextTestResult con la vostra logica personalizzata (python 2.7). L'output che hai elencato è prodotto da TextTestResult.

In alternativa si può estendere solo TextTestResult e modificare l'attributo class TextTestRunner.resultclass impostandolo al nuovo nome della classe di estensione.

I dati che è possibile estrarre da TextTestResult e inserirli in un elenco di dizionari sono maggiori o equivalenti ai dati che il parser è in grado di estrarre.

La struttura unittest consente tali trucchi grazie al suo design flessibile. Spero che questo sia stato utile.

[EDIT ]

avrei trovato pubblicare i risultati finora (ad esempio come codice open source su GitHub) potenzialmente molto utile per le persone che trovano la tua domanda!

Detto questo, dubito che sarebbe facile migliorare il parser effettivo oltre l'analisi di regexp di base.

Se si desidera continuare l'approccio di analisi del testo, potrebbe essere necessario enumerare e descrivere "tutti i tipi di formato di test dell'unità Python" che si desidera coprire/supportare. Se sei fortunato a inserire una descrizione di questo tipo sotto forma di una grammatica senza contesto, allora potresti essere in grado di sviluppare un parser per questo, che coprirebbe "quei" casi come una forma di linguaggio.

Prendete la mia parola di cautela: se l'analisi del testo non è coperta da semplice regexp'ing e vi è la possibilità che si stia tentando di analizzare un linguaggio irregolare (sensibile al contesto) - molto probabilmente lo trovere estremamente difficile realizzare.

+0

Sarebbe bello sapere per le persone che non hanno accesso al corridore – trinth

+0

Qualsiasi scelta tra espressioni regolari e programmazione orientata agli oggetti è solo una questione di convenienza. A proposito, se si dice che non si ha accesso o controllo sulla classe Runner, cioè sull'organizzazione dell'ambiente di test, l'analisi del testo può essere utile per i report di testo. Ma sarei molto avvisato se questo è davvero così .. se non hai il controllo adeguato sul tuo flusso di lavoro di prova == potrebbe non portarti molto comunque. –

+0

Sono d'accordo con te praticamente parlando. Ma nel caso qualcuno sia interessato a farlo come esercizio o per divertimento, potrebbe volere una risposta alla domanda originale. – trinth