Prérequis
Python 3.7+, notions de test unitaire (arrange-act-assert), familiarité avec unittest ou équivalent.
Durée
2 jours
Contenu Technique de la Formation
Pytest est le framework de test le plus puissant en Python moderne. Cette formation couvre l’architecture avec fixtures, parametrization, markers, mocking avec unittest.mock et pytest-mock, mesure de couverture avec coverage.py/pytest-cov, et intégration CI/CD.
- Pytest framework — test discovery, -v flag, configuration pytest.ini et pyproject.toml
- Fixtures pytest — scopes (function, class, module, session), conftest.py, parametrization
- Mocking et patching — unittest.mock.patch(), pytest-mock, monkeypatch
- Markers et test selection — @pytest.mark.skip, @pytest.mark.xfail, custom markers
- Coverage.py et pytest-cov — rapport de couverture, seuils, exclusions, HTML reports
- Tests paramétriques — @pytest.mark.parametrize, data-driven testing
Objectifs de la Formation
Les objectifs visés par cette formation sont :
- Écrire des tests pytest avec fixtures, scopes et conftest.py
- Mocker des dépendances avec unittest.mock.patch et pytest-mock.mocker
- Utiliser pytest.mark.parametrize pour tester plusieurs cas avec un seul test
- Mesurer et rapporter la couverture de code avec coverage.py et pytest-cov
- Intégrer pytest en CI/CD (GitHub Actions, GitLab CI) avec rapports de couverture
- Déboguer les tests avec -vv, -s (print statements), --pdb et fixtures pytest
Table des Matières
Pytest : configuration et test discovery
- Installation pytest et pytest plugins — pytest, pytest-cov, pytest-mock
- pytest.ini, setup.cfg et pyproject.toml — configuration, chemin de discovery
- Test discovery — convention de nommage (test_*.py, *_test.py)
- Exécution des tests — pytest, -v, -x, -k filter, --collect-only
- Assertions et matchers — assert, pytest.raises, pytest.warns, approx
Fixtures pytest et portée (scope)
- Concept de fixture — setup/teardown déclaratif, réutilisabilité
- Scopes — function, class, module, session, package
- conftest.py — partage de fixtures entre tests, organisation hiérarchique
- Fixture avec yield — setup et cleanup en une seule définition
- Fixture parametrization — @pytest.fixture(params=[...]) pour générer variantes
Mocking, patching et monkeypatch
- unittest.mock.patch() — patching de modules, classes, méthodes
- Mock objects — MagicMock, side_effect, return_value, call assertions
- pytest-mock et mocker fixture — pytest-mock wrapper autour unittest.mock
- monkeypatch fixture — modification temporaire d’attributs, variables d’env
- Mocking de requêtes HTTP — unittest.mock + requests-mock ou responses
Markers et test selection
- @pytest.mark.skip et @pytest.mark.xfail — skip/expected failure
- @pytest.mark.slow, @pytest.mark.integration — custom markers
- -m flag — sélectionner tests par marker (pytest -m slow)
- pytest.ini et custom markers — déclaration et registration
- Conditional markers — @pytest.mark.skipif(condition) pour skip platform-specific
Coverage et tests paramétriques
- pytest-cov et coverage.py — installer, générer rapport de couverture
- Coverage reports — terminal, HTML, XML pour CI/CD
- Coverage thresholds — --cov-fail-under pour seuils minimum
- @pytest.mark.parametrize — data-driven testing avec multiples inputs
- Combinaisons parametrize — tester cartesian product de paramètres
En Pratique
Écrire des tests robustes avec Pytest
- Créer et organiser vos fichiers de test et cas de test
- Utiliser les assertions intuitives et les messages d'erreur clairs
Maîtriser les fixtures et les paramétrages
- Créer des fixtures réutilisables pour setup et teardown
- Paramétrer les tests pour couvrir plusieurs cas d'entrée
Mesurer la couverture de code
- Utiliser Coverage.py pour identifier les lignes non testées
- Atteindre et maintenir 80%+ de couverture
Intégrer les tests dans votre pipeline CI/CD
- Configurer les tests automatiques sur GitHub Actions ou GitLab CI
- Bloquer les merges sans couverture suffisante
Modalités et Inscription
Cette formation est proposée selon deux formules pour s'adapter au mieux à vos besoins :
Session régulière
Des sessions sont organisées à intervalles réguliers. Demandez les prochaines dates planifiées pour vous inscrire à la prochaine session.
Sur mesure & intra-entreprise
Vous souhaitez former vos équipes directement dans vos locaux ou adapter le programme technique à votre contexte d'entreprise ? Contactez-nous pour obtenir un devis personnalisé.