4D Training & Consultancy

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.

3 joursPrésentiel interne, en ligne ou sur mesureÉquipes corporate et groupes professionnelsNiveau: Intermédiaire

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.

Contacter 4D

Planifiez le bon parcours de formation ou de conseil pour votre équipe.

Partagez quelques détails et 4D orientera votre demande vers la formation, le conseil, l’évaluation, Phoenix ou un programme sur mesure.