Plugins intégrés du cadre Nose
- Plugin attrib : catégorisation des cas de test Permet d'organiser les tests selon des critères personnalisés, comme la durée ou la priorité. Deux approches sont disponibles.
Exemple avec décorateur :
from nose.plugins.attrib import attr
@attr(category='long_running', priority=1)
def test_large_download():
import urllib
# Simuler une opération lente
urllib.urlopen("http://example.com/largefile")
Exécution conditionnelle via ligne de commande :
$ nosetests -a category=long_running
Multiple attributs possibles :
$ nosetests -a priority=1,category=high
Ce mécanisme permet une exécution ciblée des tests selon des règles métier.
- Plugin capture : gestion de la sortie standard Par défaut, Nose capture la sortie
stdoutetstderrdurant les tests. Pour désactiver ce comportement :
$ nosetests -s
Cette option est utile lorsqu’on souhaite voir immédiatement les affichages print() ou les logs en temps réel.
- Plugin collect : liste des tests à exécuter Utilisez
--collect-onlypour obtenir une vue d’ensemble des tests sans les exécuter :
$ nosetests --collect-only -v test_module.py
test_module.test_case_1 ... ok
test_module.test_case_2 ... ok
Très pratique pour vérifier le découpage des tests avant l’exécution.
- Plugin skip : sauter certains tests Permet d’ignorer des cas de test dynamiquement :
from nose.plugins.skip import SkipTest
@attr(env='dev')
def test_feature_in_dev_only():
raise SkipTest("Fonctionnalité non disponible en production")
Exécution filtrée :
$ nosetests -a env=dev
Le test sera marqué comme « SKIP » dans les résultats.
- Plugin logcapture : journalisation des événements Capture les messages de logging pendant les tests. Configuration avancée via un fichier de configuration :
logging.conf :
[loggers]
keys=root,nose,myapp
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=verboseFormatter
[formatter_verboseFormatter]
format=%(asctime)s | %(levelname)-8s | %(name)s | %(funcName)s:%(lineno)d | %(message)s
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=verboseFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=handlers.RotatingFileHandler
level=INFO
formatter=verboseFormatter
args=('logs/test.log', 'a', 1048576, 5)
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[logger_nose]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=nose
propagate=0
Utilisaiton :
$ nosetests -v --logging-config=logging.conf
- Plugin testid : identification numérique des tests Ajoute un identifiant unique à chaque test :
$ nosetests -v --with-id
#1 tests.test_a ... ok
#2 tests.test_b ... ok
Exécution par ID :
$ nosetests -v --with-id 2
#2 tests.test_b ... ok
- Plugin failed : exécution uniquement des tests échoués Après un échec, seul le test raté est relancé :
$ nosetests --failed
#1 test.test_failure ... FAILED
Lorsque tous les tests passent, --failed redevient global.
- Plugin xunit : sortie XML compatible JUnit Essentiel pour les pipelines CI/CD (comme Jenkins). Active la génération d’un rapport XML :
$ nosetests --with-xunit --xunit-file=results.xml
Dans Jenkins, configurez "Publish JUnit Test Result Report" avec results.xml.
- Options supplémentaires : -i, -e, -I
-i REGEX: exécute uniquement les tests dont le nom correspond au motif.-e REGEX: exclut les tests correspondant au motif.-I FILE: ignore un fichier entier.
Exemple :
$ nosetests -v -e test_regression
- Compléments pratiques
- -s : désactive la capture de stdout/stderr.
- -v : active les détails d’exécution, incluant les messages de log.
Rapports HTML (plugin tiers) Utilisez nose-html-reporting pour générer des rapports visuels :
$ nosetests --with-html --html-file=report.html
Affichage des commentaires en français Utilisez __doc__ pour ajouter des descriptions lisibles :
def test_cancel():
u'''Tester l’annulation d’une opération'''
raise SkipTest
@attr(mode='critical')
def test_fail():
u'''Cas de test qui échoue intentionnellement'''
print("Échec prévu")
assert False
Les descriptions apparaissent dans les rapports générés.