Tests
- Kit de test complet (suites, live, Docker) : Testing
-
pnpm test:force: tue tout processus de passerelle restant qui détient le port de contrôle par défaut, puis exécute la suite Vitest complète avec un port de passerelle isolé afin que les tests serveur n’entrent pas en collision avec une instance en cours d’exécution. Utilisez cette commande lorsqu’une exécution précédente de la passerelle a laissé le port 18789 occupé. -
pnpm test:coverage: exécute la suite unitaire avec la couverture V8 (viavitest.unit.config.ts). Les seuils globaux sont de 70 % pour les lignes/branches/fonctions/instructions. La couverture exclut les points d’entrée fortement orientés intégration (câblage CLI, ponts gateway/telegram, serveur statique webchat) afin de garder la cible centrée sur une logique testable unitairement. -
pnpm test:coverage:changed: exécute la couverture unitaire uniquement pour les fichiers modifiés depuisorigin/main. -
pnpm test:changed: étend les chemins git modifiés en lanes Vitest ciblées lorsque le diff ne touche que des fichiers source/test routables. Les modifications de config/de configuration reviennent toujours à l’exécution native des projets racine afin que les modifications de câblage relancent largement les tests quand c’est nécessaire. -
pnpm test: route les cibles explicites fichier/répertoire via des lanes Vitest ciblées. Les exécutions non ciblées lancent désormais onze configurations shardées séquentielles (vitest.full-core-unit-src.config.ts,vitest.full-core-unit-security.config.ts,vitest.full-core-unit-ui.config.ts,vitest.full-core-unit-support.config.ts,vitest.full-core-support-boundary.config.ts,vitest.full-core-contracts.config.ts,vitest.full-core-bundled.config.ts,vitest.full-core-runtime.config.ts,vitest.full-agentic.config.ts,vitest.full-auto-reply.config.ts,vitest.full-extensions.config.ts) au lieu d’un unique gros processus de projet racine. -
Certains fichiers de test
plugin-sdketcommandspassent maintenant par des lanes dédiées légères qui ne conservent quetest/setup.ts, en laissant les cas plus lourds au runtime sur leurs lanes existantes. -
Certains fichiers source helper
plugin-sdketcommandsmappent aussipnpm test:changedvers des tests voisins explicites dans ces lanes légères, de sorte que de petites modifications de helpers évitent de relancer les suites lourdes adossées au runtime. -
auto-replyest désormais lui aussi divisé en trois configurations dédiées (core,top-level,reply) afin que le harnais de réponse ne domine pas les tests plus légers de statut/jeton/helper de niveau supérieur. -
La configuration de base Vitest utilise désormais par défaut
pool: "threads"etisolate: false, avec le runner partagé non isolé activé dans toutes les configurations du dépôt. -
pnpm test:channelsexécutevitest.channels.config.ts. -
pnpm test:extensionsexécutevitest.extensions.config.ts. -
pnpm test:extensions: exécute les suites extension/plugin. -
pnpm test:perf:imports: active les rapports Vitest sur la durée des imports et la répartition des imports, tout en continuant à utiliser le routage par lanes ciblées pour les cibles explicites fichier/répertoire. -
pnpm test:perf:imports:changed: même profilage des imports, mais uniquement pour les fichiers modifiés depuisorigin/main. -
pnpm test:perf:changed:bench -- --ref <git-ref>compare le chemin routé du mode changed à l’exécution native du projet racine pour le même diff git validé. -
pnpm test:perf:changed:bench -- --worktreecompare l’ensemble de modifications actuel du worktree sans devoir valider d’abord. -
pnpm test:perf:profile:main: écrit un profil CPU pour le thread principal Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: écrit des profils CPU + heap pour le runner unitaire (.artifacts/vitest-runner-profile). -
Intégration gateway : activez-la explicitement avec
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testoupnpm test:gateway. -
pnpm test:e2e: exécute les tests smoke end-to-end de la passerelle (appairage WS/HTTP/nœud multi-instance). Utilise par défautthreads+isolate: falseavec des workers adaptatifs dansvitest.e2e.config.ts; ajustez avecOPENCLAW_E2E_WORKERS=<n>et définissezOPENCLAW_E2E_VERBOSE=1pour des journaux détaillés. -
pnpm test:live: exécute les tests live des fournisseurs (minimax/zai). Nécessite des clés API etLIVE=1(ou*_LIVE_TEST=1spécifique au fournisseur) pour ne plus les ignorer. -
pnpm test:docker:openwebui: démarre OpenClaw + Open WebUI dans Docker, se connecte via Open WebUI, vérifie/api/models, puis exécute un vrai chat proxifié via/api/chat/completions. Nécessite une clé de modèle live utilisable (par exemple OpenAI dans~/.profile), récupère une image Open WebUI externe et n’est pas censé être stable en CI comme les suites unitaires/e2e normales. -
pnpm test:docker:mcp-channels: démarre un conteneur Gateway initialisé et un second conteneur client qui lanceopenclaw mcp serve, puis vérifie la découverte de conversation routée, les lectures de transcription, les métadonnées des pièces jointes, le comportement de file d’événements live, le routage des envois sortants, ainsi que les notifications de canal + autorisation de type Claude via le vrai pont stdio. L’assertion de notification Claude lit directement les trames MCP stdio brutes afin que le smoke reflète ce qu’émet réellement le pont.
Barrière locale de PR
Pour les vérifications locales de landing/gate de PR, exécutez :pnpm checkpnpm buildpnpm testpnpm check:docs
pnpm test devient instable sur un hôte chargé, relancez-le une fois avant de le traiter comme une régression, puis isolez avec pnpm test <path/to/test>. Pour les hôtes limités en mémoire, utilisez :
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark de latence de modèle (clés locales)
Script :scripts/bench-model.ts
Utilisation :
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Variables d’environnement facultatives :
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Prompt par défaut : “Répondez avec un seul mot : ok. Sans ponctuation ni texte supplémentaire.”
- minimax médiane 1279ms (min 1114, max 2431)
- opus médiane 2454ms (min 1224, max 3170)
Benchmark de démarrage CLI
Script :scripts/bench-cli-startup.ts
Utilisation :
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: les deux préréglages
sampleCount, avg, p50, p95, min/max, la distribution code de sortie/signal, ainsi que des résumés de RSS max pour chaque commande. Les options facultatives --cpu-prof-dir / --heap-prof-dir écrivent des profils V8 par exécution afin que la capture de chronométrage et de profil utilise le même harnais.
Conventions de sortie enregistrée :
pnpm test:startup:bench:smokeécrit l’artefact smoke ciblé dans.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:saveécrit l’artefact de la suite complète dans.artifacts/cli-startup-bench-all.jsonavecruns=5etwarmup=1pnpm test:startup:bench:updaterafraîchit le fixture de référence versionné danstest/fixtures/cli-startup-bench.jsonavecruns=5etwarmup=1
test/fixtures/cli-startup-bench.json- Rafraîchissez-le avec
pnpm test:startup:bench:update - Comparez les résultats actuels au fixture avec
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker est facultatif ; cela n’est nécessaire que pour les tests smoke d’onboarding conteneurisés. Flux complet de démarrage à froid dans un conteneur Linux propre :openclaw health.
Smoke d’import QR (Docker)
Garantit queqrcode-terminal se charge sous les runtimes Node Docker pris en charge (Node 24 par défaut, Node 22 compatible) :