Test
- Kit completo di test (suite, live, Docker): Testing
-
pnpm test:force: termina qualunque processo gateway rimasto attivo che occupa la porta di controllo predefinita, poi esegue l’intera suite Vitest con una porta gateway isolata così i test del server non entrano in conflitto con un’istanza in esecuzione. Usalo quando una precedente esecuzione del gateway ha lasciato occupata la porta 18789. -
pnpm test:coverage: esegue la suite unit con copertura V8 (tramitevitest.unit.config.ts). Le soglie globali sono 70% per linee/branch/funzioni/statement. La copertura esclude gli entrypoint ricchi di integrazione (wiring CLI, bridge gateway/telegram, server statico webchat) per mantenere l’obiettivo concentrato sulla logica testabile a livello unitario. -
pnpm test:coverage:changed: esegue la copertura unit solo per i file modificati rispetto aorigin/main. -
pnpm test:changed: esegue la config nativa dei progetti Vitest con--changed origin/main. La config base tratta i file dei progetti/config comeforceRerunTriggerscosì le modifiche al wiring riattivano comunque riesecuzioni ampie quando necessario. -
pnpm test: esegue direttamente la config root nativa dei progetti Vitest. I filtri file funzionano in modo nativo tra i progetti configurati. -
La config base Vitest ora usa per impostazione predefinita
pool: "threads"eisolate: false, con il runner condiviso non isolato abilitato in tutte le config del repo. -
pnpm test:channelseseguevitest.channels.config.ts. -
pnpm test:extensionseseguevitest.extensions.config.ts. -
pnpm test:extensions: esegue le suite di extension/plugin. -
pnpm test:perf:imports: abilita in Vitest il reporting di durata degli import + dettaglio degli import per l’esecuzione root nativa dei progetti. -
pnpm test:perf:imports:changed: stesso profiling degli import, ma solo per i file modificati rispetto aorigin/main. -
pnpm test:perf:profile:main: scrive un profilo CPU per il thread principale di Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: scrive profili CPU + heap per il runner unit (.artifacts/vitest-runner-profile). -
Integrazione Gateway: opt-in tramite
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testoppurepnpm test:gateway. -
pnpm test:e2e: esegue i test smoke end-to-end del gateway (pairing multi-istanza WS/HTTP/node). Usa per impostazione predefinitathreads+isolate: falsecon worker adattivi invitest.e2e.config.ts; regola conOPENCLAW_E2E_WORKERS=<n>e impostaOPENCLAW_E2E_VERBOSE=1per log dettagliati. -
pnpm test:live: esegue i test live dei provider (minimax/zai). Richiede chiavi API eLIVE=1(o*_LIVE_TEST=1specifico del provider) per togliere lo skip. -
pnpm test:docker:openwebui: avvia OpenClaw + Open WebUI in Docker, accede tramite Open WebUI, controlla/api/models, poi esegue una vera chat proxata tramite/api/chat/completions. Richiede una chiave di modello live utilizzabile (ad esempio OpenAI in~/.profile), scarica un’immagine esterna di Open WebUI e non è pensato per essere stabile in CI come le normali suite unit/e2e. -
pnpm test:docker:mcp-channels: avvia un container Gateway inizializzato e un secondo container client che avviaopenclaw mcp serve, poi verifica rilevamento delle conversazioni instradate, lettura delle trascrizioni, metadati degli allegati, comportamento della coda di eventi live, instradamento dell’invio in uscita e notifiche in stile Claude su canale + permessi tramite il vero bridge stdio. L’asserzione delle notifiche Claude legge direttamente i frame MCP stdio grezzi così lo smoke rifletta ciò che il bridge emette davvero.
Gate PR locale
Per i controlli locali di land/gate delle PR, esegui:pnpm checkpnpm buildpnpm testpnpm check:docs
pnpm test ha esiti intermittenti su un host carico, rieseguilo una volta prima di trattarlo come una regressione, poi isola con pnpm test <path/to/test>. Per host con memoria limitata, usa:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark di latenza del modello (chiavi locali)
Script:scripts/bench-model.ts
Uso:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Env facoltative:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Prompt predefinito: “Reply with a single word: ok. No punctuation or extra text.”
- minimax mediana 1279ms (min 1114, max 2431)
- opus mediana 2454ms (min 1224, max 3170)
Benchmark di avvio CLI
Script:scripts/bench-cli-startup.ts
Uso:
pnpm test:startup:benchpnpm test:startup:bench:smokepnpm test:startup:bench:savepnpm test:startup:bench:updatepnpm test:startup:bench:checkpnpm tsx scripts/bench-cli-startup.tspnpm tsx scripts/bench-cli-startup.ts --runs 12pnpm tsx scripts/bench-cli-startup.ts --preset realpnpm tsx scripts/bench-cli-startup.ts --preset real --case status --case gatewayStatus --runs 3pnpm tsx scripts/bench-cli-startup.ts --entry openclaw.mjs --entry-secondary dist/entry.js --preset allpnpm tsx scripts/bench-cli-startup.ts --preset all --output .artifacts/cli-startup-bench-all.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --case gatewayStatusJson --output .artifacts/cli-startup-bench-smoke.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --cpu-prof-dir .artifacts/cli-cpupnpm tsx scripts/bench-cli-startup.ts --json
startup:--version,--help,health,health --json,status --json,statusreal:health,status,status --json,sessions,sessions --json,agents list --json,gateway status,gateway status --json,gateway health --json,config get gateway.portall: entrambi i preset
sampleCount, media, p50, p95, min/max, distribuzione di exit-code/signal e riepiloghi del massimo RSS per ogni comando. L’uso facoltativo di --cpu-prof-dir / --heap-prof-dir scrive profili V8 per ogni run, così misurazione dei tempi e acquisizione dei profili usano lo stesso harness.
Convenzioni di output salvato:
pnpm test:startup:bench:smokescrive l’artefatto smoke mirato in.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:savescrive l’artefatto della suite completa in.artifacts/cli-startup-bench-all.jsonusandoruns=5ewarmup=1pnpm test:startup:bench:updateaggiorna il fixture baseline versionato intest/fixtures/cli-startup-bench.jsonusandoruns=5ewarmup=1
test/fixtures/cli-startup-bench.json- Aggiorna con
pnpm test:startup:bench:update - Confronta i risultati correnti con il fixture tramite
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker è facoltativo; serve solo per i test smoke di onboarding containerizzati. Flusso completo a freddo in un container Linux pulito:openclaw health.
Smoke di importazione QR (Docker)
Garantisce cheqrcode-terminal venga caricato sotto i runtime Node Docker supportati (Node 24 predefinito, Node 22 compatibile):