Recherche de site Web

PyTest : Framework de test Python pour les ingénieurs back-end


Introduction

En tant qu'ingénieur backend ou ingénieur QA/test, garantir la qualité et la fiabilité de votre code est important. Une façon d'y parvenir est d'utiliser des frameworks de test Python pour automatiser le processus de test et identifier les bogues ou problèmes dans votre code avant que le logiciel ne soit publié ou déployé.

Ils offrent les avantages suivants :

  • Les frameworks de test améliorent la qualité du code.

  • Les tests automatisés font gagner du temps et des efforts.

  • La réutilisation du code optimise les efforts de test et réduit la duplication.

  • Les frameworks de test Python s'intègrent parfaitement avec d'autres outils, modules et bibliothèques.

Dans ce guide étape par étape, vous apprendrez comment mettre en œuvre PyTest - l'un des cadres de test Python les plus populaires.

Conditions préalables

Avant de plonger dans les détails des frameworks de tests Python, concentrons-nous d'abord sur les prérequis pour mettre en œuvre PyTest.

  • Installation de Python: Veuillez vous assurer que Python est installé sur votre système. Vous pouvez télécharger la dernière version de Python depuis le site officiel de Python.

  • Installation de Pip : Pip (installateur de paquets pour Python) est un outil utilisé pour gérer des paquets, des bibliothèques et des dépendances en Python. Il nous permet d'installer et de gérer des paquets Python. Assurez-vous d'avoir pip installé sur votre système.

Vous pouvez vérifier si pip est installé en exécutant la commande suivante dans votre invite de commande/terminal :

  1. python -m pip --version

ou

  1. python3 -m pip --version

Vous pouvez consulter ce site officiel de Python pour installer des packages.

Qu'est-ce qu'un cadre de test Python ?

Le framework de test Python est un ensemble d'outils et de bibliothèques qui fournissent une structure et des directives pour écrire et exécuter des tests en Python pour l'automatisation des tests. Il s'assure que le code répond aux normes de qualité souhaitées. Il est essentiel et utile pour chaque développeur backend, ingénieur en logiciels, DevOps et ingénieur QA/Test. Parmi les frameworks de test Python célèbres et largement utilisés, on trouve Pytest, PyUnit, DocTest, Testify, Robot et bien d'autres.

Mise en œuvre de PyTest

Installation de PyTest

Pour commencer avec PyTest, vous devez l'installer sur votre système. Ouvrez votre terminal et exécutez la commande suivante :

  1. pip install pytest

Cette commande téléchargera et installera la dernière version de PyTest ainsi que ses dépendances.

Écriture de cas de test

Maintenant que PyTest est installé, commençons à écrire des cas de test unitaires de base.

Veuillez créer un nouveau fichier Python et le nommer test_backend.py. Ce fichier définira nos cas de test en utilisant la syntaxe de PyTest.

Remarque: Par défaut, PyTest découvrira et exécutera tous les cas de test dans les fichiers dont les noms commencent par “test_” ou se terminent par “_test”. Le processus de découverte de pytest va analyser de manière récursive le dossier actuel et ses sous-dossiers à la recherche de fichiers dont les noms commencent par “test_” ou se terminent par “_test”. Les tests situés dans ces fichiers sont ensuite exécutés.

  1. import pytest
  2. def test_addition():
  3. assert 3 + 3 == 6
  4. def test_subtraction():
  5. assert 5 - 4 == 1
  6. def test_multiplication():
  7. assert 4 * 4 == 16
  8. def test_division():
  9. assert 10 / 2 == 5

Dans l'exemple ci-dessus, nous avons défini quatre cas de test unitaire de base sous forme de fonctions : test_addition, test_subtraction, test_multiplication, et test_division. Le mot-clé assert est utilisé lors du débogage du code et vous permet de tester si une certaine condition dans votre code retourne True ; sinon, cela renverra une AssertionError.

Exécution des cas de test, Exécution de tests spécifiques

Pour exécuter les tests, allez dans le dossier où vous avez enregistré le fichier test_backend.py, puis exécutez la commande ci-dessous dans votre terminal ou invite de commandes :

  1. pytest

Or,

  1. python -m pytest

Sortie :

test session starts
==================================================

platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0

rootdir: ~/Python Testing Frameworks

collected 4 items

test_backend.py ....
==================================================

