# Detector de grafo de dependências de fixtures pytest e vazamentos de mock.patch

Analisa estaticamente uma cadeia de conftest.py: renderiza o grafo de dependências de fixtures nos cinco escopos (function/class/module/package/session), detecta overrides de conftests mais profundos e marca vazamentos de estado entre testes: mock.patch().start() sem .stop(), monkeypatch em fixtures de escopo amplo (o desfazer em nível de função nunca executa) e with mock.patch aberto através de yield.

> Página canônica: https://elysiatools.com/pt/tools/pytest-conftest-fixture-dependency-graph-and-mock-patch-leak-detector

- **Categoria:** Development

- **Palavras-chave:** pytest, conftest, fixture, grafo de dependências, vazamento de mock.patch, monkeypatch, incompatibilidade de escopo, fixture de sessão, poluição entre testes, análise estática, testes python, escopo de fixture

## Visão geral

Regras da documentação oficial do pytest: ordem de escopos session > package > module > class > function; fixture de escopo amplo dependendo de uma mais estreita levanta ScopeMismatch na coleta; fixtures homônimas resolvem-se do teste para fora — o conftest mais profundo vence. Detecção de vazamentos: fixtures integradas (monkeypatch/capsys/tmp_path…) são de escopo de função e o desfazer ocorre só nesse nível — usá-las em fixtures module/session mantém o patch ativo a sessão toda (classe de problema do issue #84 do pytest-mock); patcher.start() sem .stop() vive até o fim do processo; with mock.patch através de um yield em escopo amplo faz todos os testes verem o alvo patcheado. O parser é um scanner Python leve (strings/triple-quotes/comentários tratados corretamente), sem runtime Python. Separe vários arquivos com marcadores «# --- file: tests/unit/conftest.py ---».

## Entradas

- **Fontes Python (cadeia de conftest)** (textarea): # --- file: conftest.py --- import pytest @pytest.fixture(scope="session") def db(): yield 1 …
- **Arquivo Python (opcional, .py/.txt)** (file)
- **Mostrar fixtures integradas no grafo** (checkbox)

## Quando usar

- Depuração de testes intermitentes ou falhas causadas por poluição de estado global entre suítes de teste.
- Refatoração de arquitetura de testes complexos com múltiplos conftest.py aninhados em diretórios diferentes.
- Auditoria de fixtures de escopo amplo (module ou session) que utilizam patches temporários ou mock.patch().start().

## Como funciona

- Cole o conteúdo dos arquivos conftest.py (separados pelo marcador '# --- file: caminho/conftest.py ---') ou envie um arquivo Python.
- O analisador estático processa as declarações @pytest.fixture, mapeando relações de escopo de function até session sem executar o código Python.
- O motor identifica violações de escopo, sobrescritas de fixtures por conftests locais e vazamentos causados por mock.patch().start() sem .stop() ou monkeypatch em escopo amplo.
- Visualize os resultados organizados por severidade, uma tabela de inventário de fixtures e o grafo de dependências renderizado.

## Casos de uso

- Identificar chamadas a patcher.start() que esqueceram o teardown correspondente com patcher.stop().
- Mapear a hierarquia de resolução e sobrescrita de fixtures entre a raiz do projeto e subdiretórios de testes.
- Prevenir vazamento de variáveis de ambiente e monkeypatching em suítes com execução paralela ou demorada.

## Perguntas frequentes

### Como o analisador detecta múltiplos arquivos conftest.py?

Você pode separar cada arquivo no campo de texto usando o marcador `# --- file: caminho/conftest.py ---` no início de cada bloco.

### Por que usar monkeypatch em escopo module ou session gera erro?

A fixture integrada monkeypatch possui escopo de função; utilizá-la em fixtures mais amplas mantém o patch ativo durante toda a execução da sessão.

### O que causa o erro de ScopeMismatch no pytest?

O ScopeMismatch ocorre quando uma fixture de escopo amplo (como session) depende diretamente de uma fixture de escopo mais restrito (como function).

### O código Python fornecido é executado pelo navegador ou servidor?

Não. A análise é estritamente estática, usando um scanner léxico para inspecionar árvores de chamadas e declarações sem rodar o interpretador Python.

### O que significa o aviso de 'with mock.patch aberto através de yield'?

Significa que o contexto do mock permanece ativo durante a execução de todos os testes atendidos por aquela fixture, o que pode mascarar comportamentos indesejados se o escopo for amplo.

## Ferramentas relacionadas

- [Reconstrutor de potência crítica e W′bal de corrida (Stryd)](https://elysiatools.com/pt/tools/stryd-running-power-critical-power-and-w-prime-bal-reconstructor): Derive CP e W′ de um teste all-out de 3 minutos, pares potência–tempo ou provas distância–tempo, e repita uma sessão Stryd (.fit/.tcx/CSV): W′bal pelos modelos integral de Skiba 2012 e diferencial de Froncioni/Skiba/Clarke, previsão de exaustão, zonas Stryd e gráfico de dois painéis.
- [Construtor de eixos e instâncias de fontes variáveis e CSS font-variation-settings](https://elysiatools.com/pt/tools/variable-font-axis-instance-and-css-font-variation-settings-builder): Envie uma fonte variável (TTF/OTF/WOFF/WOFF2) para inspecionar seus eixos fvar e instâncias nomeadas, pré-visualizar a interpolação ao vivo no navegador e gerar CSS font-variation-settings pronto para colar, as propriedades de alto nível equivalentes e um bloco @font-face variável.
- [Visualizador de Plano de Execução SQL](https://elysiatools.com/pt/tools/sql-explain-plan-visualizer): Cole a saída do EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) para renderizar uma árvore de custos, marcar divergências entre linhas estimadas e reais e sugerir índices
- [Inspetor de cabeçalhos binários Windows PE / Linux ELF / Mach-O (seções, importações/exportações)](https://elysiatools.com/pt/tools/windows-pe-linux-elf-mach-o-binary-header-section-import-export-inspector): Envie um binário PE-COFF (.exe/.dll), ELF ou Mach-O: analisa cabeçalhos DOS/PE/COFF/opcional, o e_ident e tabelas do ELF e o cabeçalho e comandos de carga do Mach-O; exibe ponto de entrada/base da imagem, tabela de seções com mapeamento RVA↔offset, importações/exportações, símbolos dinâmicos e realocações, anotações multiarquitetura (x86/x86-64/ARM/AArch64/RISC-V), distintivos ASLR/NX/PIE e um dump hexadecimal inicial.
- [Analisador APNG de chunks IDAT/fdAT, replay deflate e métodos de disposal com temporização de quadros](https://elysiatools.com/pt/tools/apng-idat-fdat-chunk-streaming-deflate-replay-and-disposal-method-analyzer): Envie um PNG/APNG e analise a estrutura da animação: assinatura PNG e verificação CRC32 por chunk, IHDR (profundidade/tipo de cor/entrelaçado), acTL (número de quadros e repetições, antes do primeiro IDAT), fcTL (número de sequência, restrição de região x+y+w+h ≤ canvas, normalização delay_num/delay_den, dispose_op none/background/previous, blend_op source/over), primeiro quadro IDAT + seguintes via fdAT; os números de sequência compartilhados fcTL+fdAT devem crescer sem lacunas a partir de 0; o fluxo deflate de cada quadro é reproduzido conferindo o tamanho descomprimido = altura × (1 + bytes por linha), zlib corrompido é relatado; a simulação de disposal alerta sobre previous no primeiro quadro (tratado como background), quadros com atraso zero etc.
- [Estúdio de gráficos CSV: histograma, dispersão e boxplot](https://elysiatools.com/pt/tools/csv-histogram-scatter-box-plot-chart-studio): Envie ou cole um CSV e grafique na hora: histogramas com as regras Sturges / Freedman-Diaconis / Scott, dispersão com r de Pearson e reta de mínimos quadrados, e boxplots de Tukey — cada gráfico baixável em PNG e SVG.
- [Esteganografia de imagem: embutir e detectar](https://elysiatools.com/pt/tools/image-steganography-embed-detect): Esconde texto nos bits menos significativos de um PNG, extrai de volta e roda a estegoanálise chi-quadrado de Westfeld–Pfitzmann com curva p deslizante e prévia do plano LSB.
- [Ponte de PDF (OCR) para JSON estruturado](https://elysiatools.com/pt/tools/ocr-pdf-to-structured-json-bridge): Extrai a camada de texto do PDF com geometria (linhas por posição y, tabelas por vaos de coluna, títulos por tamanho de fonte, pares chave-valor com dois pontos) e preenche campo a campo um JSON Schema do usuário — rótulos pareados por chaves normalizadas, valores coagidos aos tipos declarados e validados com ajv.

## Exemplos

- [Amostras de Áudio MP3 Livres de Direitos Autorais](https://elysiatools.com/pt/samples/mp3-samples): Coleção de amostras de áudio livres de direitos autorais para testes e desenvolvimento, incluindo sons da natureza, música de meditação e áudio ambiente
- [Exemplos de Comentários de Código](https://elysiatools.com/pt/samples/code-comment-samples): Arquivos de código de exemplo com vários estilos de comentários para testar a remoção de comentários
- [Exemplos de Códigos QR](https://elysiatools.com/pt/samples/qrcode-samples): Imagens de código QR de exemplo para testar ferramentas de leitura e geração de código QR
- [GitHub Actions Testing - Integração CI/CD](https://elysiatools.com/pt/samples/github-actions-testing): Workflows completos de teste do GitHub Actions incluindo testes automatizados, execução paralela, relatórios de teste, caching e padrões CI/CD avançados para pipelines de desenvolvimento modernos
