Présentation

Effectué

Pytest peut faire plus que découvrir des tests et signaler des résultats d’assertion. À mesure qu’une suite de tests Python augmente, la logique de test répétée et le code de configuration partagée rendent les tests plus difficiles à lire, déboguer et étendre. Dans ce module, vous allez découvrir trois fonctionnalités de pytest qui aident à maintenir les tests Python lisibles et gérables : la paramétrisation, les fixtures et la fixture intégrée monkeypatch.

Ce module suppose que vous pouvez écrire des scripts Python, exécuter des commandes dans un terminal et exécuter des tests pytest simples dans un environnement virtuel avec Python 3.10 ou version ultérieure. Si vous avez besoin d’aide sur Windows, consultez Configurez votre environnement de développement Python sur Windows. Consultez la documentation venv de Python pour plus d'informations sur l'environnement virtuel.

La paramétrisation avec @pytest.mark.parametrize exécute la même fonction de test avec plusieurs ensembles d’arguments, et pytest collecte chaque invocation générée en tant qu’unité de test distincte. Les fixtures sont des fonctions déclarées auprès de pytest, généralement à l’aide de @pytest.fixture, que les tests ou d’autres fixtures invoquent par leur nom. Elles peuvent fournir des valeurs réutilisables et, le cas échéant, effectuer un nettoyage une fois que l’étendue du test ou de la fixture est achevée. Le fixture monkeypatch altère temporairement des attributs, des éléments de dictionnaire, des variables d’environnement, sys.path ou le répertoire de travail courant, puis restaure automatiquement l’état initial une fois le test ou le fixture appelant terminé.

Les exemples de ce module sont des tests de style unitaire, mais les mêmes fonctionnalités pytest s’appliquent à des suites de test fonctionnelles ou d’intégration plus volumineuses. Les exemples utilisent l'instruction Python assert ; pytest fournit une introspection d'assertion pour que les rapports d'échec incluent des valeurs utiles de l'expression.

Quand utiliser ces fonctionnalités

  • Recourez à la paramétrisation lorsque vous êtes amené à parcourir différentes entrées dans un test ou à dupliquer des fonctions de test quasi identiques pour des variations mineures d’entrées. La paramétrisation développe une définition de test en plusieurs éléments de test, de sorte que chaque entrée obtient son propre rapport de réussite/échec.
  • Utilisez des fixtures lorsque plusieurs tests ont besoin de la même préparation (par exemple, des données de test, d’un fichier temporaire ou d’une connexion de base de données) ou ont besoin d’un nettoyage prévisible après leur exécution.
  • Utilisez monkeypatch quand un test doit isoler le code de l’état externe( par exemple, les variables d’environnement, le répertoire de travail actuel ou une fonction qui appelle un service distant) sans modifier définitivement cet état.

Vous commencerez par remplacer les boucles et les tests presque dupliqués par le paramétrage. Ensuite, vous allez utiliser des fixtures pour partager la configuration et le nettoyage, passer en revue les fixtures intégrées telles que tmp_path et monkeypatch, et pratiquer la refactorisation des méthodes de configuration et de démontage de style xUnit dans une fixture.

À la fin de ce module, vous serez prêt à appliquer ces fonctionnalités pytest pour réduire la répétition, développer la couverture et améliorer les diagnostics d'échec dans vos suites de tests Python.

Pour plus d’informations, consultez la documentation pytest pour les assertions, la paramétrisation des tests, les fixations et monkeypatch.