# Détecteur de graphe de dépendances de fixtures pytest et de fuites mock.patch

Analyse statiquement une chaîne de conftest.py : construit le graphe de dépendances des fixtures selon les cinq portées (function/class/module/package/session), détecte les overrides des conftest plus profonds et signale les fuites d'état entre tests : mock.patch().start() sans .stop(), monkeypatch dans une fixture à portée large (son annulation au niveau fonction ne s'exécute jamais) et with mock.patch maintenu ouvert au travers d'un yield.

> Page canonique: https://elysiatools.com/fr/tools/pytest-conftest-fixture-dependency-graph-and-mock-patch-leak-detector

- **Catégorie:** Development

- **Mots-clés:** pytest, conftest, fixture, graphe de dépendances, fuite mock.patch, monkeypatch, inadéquation de portée, fixture de session, pollution entre tests, analyse statique, tests python, portée de fixture

## Présentation

Règles issues de la documentation officielle pytest : ordre des portées session > package > module > class > function ; une fixture à portée large dépendant d'une fixture plus étroite lève ScopeMismatch à la collecte ; les fixtures homonymes se résolvent du test vers l'extérieur — le conftest le plus profond gagne. Détection des fuites : les fixtures intégrées (monkeypatch/capsys/tmp_path…) sont de portée fonction et leur annulation n'a lieu qu'à ce niveau — les utiliser dans des fixtures module/session laisse le patch actif toute la session (classe de problème type pytest-mock issue #84) ; patcher.start() sans .stop() vit jusqu'à la fin du processus ; with mock.patch à travers un yield en portée large fait que tous les tests voient la cible patchée. L'analyseur est un scanner Python léger (chaînes/triples quotes/commentaires gérés), sans runtime Python. Séparez plusieurs fichiers par des marqueurs « # --- file: tests/unit/conftest.py --- ».

## Entrées

- **Sources Python (chaîne de conftest)** (textarea): # --- file: conftest.py --- import pytest @pytest.fixture(scope="session") def db(): yield 1 …
- **Fichier Python (optionnel, .py/.txt)** (file)
- **Afficher les fixtures intégrées** (checkbox)

## Quand l'utiliser

- Lorsque des tests échouent de manière aléatoire ou dépendent de l'ordre d'exécution de la suite de tests.
- Avant de refactoriser une arborescence complexe de conftest.py comportant des fixtures imbriquées et surchargées.
- Lors de la revue de code pour vérifier l'absence d'appels mock.patch().start() non fermés ou d'incohérences ScopeMismatch.

## Fonctionnement

- Collez le code source de vos conftest.py en séparant les chemins par le marqueur « # --- file: chemin/conftest.py --- », ou importez un fichier Python.
- L'analyseur statique lit les déclarations @pytest.fixture, extrait leurs paramètres de portée (session, package, module, class, function) et trace les relations de dépendance.
- Le moteur applique les règles officielles de pytest pour identifier les ScopeMismatch, les surcharges locales et les fuites d'état issues de mock.patch ou monkeypatch.
- L'interface génère le graphe visuel des dépendances hiérarchisé par niveau de portée et dresse la liste des alertes de configuration.

## Cas d'usage

- Audit de suites de tests Python sujettes à la pollution d'état entre modules d'exécution.
- Visualisation de l'arbre de résolution des fixtures partagées dans de grands dépôts multi-packages.
- Validation statique de la conformité des portées lors de la migration de fixtures vers le niveau session.

## Questions fréquentes

### Qu'est-ce qu'une erreur ScopeMismatch dans pytest ?

Elle survient lorsqu'une fixture à portée large (ex. session ou module) dépend d'une fixture à portée plus étroite (ex. function).

### Pourquoi l'utilisation de monkeypatch dans une fixture de session pose problème ?

La fixture intégrée monkeypatch est de portée fonction : son nettoyage n'est pas exécuté au bon moment dans un contexte de session, laissant le patch actif.

### Comment renseigner plusieurs fichiers conftest.py dans le champ texte ?

Séparez chaque fichier par une ligne d'en-tête du type « # --- file: dossier/conftest.py --- » avant son code source.

### L'outil exécute-t-il le code Python téléversé ?

Non, l'analyse est strictement statique par analyse lexicale et syntaxique sans aucun runtime Python.

### À quoi sert l'option « Afficher les fixtures intégrées » ?

Elle inclut les fixtures natives comme monkeypatch, capsys ou tmp_path dans le graphe visuel pour observer leurs points d'injection.

## Outils associés

- [Reconstructeur de puissance critique et W′bal en course (Stryd)](https://elysiatools.com/fr/tools/stryd-running-power-critical-power-and-w-prime-bal-reconstructor): Déduisez CP et W′ d’un test de 3 minutes, de paires puissance–durée ou d’essais distance–temps, puis rejouez une session Stryd (.fit/.tcx/CSV) : W′bal selon les modèles intégral de Skiba 2012 et différentiel de Froncioni/Skiba/Clarke, prévision d’épuisement, zones Stryd et graphique double.
- [Constructeur d’axes et d’instances de polices variables et de CSS font-variation-settings](https://elysiatools.com/fr/tools/variable-font-axis-instance-and-css-font-variation-settings-builder): Téléversez une police variable (TTF/OTF/WOFF/WOFF2) pour inspecter ses axes fvar et instances nommées, prévisualiser l’interpolation en direct dans le navigateur et générer un CSS font-variation-settings prêt à coller, les propriétés de haut niveau équivalentes et un bloc @font-face variable.
- [Visualiseur de Plan d’Exécution SQL](https://elysiatools.com/fr/tools/sql-explain-plan-visualizer): Collez la sortie EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) pour obtenir un arbre des coûts, repérer les écarts lignes estimées/réelles et des suggestions d’index
- [Inspecteur d'en-têtes binaires Windows PE / Linux ELF / Mach-O (sections, importations/exportations)](https://elysiatools.com/fr/tools/windows-pe-linux-elf-mach-o-binary-header-section-import-export-inspector): Téléversez un binaire PE-COFF (.exe/.dll), ELF ou Mach-O : analyse des en-têtes DOS/PE/COFF/optionnel, de l'e_ident et des tables ELF, de l'en-tête et des commandes de chargement Mach-O ; sortie : point d'entrée/base d'image, table des sections avec correspondance RVA↔offset, importations/exportations, symboles dynamiques et réimplantations, annotations multi-architecture (x86/x86-64/ARM/AArch64/RISC-V), badges ASLR/NX/PIE et dump hexadécimal.
- [Analyseur APNG : chunks IDAT/fdAT, rejeu deflate et méthodes de disposition avec minutage des images](https://elysiatools.com/fr/tools/apng-idat-fdat-chunk-streaming-deflate-replay-and-disposal-method-analyzer): Téléversez un PNG/APNG et analysez la structure d'animation : signature PNG et vérification CRC32 de chaque chunk, IHDR (profondeur/type de couleur/entrelacement), acTL (nombre d'images et de lectures, avant le premier IDAT), fcTL (numéro de séquence, contrainte de région x+y+w+h ≤ canevas, normalisation delay_num/delay_den, dispose_op none/background/previous, blend_op source/over), première image IDAT + suivantes en fdAT ; les numéros de séquence partagés fcTL+fdAT doivent croître sans trou depuis 0 ; le flux deflate de chaque image est rejoué en vérifiant taille décompressée = hauteur × (1 + octets par ligne), un zlib corrompu est signalé ; la simulation de disposition avertit d'un previous en première image (traité comme background), des images à délai nul, etc.
- [Studio de graphiques CSV : histogramme, nuage de points et boîtes](https://elysiatools.com/fr/tools/csv-histogram-scatter-box-plot-chart-studio): Chargez ou collez un CSV et tracez aussitôt : histogrammes selon Sturges / Freedman-Diaconis / Scott, nuage de points avec r de Pearson et droite des moindres carrés, boîtes de Tukey — chaque graphique téléchargeable en PNG et SVG.
- [Stéganographie d'image : incorporation et détection](https://elysiatools.com/fr/tools/image-steganography-embed-detect): Cache du texte dans les bits de poids faible d'un PNG, l'extrait en retour et lance la stéganalyse chi-carré de Westfeld–Pfitzmann avec courbe p glissante et aperçu du plan LSB.
- [Pont PDF (OCR) vers JSON structuré](https://elysiatools.com/fr/tools/ocr-pdf-to-structured-json-bridge): Extrait la couche texte du PDF avec la géométrie (lignes par position y, tableaux par écarts de colonnes, titres par taille de police, paires clé-valeur à deux-points) puis remplit champ par champ un JSON Schema fourni — libellés appariés par clés normalisées, valeurs coercées vers les types déclarés et validées par ajv.

## Exemples

- [Échantillons Audio MP3 Libres de Droits](https://elysiatools.com/fr/samples/mp3-samples): Collection d'échantillons audio libres de droits pour les tests et le développement, incluant les sons de la nature, la musique de méditation et l'audio ambiant
- [Exemples de Commentaires de Code](https://elysiatools.com/fr/samples/code-comment-samples): Fichiers de code d'exemple avec différents styles de commentaires pour tester la suppression de commentaires
- [Exemples de Codes QR](https://elysiatools.com/fr/samples/qrcode-samples): Images de codes QR d'exemple pour tester les outils de lecture et de génération de codes QR
- [GitHub Actions Testing - Intégration CI/CD](https://elysiatools.com/fr/samples/github-actions-testing): Workflows complets de test GitHub Actions incluant tests automatisés, exécution parallèle, rapports de tests, mise en cache et patterns CI/CD avancés pour pipelines de développement modernes
