Tradução automática
Esta página foi traduzida automaticamente por IA e pode conter erros. Se algo não estiver claro, consulte a fonte em inglês.
Testes¶
A suíte de testes reside em tests/, fora do pacote pplx_export, e é executada
completamente offline. Suas entradas em formato de API são dados simulados determinísticos confirmados
em tests/fixtures/; os testes não dependem de serviços ativos ou de uma configuração
real em nível de usuário.
Esta página contém o inventário atual dos módulos de teste e o fluxo de trabalho do contribuidor. Para o design de regressão, consulte Arquitetura do sistema de teste. Para o contrato de dados de entrada, consulte Fixtures de teste.
1. Executando os testes¶
uv run pytest tests
pytest é uma dependência de desenvolvimento declarada. A suíte garante:
- Zero rede — entradas simuladas são verificadas; caminhos voltados para rede são
cobertos com fakes,
tmp_pathemonkeypatch. - Nenhuma configuração real de usuário — antes de importar qualquer módulo de produção,
tests/conftest.pycria uma configuração temporária local ao processo e substituiPPLX_EXPORT_CONFIG. Cada teste então recebe sua própria configuração placeholderalice/bobe restaura o placeholder local ao processo depois. Regressões de subprocesso verificam que uma configuração ausente ou quebrada do chamador não pode quebrar a coleta de testes. - Feedback rápido — em 2026-07-25 o projeto observou 435 testes coletados
de 32 módulos
test_*.pye executou a suíte completa em aproximadamente 13–25 segundos em execuções de verificação local. As contagens são um instantâneo datado do repositório e crescerão.
Seleções úteis:
| Comando | Efeito |
|---|---|
uv run pytest tests |
suíte completa |
uv run pytest tests/test_units.py |
um módulo |
uv run pytest tests -k snapshot |
testes cujo id do nó corresponde a snapshot |
uv run pytest tests -x -q |
parar na primeira falha, saída silenciosa |
uv run pytest --collect-only -q |
atualizar a contagem de casos coletados |
2. Inventário atual de módulos¶
Inventário sincronizado com o repositório em 2026-07-27:
| Família funcional | Módulos | Propósito |
|---|---|---|
| Snapshots de renderização | test_render_snapshots.py |
re-renderizar todas as fixtures simuladas de modo completo e cenário reduzido, depois comparar produtos confirmados byte a byte |
| Utilitários principais e compartilhados | test_units.py |
estado, limitação, planejamento, normalização, nomeação de ativos, detecção de modo, caminhos seguros e regressões transversais |
| Contratos de documentação, habilidades e localização | test_agent_skills.pytest_audit_docs.pytest_translate_docs.py |
contratos de habilidades locais ao repositório mais testes isolados de mini-repositório para o auditor de documentação somente leitura e pipeline de tradução automática |
| Configuração, autenticação e inicialização | test_config_external.pytest_cookie_profiles.pytest_credential.pytest_init.py |
isolamento de configuração externa, perfis de fonte de cookie, seleção de credenciais e inicialização |
| Semântica de renderização e fluxo de trabalho | test_interruptions.pytest_stub_workflows.pytest_answer_variants.pytest_answer_variant_logging.pytest_relations.py |
atribuição de fluxo de trabalho, estados de interrupção, variantes de resposta, registro de auditoria e arestas de relação |
| Manutenção de arquivo offline e índice | test_search_mode_backfill.pytest_sync_deleted.pytest_status.py |
enriquecimento, comportamento de retomada/idempotência, detecção de exclusão entre contas, estados terminais e os níveis de relatório de conta/alteração de estado offline |
| Regressões de revisão | 16 módulos test_fix_*.py listados abaixo |
correções derivadas de achados de revisão; nomes de módulos retêm linhagem de revisão |
2.1 Linhagem de regressão de revisão¶
Identificadores de revisão explicam por que uma regressão existe; eles não são a arquitetura primária da suíte de teste. O mapeamento é deliberadamente muitos-para-muitos: um módulo pode cobrir vários achados, e um achado também pode adicionar casos a um módulo temático existente.
| Linhagem | Módulos dedicados |
|---|---|
| Revisão N | test_fix_n01_inline_assets.py, test_fix_n02_spaces_link.py, test_fix_n03_n12.py, test_fix_n04_cookies.py, test_fix_n05_n06_n09.py, test_fix_n07_usage_checkpoint.py, test_fix_n08_throttle_overflow.py, test_fix_n10_table_header.py, test_fix_n11_batch_total.py |
| Revisão V3 | test_fix_v301_nested_sources_text.py, test_fix_v305_export_products.py |
| Revisão V4 | test_fix_v401_thread_dir_migration.py, test_fix_v402_manifest_count.py, test_fix_v403_handle_assets_idempotency.py, test_fix_v405_ask_post_steps.py |
| Revisão V5 | test_fix_v5_review.py, mais adições focadas a módulos temáticos existentes |
| Revisão V6 | test_fix_v6_atomic_writes.py |
Os docstrings dos módulos permanecem a explicação autoritativa do comportamento antigo de cada achado, comportamento corrigido e limite de regressão.
3. Como os testes de snapshot reutilizam o caminho de re-renderização de produção¶
Testes de snapshot não implementam um renderizador paralelo:
render_fixtureemtests/conftest.pycopia oraw_entries.jsonsimulado de uma fixture,raw_blocks.jsonopcional ethread.jsonpara um diretório temporário.- Ele chama
pplx_export.commands.rerender_cmd.rerender, a mesma função usada porpplx-export re-render. - A fábrica de fixtures
renderedretorna a saída nova e o diretóriogolden/confirmado da fixture. - Testes comparam
conversation.mde cadaturns/turn_*.mdbyte a byte.
Invariantes de conteúdo complementam a igualdade de bytes: respostas não devem colapsar para o
placeholder vazio (无), e resíduos de representação de dicionário como {'type': ... não devem
vazar para o texto renderizado.
4. Adicionando um teste¶
- Lógica existente — adicione um teste ao módulo temático correspondente. Use
tmp_path, fakes emonkeypatch; nunca acesse a rede ou~/.configreal. - Regressão de bug — prefira o módulo temático correspondente. Crie um
módulo
test_fix_<lineage>_<slug>.pyquando reter a linhagem de revisão melhorar materialmente a rastreabilidade; não assuma um módulo por achado. - Regressão de renderização — adicione ou reduza uma fixture simulada, regenere seus
produtos dourados com a ferramenta de manutenção, depois registre-a em
test_render_snapshots.pyou adicione asserções específicas de cenário.
Siga o estilo vizinho: anotações de tipo,
from __future__ import annotations e docstrings de módulo bilíngues.
5. Veja também¶
- Fixtures de teste — entradas simuladas, produtos dourados e o contrato de manutenção
- Arquitetura do sistema de teste — camadas de teste e garantias de regressão
- Operações offline — o caminho de re-renderização de produção usado por testes de snapshot