Tests avec Python

Les tests ne sont pas une corvée de fin de projet, c'est ce qui permet de changer le code sans trembler. On commence par le pourquoi, on passe d'unittest à pytest, on apprend à isoler le code avec les mocks et à générer des données réalistes, puis on industrialise toute la suite.

Durée : 3 jours · Niveau : intermédiaire

Pour qui : les développeurs Python souhaitant maîtriser les tests automatisés.

Prérequis : connaissance de base de Python et de la programmation.

Testing with Python

Jour 1 — Fondamentaux des tests

  • Pourquoi tester ? Régressions, qualité, specs, responsabilités, confiance
  • Premier contact avec unittest : assert*, setUp et tearDown
  • Migration vers pytest : assert simple et fixtures
  • Options de ligne de commande utiles
  • Organiser un projet de tests : structure, pyproject.toml, conftest.py
  • Tests unitaires vs intégrés
  • Tests end-to-end avec Playwright
  • Tester des formulaires et des interfaces utilisateur
  • Attendre des éléments sans sleep()
  • Choisir le bon niveau de test

Jour 2 — Techniques avancées

  • Mocks et doubles de test : Mock, MagicMock et patch
  • Quand et comment mocker
  • Des données réalistes avec Mimesis
  • Gestion du temps avec freezegun
  • Système de fichiers en mémoire avec pyfakefs
  • Enregistrement HTTP avec VCR.py
  • Snapshots avec inline-snapshot
  • Design for testability : l'injection de dépendances
  • pytest.mark.parametrize
  • Property-based testing avec Hypothesis

Jour 3 — Industrialisation des tests

  • Mesurer la couverture avec pytest-cov
  • Définir des objectifs de couverture réalistes
  • Plusieurs versions de Python et de dépendances avec nox
  • Tests parallèles avec pytest-xdist
  • Sélection des tests et cache des fixtures
  • Profiler une suite de tests trop lente
  • CI : GitHub Actions / GitLab CI
  • Hooks pre-commit
  • Tester en équipe, et maintenir la suite
  • Le cas des utilisateurs moins techniques : le framework Robot

Passez au niveau supérieur en Python !