Tests
- Vollständiges Test-Kit (Suites, Live, Docker): Testing
-
pnpm test:force: Beendet alle verbliebenen Gateway-Prozesse, die den Standard-Control-Port belegen, und führt dann die vollständige Vitest-Suite mit einem isolierten Gateway-Port aus, damit Server-Tests nicht mit einer laufenden Instanz kollidieren. Verwenden Sie dies, wenn ein vorheriger Gateway-Lauf Port 18789 belegt gelassen hat. -
pnpm test:coverage: Führt die Unit-Suite mit V8-Coverage aus (übervitest.unit.config.ts). Globale Schwellenwerte sind 70 % für Zeilen/Branches/Funktionen/Statements. Coverage schließt integrationslastige Entry-Points aus (CLI-Verdrahtung, Gateway-/Telegram-Bridges, statischer Webchat-Server), damit das Ziel auf unit-testbare Logik fokussiert bleibt. -
pnpm test:coverage:changed: Führt Unit-Coverage nur für Dateien aus, die sich seitorigin/maingeändert haben. -
pnpm test:changed: erweitert geänderte Git-Pfade zu gezielten Vitest-Lanes, wenn der Diff nur routingfähige Quell-/Testdateien berührt. Änderungen an Konfiguration/Setup fallen weiterhin auf den nativen Root-Projects-Lauf zurück, damit Verdrahtungsänderungen bei Bedarf breit erneut ausgeführt werden. -
pnpm test: leitet explizite Datei-/Verzeichnisziele durch gezielte Vitest-Lanes. Nicht zielgerichtete Läufe führen jetzt elf sequentielle Shard-Konfigurationen aus (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) statt eines einzigen riesigen Root-Project-Prozesses. -
Ausgewählte Testdateien in
plugin-sdkundcommandswerden jetzt durch dedizierte leichte Lanes geleitet, die nurtest/setup.tsbeibehalten, während laufzeitintensive Fälle auf ihren bestehenden Lanes bleiben. -
Ausgewählte Hilfs-Quelldateien in
plugin-sdkundcommandsordnenpnpm test:changedebenfalls expliziten benachbarten Tests in diesen leichten Lanes zu, sodass kleine Hilfsänderungen das erneute Ausführen der schweren, laufzeitgestützten Suites vermeiden. -
auto-replyist jetzt ebenfalls in drei dedizierte Konfigurationen aufgeteilt (core,top-level,reply), damit das Reply-Harness die leichteren Top-Level-Tests für Status/Token/Helper nicht dominiert. -
Die Basis-Vitest-Konfiguration verwendet jetzt standardmäßig
pool: "threads"undisolate: false, wobei der gemeinsam genutzte nicht isolierte Runner in den Repo-Konfigurationen aktiviert ist. -
pnpm test:channelsführtvitest.channels.config.tsaus. -
pnpm test:extensionsführtvitest.extensions.config.tsaus. -
pnpm test:extensions: führt Extension-/Plugin-Suites aus. -
pnpm test:perf:imports: aktiviert die Berichterstattung zu Vitest-Importdauer und Importaufschlüsselung und verwendet dabei weiterhin gezieltes Lane-Routing für explizite Datei-/Verzeichnisziele. -
pnpm test:perf:imports:changed: dasselbe Import-Profiling, aber nur für Dateien, die sich seitorigin/maingeändert haben. -
pnpm test:perf:changed:bench -- --ref <git-ref>benchmarkt den gerouteten Changed-Mode-Pfad gegen den nativen Root-Project-Lauf für denselben committeten Git-Diff. -
pnpm test:perf:changed:bench -- --worktreebenchmarkt das aktuelle Worktree-Änderungsset, ohne vorher zu committen. -
pnpm test:perf:profile:main: schreibt ein CPU-Profil für den Vitest-Hauptthread (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: schreibt CPU- und Heap-Profile für den Unit-Runner (.artifacts/vitest-runner-profile). -
Gateway-Integration: Opt-in über
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testoderpnpm test:gateway. -
pnpm test:e2e: Führt Gateway-End-to-End-Smoke-Tests aus (Pairing mit mehreren Instanzen über WS/HTTP/Node). Verwendet standardmäßigthreads+isolate: falsemit adaptiven Workern invitest.e2e.config.ts; passen Sie dies mitOPENCLAW_E2E_WORKERS=<n>an und setzen SieOPENCLAW_E2E_VERBOSE=1für ausführliche Logs. -
pnpm test:live: Führt Provider-Live-Tests aus (minimax/zai). Erfordert API-Schlüssel undLIVE=1(oder providerspezifisch*_LIVE_TEST=1), damit Tests nicht übersprungen werden. -
pnpm test:docker:openwebui: Startet ein Docker-basiertes OpenClaw + Open WebUI, meldet sich über Open WebUI an, prüft/api/modelsund führt dann einen echten proxied Chat über/api/chat/completionsaus. Erfordert einen verwendbaren Live-Modellschlüssel (zum Beispiel OpenAI in~/.profile), zieht ein externes Open-WebUI-Image und ist nicht dafür gedacht, wie normale Unit-/E2E-Suites CI-stabil zu sein. -
pnpm test:docker:mcp-channels: Startet einen vorbereiteten Gateway-Container und einen zweiten Client-Container, deropenclaw mcp servestartet, und verifiziert dann geroutete Konversationserkennung, Transkript-Lesevorgänge, Anhangsmetadaten, Verhalten der Live-Ereigniswarteschlange, ausgehendes Send-Routing und Claude-artige Kanal- und Berechtigungsbenachrichtigungen über die echte stdio-Bridge. Die Claude-Benachrichtigungs-Assertion liest die rohen stdio-MCP-Frames direkt, sodass der Smoke-Test widerspiegelt, was die Bridge tatsächlich ausgibt.
Lokales PR-Gate
Führen Sie für lokale PR-Land-/Gate-Prüfungen Folgendes aus:pnpm checkpnpm buildpnpm testpnpm check:docs
pnpm test auf einem stark ausgelasteten Host flakey ist, führen Sie es einmal erneut aus, bevor Sie es als Regression behandeln, und isolieren Sie es dann mit pnpm test <path/to/test>. Für Hosts mit eingeschränktem Arbeitsspeicher verwenden Sie:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Modell-Latenz-Benchmark (lokale Schlüssel)
Skript:scripts/bench-model.ts
Verwendung:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Optionale Umgebungsvariablen:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Standard-Prompt: „Reply with a single word: ok. No punctuation or extra text.“
- minimax Median 1279 ms (min. 1114, max. 2431)
- opus Median 2454 ms (min. 1224, max. 3170)
CLI-Start-Benchmark
Skript:scripts/bench-cli-startup.ts
Verwendung:
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: beide Voreinstellungen
sampleCount, Durchschnitt, p50, p95, Min./Max., Verteilung von Exit-Code/Signal und Zusammenfassungen des maximalen RSS für jeden Befehl. Mit optionalem --cpu-prof-dir / --heap-prof-dir werden V8-Profile pro Lauf geschrieben, sodass Zeitmessung und Profilerfassung dasselbe Harness verwenden.
Konventionen für gespeicherte Ausgaben:
pnpm test:startup:bench:smokeschreibt das gezielte Smoke-Artefakt nach.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:saveschreibt das Artefakt der vollständigen Suite nach.artifacts/cli-startup-bench-all.jsonmitruns=5undwarmup=1pnpm test:startup:bench:updateaktualisiert die eingecheckte Baseline-Fixture intest/fixtures/cli-startup-bench.jsonmitruns=5undwarmup=1
test/fixtures/cli-startup-bench.json- Aktualisieren mit
pnpm test:startup:bench:update - Aktuelle Ergebnisse mit der Fixture vergleichen mit
pnpm test:startup:bench:check
Onboarding-E2E (Docker)
Docker ist optional; dies wird nur für containerisierte Onboarding-Smoke-Tests benötigt. Vollständiger Kaltstart-Ablauf in einem sauberen Linux-Container:openclaw health aus.
QR-Import-Smoke (Docker)
Stellt sicher, dassqrcode-terminal unter den unterstützten Docker-Node-Laufzeiten geladen wird (standardmäßig Node 24, kompatibel mit Node 22):