Tests unitaires en Python avec pytest : Un guide complet

Maîtriser les tests unitaires et le TDD avec pytest

Apprenez à effectuer efficacement des tests unitaires en Python à l’aide de pytest. Ce guide complet couvre les bases de pytest, des exemples concrets et des pratiques de développement piloté par les tests (TDD) pour vous aider à écrire un code robuste et facile à maintenir.

Programmation
Auteur·rice
Affiliation
Date de publication

8 février 2024

Modifié

9 mai 2025

Mots clés

Tutoriel pytest, Tests unitaires en Python, Python TDD, Exemples de pytest, développement piloté par les tests Python

Introduction

Les tests unitaires sont une partie essentielle de la construction de logiciels robustes et faciles à maintenir. En écrivant des tests pour des unités de code individuelles, vous vous assurez que vos fonctions se comportent comme prévu et vous pouvez détecter les bogues dès le début du processus de développement. Dans ce guide, nous vous présentons pytest - un puissant cadre de test pour Python - et nous vous montrons comment écrire des tests, adopter des pratiques de développement piloté par les tests (TDD) et incorporer des exemples du monde réel dans votre flux de travail.



Pourquoi les tests unitaires et le TDD?

Les tests vous aident à détecter les erreurs à un stade précoce et vous donnent la confiance nécessaire pour remanier le code sans casser les fonctionnalités. Le développement piloté par les tests (TDD) va plus loin en écrivant des tests avant le code lui-même, en guidant votre conception et en garantissant une base de code robuste.

Démarrer avec pytest

Installer pytest

Pour commencer, installez pytest à l’aide de pip:

pip install pytest

Écrire votre premier test

Créons une fonction simple et écrivons un test pour elle. Supposons que nous ayons une fonction add:

def add(a, b):
    return a + b

Maintenant, créez un test pour cette fonction:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

Pour lancer le test, exécutez pytest dans votre terminal.

Développement piloté par les tests (TDD) avec pytest

Le TDD consiste à écrire des tests avant d’écrire le code. Voici un flux de travail simple:

  1. Écrivez un test qui définit le comportement souhaité d’une fonction.
  2. Exécutez le test pour le voir échouer.
  3. Écrire le code minimal nécessaire pour réussir le test.
  4. Remanier le code si nécessaire, et répéter l’opération.

Exemple : Flux de travail TDD

Supposons que nous ayons besoin d’une fonction multiply qui multiplie deux nombres. Nous commençons par écrire un test:

def test_multiply():
    assert multiply(3, 4) == 12
    assert multiply(-2, 5) == -10

Lancez pytest, et vous verrez que le test échoue parce que multiply n’est pas défini. Maintenant, implémentez la fonction:

def multiply(a, b):
    return a * b

Réexécutez pytest pour vous assurer que le test est réussi.

Fonctionnalités avancées de pytest

Tests paramétrés

pytest vous permet d’exécuter une fonction de test avec différents ensembles d’entrées en utilisant le décorateur @pytest.mark.parametrize.

#| label: parameterized-tests, code-fold: true
import pytest

@pytest.mark.parametrize("a,b,expected", [
    (2, 3, 6),
    (5, 5, 25),
    (-1, 8, -8),
])
def test_multiply_param(a, b, expected):
    assert multiply(a, b) == expected

Fixtures dans pytest

Les pytest vous permettent de configurer des données ou un état avant d’exécuter des tests et de les nettoyer par la suite.

import pytest

@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]

def test_sum(sample_data):
    assert sum(sample_data) == 15

Meilleures pratiques pour les tests unitaires

  • Écrire des tests pour chaque fonction:
    Assurez-vous que chaque unité de votre code a des tests correspondants.
  • Garder les tests indépendants:
    Les tests ne doivent pas dépendre les uns des autres ; chaque test doit établir son propre contexte.
  • Utiliser des noms de tests descriptifs:
    Nommez clairement vos fonctions de test afin que les échecs soient faciles à diagnostiquer.
  • Exploiter les fixtures et la paramétrisation:
    Utilisez ces fonctionnalités pour écrire des tests plus propres et plus efficaces.
  • Exécuter les tests fréquemment:
    Intégrer les tests dans votre processus de développement pour détecter rapidement les problèmes.

Conclusion

En adoptant pytest et les pratiques TDD, vous pouvez construire une suite de tests robuste qui améliore la qualité et la fiabilité du code. Ce guide vous a présenté les bases de l’écriture de tests, de la création de fixtures, de la paramétrisation des tests et du suivi des flux de travail TDD en Python. Avec ces outils, vous serez mieux équipé pour maintenir et faire évoluer vos projets.

Plus d’informations

Testez avec plaisir, et appréciez la construction d’applications Python fiables avec pytest!

Explorer d’autres articles

Note

Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.

placeholder

placeholder
Aucun article correspondant
Retour au sommet

Réutilisation

Citation

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Tests unitaires en Python avec pytest : Un guide complet},
  date = {2024-02-08},
  url = {https://www.datanovia.com/fr/learn/programming/python/tools/pytest-unit-testing.html},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2024. “Tests unitaires en Python avec pytest : Un guide complet.” February 8, 2024. https://www.datanovia.com/fr/learn/programming/python/tools/pytest-unit-testing.html.