4 passed in 0.01s                                                                                                                                                                 [100%]

Lors de l'utilisation de PyTest, vous n'avez pas besoin d'exécuter manuellement chaque cas de test dans votre fichier. L'outil trouvera et exécutera automatiquement tous les cas de test définis. Si tout se passe bien et que toutes les assertions sont vraies, vous obtiendrez un joli résumé des résultats des tests ainsi que le nombre de tests réussis comme montré ci-dessus.

Supposons qu'un des tests échoue, alors nous remarquerions la sortie suivante :

test session starts
==================================================

platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0

rootdir: ~/Python Testing Frameworks

collected 4 items

test_backend.py ...F  
==================================================                                                                                                                                                                 [100%]

FAILURES
==================================================

test_division 

    def test_division():

>       assert 10 / 2 == 6

E       assert (10 / 2) == 6

test_backend.py:13: AssertionError

short test summary info
==================================================

FAILED test_backend.py::**test_division** - assert (10 / 2) == 6

1 failed, 3 passed in 0.01s 

Test de découverte

PyTest offre de puissantes capacités de découverte de tests qui vous permettent d'organiser vos cas de test de manière structurée. Par défaut, PyTest découvrira et exécutera tous les cas de test dans des fichiers dont les noms commencent par « test_ » ou se terminent par « _test ». Cependant, vous pouvez personnaliser le processus de découverte des tests en utilisant diverses options en ligne de commande ou en configurant un fichier pytest.ini.

Par exemple, on peut spécifier un répertoire spécifique pour rechercher des modules de test en exécutant la commande suivante :

  1. pytest tests/

Cette commande exécutera uniquement les cas de test à l'intérieur du répertoire “tests ”.

Fixtures de test

Les fixtures de test dans Pytest sont des composants incroyables qui peuvent être réutilisés pour établir une base fixe pour vos cas de test. Elles sont utiles lorsque vous devez créer des préconditions pour vos tests et lorsque vous souhaitez nettoyer toutes les ressources une fois vos tests terminés. PyTest facilite la définition et l'utilisation élégante des fixtures de test.

Pour définir un fixture de test, vous devez utiliser le décorateur @pytest.fixture. Par exemple, un fixture appelé db, défini ci-dessous, établit une connexion à la base de données puis ferme la connexion après l'opération. Nous pouvons définir ce fixture comme suit :

  1. import pytest
  2. @pytest.fixture
  3. def db():
  4. # Set up the database connection
  5. db = create_db()
  6. yield db
  7. # Clean up the database connection
  8. db.close()

Dans cet exemple, l'instruction yield définit le code exécuté après l'exécution des cas de test. Le mot-clé yield est utilisé pour contrôler le flux d'une fonction génératrice, ce qui est similaire à une instruction return utilisée pour renvoyer des valeurs en Python.

Pour utiliser une fixture dans un cas de test, vous devez l'inclure en tant qu'argument dans la fonction de test.

Par exemple :

  1. def query_test(db):
  2. results = db.query("SELECT * FROM users")
  3. assert len(result) == 12

Dans ce cas de test, le fixture db sera automatiquement injecté dans la fonction query_test(), vous permettant de l'utiliser pour effectuer des opérations sur la base de données. Les fixtures sont utiles pour les développeurs afin de préparer un environnement de test spécifique, comme des connexions de base de données, des clients API ou des objets simulés. En utilisant des fixtures, les développeurs peuvent s'assurer que les tests sont isolés et reproductibles.

Les ingénieurs de test peuvent également utiliser des fixtures pour préparer le système à tester, gérer les données de test ou simuler des scénarios complexes.

De plus, des fixtures peuvent être utilisées pour gérer le nettoyage des ressources après les tests, améliorant ainsi la fiabilité et la maintenabilité de la suite de tests.

Conclusion

Dans ce tutoriel, nous avons appris à implémenter et à utiliser PyTest, l'un des frameworks de tests Python les plus populaires et riches en fonctionnalités, et nous avons fourni un guide étape par étape sur son implémentation en Python.

Il est essentiel de rédiger et de mettre à jour continuellement les cas de test à mesure que votre code évolue. En investissant du temps et des efforts dans les tests, vous pouvez détecter les bogues tôt, améliorer la qualité du code et livrer un logiciel plus robuste et fiable.