web-dev-qa-db-fra.com

Py.test contrôle de la journalisation

Nous avons récemment passé à Py.Test pour python Test (qui est fantastique BTW). Cependant, j'essaie de comprendre comment contrôler la sortie du journal (c'est-à-dire le module de journalisation intégré python). Nous avons installé Pytest-Capturelog et cela fonctionne comme prévu et lorsque nous voulons voir des journaux, nous pouvons passer une option --NologCapture.

Cependant, comment contrôlez-vous le niveau de journalisation (E.G. info, débogage, etc.) et filtrez également la journalisation (si vous êtes uniquement intéressé par un module spécifique). Existe-t-il des plugins existants pour Py.Test pour y parvenir ou avons-nous besoin de rouler le nôtre?

Merci, jonny

30
jjh

Installation et utilisation du plug-in Pytest-captuelog pourrait satisfaire la plupart de vos besoins de pytest/journalisation. Si quelque chose manque, vous devriez être capable de le mettre en œuvre relativement facilement.

9
hpk42

Comme Holger a dit que vous pouvez utiliser Pytest-captuelog :

def test_foo(caplog):
    caplog.setLevel(logging.INFO)
    pass

Si vous ne voulez pas utiliser Pytest-capturelog, vous pouvez utiliser un stdout Streamhandler dans votre configuration de journalisation afin que Pytest capturera la sortie du journal. Voici un exemple basicconfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
9
Aron Curzon

Un peu de contribution tardive, mais je peux recommander Pytest-Logging pour une simple solution de capture de connexion à l'enregistrement. Après pip install pytest-logging Vous pouvez contrôler la verbosité des journaux (affichés à l'écran) avec

$ py.test -s -v tests/your_test.py
$ py.test -s -vv tests/your_test.py
$ py.test -s -vvvv tests/your_test.py

etc ... NB - le -s Le drapeau est important, sans cela py.test fera filtrer tout le sys.stderr informations.

8
danodonovan

Pytest a maintenant une prise en charge native pour le contrôle de la journalisation via le luminaire caplog; Pas besoin de plugins.

Vous pouvez spécifier le niveau de journalisation d'un enregistreur particulier ou par défaut pour l'enregistreur racine:

import pytest

def test_bar(caplog):
    caplog.set_level(logging.CRITICAL, logger='root.baz')

Pytest capture également la sortie du journal en caplog.records Vous pouvez donc affirmer des niveaux et des messages enregistrés. Pour plus d'informations, voir la documentation officielle ici et ici .

2
Alaya

Un peu de contribution encore ultérieure: vous pouvez essayer Pytest-Logger . La nouveauté de ce plugin est la journalisation au système de fichiers: Pytest fournit à NodeID pour chaque élément de test, qui peut être utilisé pour organiser le répertoire des journaux de session de test (avec l'aide de Pytest TMPDir Facility et ses crochets de début/d'extrémité).

Vous pouvez configurer plusieurs gestionnaires (avec des niveaux) pour le terminal et le système de fichiers séparément et fournir des options propres CMDLINE pour filtrer les enregistreurs/niveaux pour le faire fonctionner pour votre environnement de test spécifique - par ex.. Par défaut, vous pouvez connecter tout au système de fichiers et une petite fraction au terminal, qui peut être modifié à la base de session avec --log Option si nécessaire. Le plugin ne fait rien par défaut si l'utilisateur ne définit aucun crochets.

1
aurzenligl