Développement logiciel
Tester du code Python avec pytest
Une suite de tests opérationnelle sépare un changement livré d'un changement en attente. Cette formation en construit une avec pytest : fixtures et portées, cas paramétrés, monkeypatch et mocks, seuils de couverture non contournables, exécutions CI rapides et méthode de diagnostic des tests instables.
Aperçu
Un apprentissage pratique pour le transfert en situation de travail.
Les équipes rejettent rarement les tests par principe : elles les abandonnent parce que la suite est devenue lente, fragile et remplie de tests qui échouent pour des raisons étrangères au changement examiné. Cette formation construit une suite qui reste utile. Les participants écrivent des tests centrés sur le comportement, remplacent les données partagées mutables par des fixtures et des fabriques, couvrent les cas limites via parametrize et Hypothesis, et isolent bases de données, horloges et appels HTTP. La dernière journée traite l'instabilité, une couverture trompeuse et le code hérité sans aucun test.
Prérequis
Aisance dans l'écriture de fonctions, classes et modules Python. Familiarité avec Git et le terminal attendue.
Objectifs
- Écrire des tests pytest ciblés portant sur le comportement et non sur l'implémentation.
- Structurer fixtures, portées et conftest.py pour des données de test isolées et réutilisables.
- Couvrir cas limites et erreurs avec parametrize, pytest.raises et Hypothesis.
- Isoler bases de données, horloges et services HTTP avec monkeypatch, faux objets et mocks autospec.
- Fixer un seuil de couverture et un budget de temps que la CI applique à chaque pull request.
- Diagnostiquer la cause racine d'un test instable et décider de le corriger, l'isoler ou le supprimer.
Public cible
- Développeurs Python introduisant des tests dans une base non testée
- Ingénieurs QA passant des contrôles manuels aux suites de tests automatisées
- Ingénieurs data validant la logique de transformation et les sorties de pipelines
- Ingénieurs DevOps intégrant des gates de test aux pipelines de build et de déploiement
- Responsables techniques définissant un critère de terminé pour leur équipe
- Développeurs maintenant du code Python hérité que personne n'ose refactoriser
Programme
Une structure claire pour le parcours d'apprentissage.
Programme
Les points du programme sont regroupés dans un seul bloc au lieu de créer un module par ligne.
Module 1 : Une suite de tests qui justifie son coût
Assertions pytest, découverte des tests et lecture des sorties d'échec
Arrange, act, assert et un seul comportement testé par test
Tracer les frontières unitaire, intégration et bout en bout dans un projet Python
Décider ce qu'il ne faut pas tester et éviter d'affirmer sur les détails internes
Module 2 : Fixtures et données de test
Fixtures, portées fonction et session, et nettoyage avec yield
conftest.py et partage des fixtures dans un package de tests
tmp_path et tmp_path_factory pour isoler le système de fichiers entre tests
Fabriques et builders plutôt qu'un gros jeu de données partagé
Module 3 : Paramétrage et couverture des cas limites
parametrize pour cas tabulaires, valeurs limites et exemples de régression
Paramétrage empilé, identifiants personnalisés et noms de tests lisibles
Tests basés sur les propriétés avec Hypothesis pour des espaces d'entrée immenses
Vérifier exceptions, avertissements et messages d'erreur avec pytest.raises
Module 4 : Isoler les dépendances : mocks, faux objets et stubs
monkeypatch pour variables d'environnement, horloge et attributs de module
unittest.mock avec autospec, vérifier les appels sans les surspécifier
Simuler le trafic HTTP avec responses ou respx plutôt que des services réels
Tests de base de données avec transactions, rollback et schémas jetables
Module 5 : Couverture, rapidité et intégration continue
pytest-cov, couverture de branches et seuil impossible à contourner
pytest-xdist, sélection de tests et respect d'un budget de temps
Marqueurs, séparation des tests lents et exécution du bon sous-ensemble en local
Intégrer pytest à la CI avec rapports, artefacts et contrôles obligatoires
Module 6 : Tests instables, code hérité et pratique d'équipe
Diagnostiquer l'instabilité : ordre des tests, état partagé, temps et concurrence
Règles de quarantaine, politique de réessai et cas où supprimer un test s'impose
Ajouter des tests de caractérisation autour du code hérité avant de le modifier
Convenir d'un standard de test d'équipe et d'une définition de terminé écrite
Supports fournis
- Manuel de formation, exemples de code commentés et notes de référence
- Environnement de laboratoire et dépôts de démarrage
- Exercices, check-lists et modèles de code réutilisables
- Certificat de participation 4D
- Accompagnement technique après la formation
Options de formation
Les programmes peuvent être organisés en entreprise, en ligne ou dans un format hybride selon le calendrier, la localisation et les objectifs de vos équipes. Lorsqu'un certificat ou un examen externe est inclus, les règles et frais de certification restent soumis aux politiques de l'organisme certificateur, tandis que 4D assure la formation et l'accompagnement à la préparation.
Pourquoi choisir 4D
4D part de votre suite existante, ou de son absence, et mesure son temps d'exécution et sa fiabilité avant toute écriture. Les participants ajoutent des tests de caractérisation autour d'un module que l'équipe n'ose plus toucher, puis fixent un seuil de couverture et un budget de temps appliqués par leur propre CI dès la semaine suivante.
Formations liées
Fondamentaux de la programmation Python
Une introduction pratique à Python pour les ingénieurs et analystes qui ont besoin de code opérationnel plutôt que d'extraits de tutoriel. Les participants acquièrent de l'aisance avec les types, les collections, les fonctions, les fichiers et la gestion des erreurs, puis construisent un programme complet.
View coursePython intermédiaire et pratiques de code propre
Conçue pour les développeurs dont le code Python fonctionne mais résiste au changement. Le programme couvre dataclasses, générateurs, décorateurs, gestionnaires de contexte et annotations de types, puis applique les refactorings qui transforment un module interminable en unités testées contrôlées par black, ruff et mypy.
View courseAutomatisation et scripting Python pour les tâches métier
Destinée aux équipes qui perdent chaque semaine des heures en manipulations de fichiers, de tableurs et de rapports. Les participants automatisent ces tâches avec Python : traitement de fichiers en lot, Excel et CSV, appels d'API REST, alertes par e-mail et tâches planifiées qui signalent clairement toute défaillance.
View course