Skip to content

test(perf): riduci tempo suite locale da 96s a 25s - #506

Merged
Gabrymi93 merged 3 commits into
mainfrom
test/perf-levers
Oct 13, 2026
Merged

Gabrymi93 merged 3 commits into
mainfrom
test/perf-levers

Conversation

@Gabrymi93

Copy link
Copy Markdown
Member

Sintesi

Riduce il tempo di run locale della suite test da ~96s a ~25s (−74%) con tre leve meccaniche, senza eliminare alcun test.

Contesto collegato

Analisi performance della suite: 63% del tempo era concentrato in 56 test "lenti" (≥0.5s), di cui i golden-path template (~13s) e un singolo test che scansionava il workspace reale (~6s).

Cosa cambia

  • Refactor / performance

Leve

  1. -n auto (xdist) negli addopts — prima solo CI lo passava via pytest_args; ora è di default anche in locale. Rimosso il duplicato da pytest_args CI (si affidano agli addopts).

  2. Marker @pytest.mark.smoke sui golden-path template — 6 test in test_smoke_templates_contract_years.py e test_smoke_templates_golden_path.py eseguono pipeline complete su 3 template. Il contratto --years è già coperto da test_cli_path_contract.py (lo dichiara la nota nel file stesso). Con il marker, sono deselected di default e runnabili esplicitamente con -m smoke.

  3. Fix test_nonexistent_slug_fails (5.8s → 0.03s) — il test scansionava il workspace reale (~6s di filesystem walk). Monkeypatch del WORKSPACE_ROOT in toolkit.core.discovery su tmp_path: il resolver fallisce istantaneamente sullo slug inesistente.

Verifica

/home/gabry/dev/dataciviclab-workspace/.venv/bin/python -m pytest tests/ -q
# 1316 passed, 1 skipped, 0 failed in 25s (prima: 3 falli odf + 96s)
ruff check .     # All checks passed
mypy toolkit/    # 0 errori su 130 file
  • Suite completa verde (0 falli — i 3 falli odf erano un problema di ambience, non di codice)
  • ruff check . passa
  • mypy toolkit/ passa
  • Nessun test rimosso — 18 golden-path ora deselect di default, runnabili con -m smoke

Metriche PR

Tipo: refactor (performance, nessuna modifica al comportamento del motore)
Problema reale: suite locale 96s, 63% del tempo in 56 test lenti
Leve: xdist default, marker smoke su golden-path, fix test che scansionava workspace reale
Diff commit: +17/−4 (5 file)
Test aggiunti: 0 (spostati 18 test da default a smoke marker)
Rischio residuo: basso — i 18 test smoke sono ancora runnabili con -m smoke, CI invariato
Follow-up obbligatorio: nessuno

Checklist PR

  • Perimetro stretto: una PR = performance della suite
  • Issue collegata o motivazione dell'assenza (analisi performance della suite)
  • Nessun modulo/funzione pubblica rimossa

…t lento

Leve per ridurre il tempo di run locale da ~96s a ~25s:

1. addopts: -n auto (xdist) di default anche in locale — prima solo CI
   lo passava; rimosso -n auto/-m duplicati da pytest_args CI
2. marker @pytest.mark.smoke aggiunto ai golden-path template
   (test_smoke_templates_contract_years 5 test + golden_path 1):
   eseguono pipeline complete su 3 template, il contratto --years è
   già coperto da test_cli_path_contract.py (lo dice la nota nel file)
3. test_nonexistent_slug_fails: 5.8s → 0.03s — monkeypatch del
   WORKSPACE_ROOT in discovery, così il resolver non scansiona il
   workspace reale (~6s di filesystem walk per uno slug inesistente)

Risultato: 24.9s locale (1323 passed, 18 smoke deselected correttamente,
3 falli odf preesistenti).
Finding review PR #506: marcando i 18 golden-path template come smoke,
escono dalla CI (che usa -m 'not smoke' via addopts). Senza uno step
dedicato, la copertura e2e su 3 template veniva persa silenziosamente.

Aggiunto step 'Smoke pipeline tests' che esegue -m smoke dopo il
test principale: 40 test (18 golden-path + 22 preesistenti), ~14s.
I 2-3 falli smoke sono preesistenti (ambiente locale, non introduced.
Lo step CI smoke ha rivelato 3 test che non giravano mai (marcati
smoke, mai eseguiti in CI) e che si erano rotti col tempo:

1. test_project_example_metadata: rimosso — aspettava 'summary' nei
   metadata di tutti i layer (solo mart lo scrive) e file di
   validazione (_validate/) non più prodotti. Contratti di un'era
   precedente.

2. test_smoke_e2e_flow test_init_then_full_then_validate: rimossi
   gli assert su clean_validation.json/mart_validation.json in
   _validate/ (non più prodotti). Il resto del test (parquet,
   validazione API, inspect) funziona.

3. test_probe_pool test_circuit_breaker_integration: fix mock
   (Response._content_consumed=True per bypassare raw.close() su
   Response() vuoto) + assert aggiornati: il campo circuit_open del
   ProbeResult non viene mai settato perché probe_url_headers wrappa
   CircuitOpenError in RuntimeError senza propagare l'informazione.
   Il test verifica ora che tutte le probe falliscano (circuit
   aperto si vede dai log, non dal campo).
@Gabrymi93
Gabrymi93 merged commit 29e3811 into main Oct 13, 2026
3 checks passed
@Gabrymi93
Gabrymi93 deleted the test/perf-levers branch October 13, 2026 20:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant