Vorrei utilizzare il modulo di registrazione python per registrare tutto l'output da unittest in modo da poterlo incorporare in un framework di testing che sto tentando di scrivere. L'obiettivo è di eseguire i test con 2 set di output, uno con output semplice che indica le fasi del test case e un output di livello di debug in più in modo che quando le cose vanno male abbiamo più informazioni possibili. L'output verrebbe inserito in due file, uno che potrei inviare via email alle persone e un altro in caso di guasti. Ho notato che TextTestRunner può utilizzare un flusso, potrebbe essere utilizzato con il modulo di registrazione? Sto pensando di utilizzare alcune delle nuove funzionalità di python 2.7.Come si può usare il modulo di registrazione in python con il modulo unittest?
risposta
Si potrebbe, ma non sono sicuro che sia il tuo approccio migliore.
Per questo approccio, si farebbe:
istanziare un flusso in memoria che può essere utilizzato da
TextTestRunner
. Questo è il genere di cosa per cuiio.StringIO
sarebbe quasi perfetto, tranne che funziona solo con l'input Unicode e non sono sicuro che TextTestRunner scriva correttamente Unicode nello stream. La tua altra opzione sarebbe quella di codificare il tuo flusso in memoria che serve al tuo scopo, magari avvolgendoStringIO
con un codificatore.Crea il tuo TextTestRunner e inizializzalo con questo flusso in memoria.
Creare una classe che legge dallo stream e la scrive nel registro.
Questo potrebbe essere semplice come:
class StreamLogger(object):
def __init__(self, input_stream, output_logger):
self.input_stream = input_stream
self.output_logger
def run(self):
while True:
line = input_stream.readline()
if not line:
break
output_logger.error(line)
problemi con questo approccio:
- Non è molto se qualsiasi flessibilità nel dirigere diverse parti uscita TextTestRunner a diversi livelli di log.
- TextTestRunner, se configurato in modo errato, scriverà un mucchio di cose che probabilmente non si desidera. La verbosità di default è 1, che scriverà punti di progresso mentre stai provando ... il che probabilmente si intrometterà nell'output di logging.
- Se si esegue questa operazione in modo ingenuo, si chiamerà
stream_logger.run()
solo dopo aver scritto tutto l'output nello stream. Pertanto, non si otterrà l'output di registrazione in tempo reale e la data/ora di registrazione sarà inutile. Potresti risolvere questo problema creando un thread separato per la lettura, ad esempio, ma poi dovresti scegliere/rollare un flusso in grado di gestire un thread reader e writer che funzioni simultaneamente, o forgiare un processo e abbandonare il flusso in memoria, o qualcosa di relativamente complicato.
L'approccio che suggerirei invece è quello di rinunciare a corsi d'acqua e semplicemente rotolare il proprio test di runner - chiamato, per esempio, LoggingTestRunner - che scrive l'uscita di test allo strumento esattamente il modo in cui si desidera uscita. Questo ti permetterà di evitare tutti e tre questi problemi.
- 1. ipdb con modulo unittest python
- 2. Perché il modulo cProfile non funziona con unittest?
- 3. Python cross-modulo di registrazione
- 4. Come si riconosce il parlato con il modulo Python Dragonfly?
- 5. Django unittest e beffardo il modulo richieste
- 6. Come usare il modulo sqlite3 con l'elettrone?
- 7. Python 3.2: non si può importare il modulo sqlite3
- 8. Come impedire il troncamento del file di log con il modulo di registrazione python?
- 9. Come ottenere il file al quale si sta collegando il modulo di registrazione Python?
- 10. Barra di avanzamento Python TRAMITE il modulo di registrazione
- 11. Come installare il modulo png in python
- 12. Sopprime newline nel modulo di registrazione Python
- 13. Come importare selettivamente il modulo in python?
- 14. non può importare il modulo
- 15. Modulo di registrazione Python: logger personalizzati
- 16. Python unittest: eseguire test in un altro modulo
- 17. Proxy con il modulo 'Richieste' di Python
- 18. Come si corregge il Modulo già caricato UserWarnings in Python?
- 19. Modulo di registrazione Magento
- 20. HTTP Elimina con il modulo richieste python
- 21. Python - Come si può usare l'alias di un modulo per importare i suoi sottomoduli?
- 22. Modulo di registrazione personalizzato Wordpress
- 23. Come posso sopprimere newline nel modulo di registrazione Python.
- 24. impaginazione con il modulo cmd python
- 25. python installare il modulo apiclient
- 26. Come utilizzare la classe TextTestRunner dal modulo unittest di Python in modalità failfast?
- 27. Il file AIFF-C non può essere letto con il modulo aifc in python
- 28. Come saltare un intero modulo unittest Python in fase di esecuzione?
- 29. Si può usare Clutter con Python 3?
- 30. Come si può estendere un modulo Javascript definito con AMD?
Grazie. Sembra proprio quello che devo fare comunque per il resto delle cose che devo fare. – user197674