Me gustaría usar el módulo de registro de Python para registrar todos los resultados de unittest para poder incorporarlo a un marco de prueba que estoy tratando de escribir. El objetivo de esto es ejecutar las pruebas con 2 conjuntos de resultados, uno con resultados simples que indiquen los pasos del caso de prueba y un nivel de depuración más alto para que cuando las cosas vayan mal tengamos la mayor cantidad de información posible. La salida se colocaría en dos archivos, uno que podría enviar por correo electrónico a las personas y otro en caso de fallas. Me di cuenta de que TextTestRunner puede usar una secuencia, ¿podría usarse con el módulo de registro? Estoy planeando usar algunas de las nuevas características en Python 2.7.¿Cómo se puede usar el módulo de registro en python con el módulo unittest?
Respuesta
Podría, pero no estoy seguro de que sea su mejor enfoque.
Para este enfoque, lo haría:
una instancia de una corriente en memoria que puede ser utilizado por
TextTestRunner
. Este es el tipo de cosa queio.StringIO
sería casi perfecto, excepto que funciona solo con entrada Unicode, y no estoy seguro de que TextTestRunner escriba Unicode correctamente en la transmisión. Su otra opción sería codificar su propia transmisión en la memoria que sirva a su propósito, tal vez envolviendoStringIO
con un codificador.Crear su propio TextTestRunner e inicializar con esta corriente en memoria.
crear una clase que se lee de la corriente y lo escribe en el registro.
Esto podría ser tan simple como:
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)
problemas con este enfoque:
- Usted no tiene mucho si cualquier flexibilidad en la dirección de las diferentes partes de la producción TextTestRunner a diferentes niveles de registro.
- TextTestRunner, si está mal configurado, escribirá un montón de cosas que probablemente no desee. La verbosidad predeterminada es 1, que escribirá puntos de progreso mientras está probando ... lo que probablemente solo se interpondrá en su salida de registro.
- Si lo hace ingenuamente, llamará al
stream_logger.run()
solo después de haber escrito todos sus resultados en la transmisión. Por lo tanto, no obtendrá su salida de registro en tiempo real, y sus marcas de tiempo de registro serán inútiles. Podría resolver esto al generar un hilo separado para leer, por ejemplo, pero luego tendría que elegir/hacer rodar una secuencia que pueda manejar un hilo de lector y escritor que trabaje simultáneamente, o bifurcar un proceso y deshacerse de la corriente en la memoria, o algo relativamente complicado.
El enfoque me gustaría sugerir en cambio, es renunciar a los arroyos y simplemente rodar su propio corredor de prueba - llamada, por ejemplo, LoggingTestRunner - que escribe la salida de prueba al registrador exactamente de la forma que desee de salida. Esto le permitirá evitar estos tres problemas.
- 1. ¿Cómo usar el módulo win32gui con Python?
- 2. Cómo evitar el truncamiento del archivo de registro con el módulo de registro de Python?
- 3. ¿Por qué el módulo cProfile no funciona con unittest?
- 4. Python cruzada módulo de registro
- 5. No se puede usar el módulo en dobles?
- 6. Python 3.2: no se puede importar el módulo del sqlite3
- 7. Usar el módulo de subproceso Python 2.6 en Python 2.5
- 8. No se puede encontrar el módulo 'mscorwks.dll'
- 9. Python: no se puede importar el módulo urandom (OS X)
- 10. Node.js - no se puede encontrar el módulo
- 11. Salida de registro duplicada al usar el módulo de registro de Python
- 12. Python: ¿cómo se puede usar el alias de un módulo para importar sus submódulos?
- 13. No se puede cargar el módulo EJB
- 14. Python módulo de registro: registradores personalizados
- 15. Proxies con el módulo 'Solicitudes' de Python
- 16. paginación con el módulo python cmd
- 17. ¿Cómo detecta el módulo unittest de Python los casos de prueba?
- 18. falta el módulo python bz2
- 19. Python y el módulo hashlib
- 20. Nodo v0.8.5 REPL: No se puede encontrar el módulo al requerir el módulo npm instalado
- 21. No se puede instalar el módulo PyPdf 2
- 22. Python Child no puede usar un Módulo Parent Imported
- 23. No se puede encontrar el módulo 'connect', cuando se intenta usar require ('connect'). Utils.parseCookie con nodejs
- 24. Python importación absoluta en el módulo falla
- 25. Con el módulo de multiprocesamiento
- 26. Cómo usar el módulo node.js 'nodeunit' con archivos coffeescript
- 27. Problema con sys.argv [1] cuando el módulo unittest está en un script
- 28. ¿Cómo incluir el registro en un módulo Perl?
- 29. Reconociendo cuándo usar el operador de módulo
- 30. ¿Cómo se reconoce el habla con el módulo de Python Dragonfly?
Gracias. Eso suena a lo que necesito hacer de todos modos para el resto de las cosas que necesito hacer. – user197674