Introduction
Si vous cherchez un outil moderne, rapide et flexible pour écrire et exécuter vos tests automatisés en Python, alors pytest
est sans doute votre meilleur allié. Très populaire dans l’écosystème Python, pytest
propose une syntaxe minimaliste, des fonctionnalités puissantes et une excellente intégration avec les outils de CI.
Dans cet article, vous allez découvrir comment utiliser pytest
pour écrire vos tests unitaires, les exécuter efficacement, gérer les erreurs, structurer vos projets, et tirer profit de ses options avancées.
1. Installation de pytest
pip install pytest
Vérifiez l’installation :
pytest --version
2. Votre premier test avec pytest
fichier : test_demo.py
def addition(a, b):
return a + b
def test_addition():
assert addition(2, 3) == 5
Exécution du test :
pytest
✅ Résultat : 1 test passed
3. Règles de nommage avec pytest
- Les fichiers doivent commencer par
test_
ou finir par_test.py
- Les fonctions de test doivent commencer par
test_
- Pas besoin de classes, ni de
unittest.TestCase
4. Écrire plusieurs tests
def test_addition_positive():
assert addition(10, 5) == 15
def test_addition_zero():
assert addition(0, 0) == 0
5. Tester les exceptions
import pytest
def division(a, b):
return a / b
def test_division_zero():
with pytest.raises(ZeroDivisionError):
division(5, 0)
6. Exécuter les tests avec détails
pytest -v
-v
: mode verbeux (plus de détails)-q
: mode silencieux
7. Ajouter un message personnalisé
def test_nombre_pair():
x = 4
assert x % 2 == 0, "Le nombre n'est pas pair"
8. Utiliser des fixtures (préparation des données)
import pytest
@pytest.fixture
def panier_vide():
return []
def test_ajouter_article(panier_vide):
panier_vide.append("pomme")
assert "pomme" in panier_vide
9. Utiliser des paramètres de test
import pytest
@pytest.mark.parametrize("a, b, resultat", [
(1, 1, 2),
(2, 3, 5),
(0, 0, 0)
])
def test_addition_parametree(a, b, resultat):
assert addition(a, b) == resultat
10. Structurer vos tests dans un projet
Arborescence recommandée :
mon_projet/
├── src/
│ └── mon_module.py
├── tests/
│ ├── __init__.py
│ └── test_mon_module.py
Lancer tous les tests avec :
pytest tests/
11. Intégration avec les outils de CI/CD
pytest
est compatible avec GitHub Actions, GitLab CI, Travis, etc.
Exemple de GitHub Action :
name: Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Installer Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: pytest
12. Générer un rapport HTML des tests
pip install pytest-html
pytest --html=rapport.html
Conclusion
pytest est un outil puissant, rapide et intuitif pour écrire des tests unitaires et fonctionnels en Python. Grâce à sa syntaxe épurée, ses fixtures, son paramétrage de tests, et sa compatibilité avec les outils modernes, il est devenu la référence pour les projets Python sérieux. Adopter pytest
, c’est investir dans la qualité, la robustesse et la maintenabilité de votre code.