Je voudrais utiliser le module de journalisation python pour enregistrer toutes les sorties de unittest afin de pouvoir l'incorporer dans un framework de test que j'essaie d'écrire. Le but de ceci est d'exécuter les tests avec 2 ensembles de sortie, un avec une sortie simple qui indique les étapes du cas de test et une sortie de niveau plus debug afin que lorsque les choses tournent mal, nous avons autant d'informations que possible. La sortie serait placée dans deux fichiers, un que je pourrais envoyer par courrier électronique aux gens, et un autre gardé en cas d'échecs. J'ai remarqué que TextTestRunner peut utiliser un flux, cela pourrait-il être utilisé avec le module de journalisation? Je prévois d'utiliser certaines des nouvelles fonctionnalités de python 2.7.Comment utiliser le module de journalisation en python avec le module unittest?
Répondre
Vous pourriez, mais je ne suis pas sûr que ce soit votre meilleure approche.
Pour cette approche, vous devez:
instancier un flux en mémoire qui peut être utilisé par
TextTestRunner
. C'est le genre de chose qui serait presque parfait pourio.StringIO
, sauf que cela fonctionne uniquement avec l'entrée Unicode, et je ne suis pas sûr que TextTestRunner écrit Unicode correctement dans le flux. Votre autre option serait de coder votre propre flux en mémoire qui remplit votre rôle, peut-être en enveloppantStringIO
avec un encodeur.Créez votre propre TextTestRunner et initialisez-le avec ce flux en mémoire.
Créez une classe qui lit le flux et l'écrit dans le journal.
Cela pourrait être aussi simple que:
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)
problèmes avec cette approche:
- Vous n'avez pas beaucoup si une certaine flexibilité pour diriger les différentes parties de sortie TextTestRunner à différents niveaux de journalisation. TextTestRunner, s'il est mal configuré, écrira un tas de choses que vous ne voulez probablement pas. La verbosité par défaut est 1, ce qui écrira des points de progrès pendant que vous testez ... ce qui ne vous gênera probablement pas dans la sortie de journalisation.
- Si vous le faites naïvement, vous appelez
stream_logger.run()
uniquement après avoir écrit toutes vos sorties dans le flux. Ainsi, vous n'obtiendrez pas votre sortie de journalisation en temps réel, et vos horodatages de journalisation seront inutiles. Vous pouvez résoudre ce problème en générant un thread séparé pour la lecture, par exemple, mais vous devez alors choisir/lancer un flux capable de gérer un thread de lecture et d'écriture simultanément, ou un fork et un flux in-memory ou quelque chose de relativement compliqué.
L'approche que je vous suggère est au lieu de renoncer à des flux et simplement rouler votre propre lanceur de test - appelé, par exemple, LoggingTestRunner - qui écrit la sortie de test à l'enregistreur précisément la façon dont vous voulez sortie. Cela vous permettra d'éviter ces trois problèmes.
- 1. Problèmes de journalisation avec le module de journalisation de Python
- 2. Module Unittest Kohana erreur, comment utiliser?
- 3. Erreur liée au module unittest de python
- 4. Comment utiliser le module _Qt python?
- 5. Comment écrire un unittest pour importer un module en Python
- 6. Problème avec le module Python
- 7. Comment afficher le format de date en utilisant le module de journalisation Python
- 8. Comment faire fonctionner NSLog avec le module de journalisation de Python lors de l'utilisation de PyObjC?
- 9. Comment empêcher la troncature de fichier journal avec le module de journalisation python?
- 10. python - rafraîchir avec le module webbrowser
- 11. Utiliser le module win32service avec IronPython
- 12. ET dans le découpage de Python avec le module
- 13. module pour le flux pcap en python
- 14. en utilisant le module python dans java avec jython
- 15. Python et le module hashlib
- 16. python Module RSA comment utiliser Java
- 17. Comment utiliser le module pour float/double?
- 18. Reposer le module python MySQLdb
- 19. importations Python par le module de dossier
- 20. Importation d'un module python .net - « Aucun module le signal nommé »
- 21. Module dans le découpage de Python
- 22. Rediriger stdout de plusieurs processus vers le module de journalisation python
- 23. Déclare le nom du module des classes pour la journalisation
- 24. Comment implémenter le module mib dans net-snmp avec python?
- 25. Erreurs avec le module de mécanisation de Python
- 26. fondu dans le module Image Python
- 27. Python: charger le module par son nom
- 28. problème avec le module POSIX
- 29. Utiliser le module de sous-processus Python 2.6 en Python 2.5
- 30. Python Module de lit
Merci. Cela ressemble à ce que je dois faire de toute façon pour le reste des choses que je dois faire. – user197674