10 KiB
| read_when | summary | title | x-i18n | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Wie Sie Tests lokal ausführen (Vitest) und wann Sie die Modi „force“/„coverage“ verwenden sollten | Tests |
|
Tests
-
Vollständiges Test-Kit (Suites, Live, Docker): Testing
-
pnpm test:force: Beendet jeden hängengebliebenen Gateway-Prozess, der den Standard-Control-Port belegt, 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 zurückgelassen hat. -
pnpm test:coverage: Führt die Unit-Suite mit V8-Coverage aus (übervitest.unit.config.ts). Dies ist ein Unit-Coverage-Gate für geladene Dateien, nicht eine repo-weite All-File-Coverage. Die Schwellenwerte sind 70 % für Zeilen/Funktionen/Statements und 55 % für Branches. Weilcoverage.allfalse ist, misst das Gate Dateien, die von der Unit-Coverage-Suite geladen wurden, statt jede Quelldatei auf Split-Lane-Ebene als nicht abgedeckt zu behandeln. -
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 in scoped Vitest-Lanes, wenn der Diff nur routbare Source-/Test-Dateien berührt. Änderungen an Konfiguration/Setup fallen weiterhin auf den nativen Root-Projects-Lauf zurück, damit Änderungen an der Verdrahtung bei Bedarf breit neu ausgeführt werden. -
pnpm changed:lanes: Zeigt die architektonischen Lanes an, die durch den Diff gegenorigin/mainausgelöst werden. -
pnpm check:changed: Führt das intelligente Changed-Gate für den Diff gegenorigin/mainaus. Es führt Core-Arbeit mit Core-Test-Lanes aus, Erweiterungsarbeit mit Erweiterungs-Test-Lanes, test-only-Arbeit nur mit Test-Typecheck/Tests, erweitert Änderungen am öffentlichen Plugin SDK oder an Plugin-Verträgen auf Validierung der Erweiterungen und hält version-only Änderungen an Release-Metadaten auf gezielte Prüfungen von Version/Konfiguration/Root-Abhängigkeiten beschränkt. -
pnpm test: Leitet explizite Datei-/Verzeichnisziele über scoped Vitest-Lanes. Läufe ohne Ziel verwenden feste Shard-Gruppen und werden zu Leaf-Configs für lokale parallele Ausführung erweitert; die Erweiterungsgruppe wird immer zu den Shard-Configs pro Erweiterung erweitert statt in einen riesigen Root-Project-Prozess. -
Vollständige Läufe und Erweiterungs-Shards aktualisieren lokale Timing-Daten in
.artifacts/vitest-shard-timings.json; spätere Läufe verwenden diese Timings, um langsame und schnelle Shards auszubalancieren. Setzen SieOPENCLAW_TEST_PROJECTS_TIMINGS=0, um das lokale Timing-Artefakt zu ignorieren. -
Ausgewählte Testdateien aus
plugin-sdkundcommandswerden jetzt über dedizierte leichte Lanes geleitet, die nurtest/setup.tsbeibehalten, während laufzeitschwere Fälle auf ihren bestehenden Lanes bleiben. -
Ausgewählte Hilfsquelldateien aus
plugin-sdkundcommandsordnenpnpm test:changedebenfalls expliziten Schwester-Tests in diesen leichten Lanes zu, sodass kleine Änderungen an Hilfsdateien das erneute Ausführen der schweren laufzeitgestützten Suites vermeiden. -
auto-replyist jetzt ebenfalls in drei dedizierte Configs aufgeteilt (core,top-level,reply), sodass das Reply-Harness nicht die leichteren Top-Level-Tests für Status/Token/Helper dominiert. -
Die Basis-Vitest-Konfiguration verwendet jetzt standardmäßig
pool: "threads"undisolate: false, wobei der gemeinsame nicht isolierte Runner über die Repo-Configs hinweg aktiviert ist. -
pnpm test:channelsführtvitest.channels.config.tsaus. -
pnpm test:extensionsundpnpm test extensionsführen alle Erweiterungs-/Plugin-Shards aus. Schwere Channel-Erweiterungen und OpenAI laufen als dedizierte Shards; andere Erweiterungsgruppen bleiben gebündelt. Verwenden Siepnpm test extensions/<id>für die Lane eines gebündelten Plugins. -
pnpm test:perf:imports: Aktiviert Reporting zu Vitest-Importdauer + Importaufschlüsselung, verwendet aber weiterhin scoped 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-Projects-Lauf für denselben committeten Git-Diff. -
pnpm test:perf:changed:bench -- --worktreebenchmarkt die aktuelle Änderung im Worktree, 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- + 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 (Multi-Instance WS/HTTP/Node-Pairing). Verwendet standardmäßigthreads+isolate: falsemit adaptiven Workern invitest.e2e.config.ts; anpassen mitOPENCLAW_E2E_WORKERS=<n>undOPENCLAW_E2E_VERBOSE=1für ausführliche Logs. -
pnpm test:live: Führt Live-Tests für Anbieter aus (minimax/zai). Erfordert API-Schlüssel undLIVE=1(oder anbieterspezifisches*_LIVE_TEST=1), damit das Überspringen aufgehoben wird. -
pnpm test:docker:openwebui: Startet 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 soll nicht so CI-stabil sein wie die normalen Unit-/e2e-Suites. -
pnpm test:docker:mcp-channels: Startet einen vorbereiteten Gateway-Container und einen zweiten Client-Container, deropenclaw mcp servestartet, und verifiziert dann geroutete Unterhaltungserkennung, Transkript-Lesezugriffe, Attachment-Metadaten, Verhalten der Live-Event-Queue, ausgehendes Send-Routing und Claude-artige Channel- + Berechtigungsbenachrichtigungen über die echte stdio-Bridge. Die Assertion für Claude-Benachrichtigungen liest die rohen stdio-MCP-Frames direkt, sodass der Smoke dem entspricht, was die Bridge tatsächlich ausgibt.
Lokales PR-Gate
Für lokale PR-Land-/Gate-Prüfungen ausführen:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Wenn pnpm test auf einem ausgelasteten Host flakey ist, einmal erneut ausführen, bevor Sie es als Regression behandeln, und dann mit pnpm test <path/to/test> isolieren. Für Hosts mit knappen Speicherressourcen verwenden Sie:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark der Modelllatenz (lokale Schlüssel)
Skript: scripts/bench-model.ts
Verwendung:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Optionale env:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Standard-Prompt: „Reply with a single word: ok. No punctuation or extra text.“
Letzter Lauf (2025-12-31, 20 Läufe):
- minimax Median 1279 ms (min 1114, max 2431)
- opus Median 2454 ms (min 1224, max 3170)
Benchmark für CLI-Start
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
Presets:
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 Presets
Die Ausgabe enthält sampleCount, avg, p50, p95, min/max, Verteilung von Exit-Code/Signal und Zusammenfassungen zu max RSS für jeden Befehl. Optionales --cpu-prof-dir / --heap-prof-dir schreibt V8-Profile pro Lauf, 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 vollständige Suite-Artefakt nach.artifacts/cli-startup-bench-all.jsonmitruns=5undwarmup=1pnpm test:startup:bench:updateaktualisiert die eingecheckte Baseline-Fixture untertest/fixtures/cli-startup-bench.jsonmitruns=5undwarmup=1
Eingecheckte Fixture:
test/fixtures/cli-startup-bench.json- Aktualisieren mit
pnpm test:startup:bench:update - Aktuelle Ergebnisse mit der Fixture vergleichen über
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker ist optional; dies wird nur für containerisierte Onboarding-Smoke-Tests benötigt.
Vollständiger Cold-Start-Ablauf in einem sauberen Linux-Container:
scripts/e2e/onboard-docker.sh
Dieses Skript steuert den interaktiven Wizard über ein Pseudo-TTY, prüft Konfigurations-/Workspace-/Sitzungsdateien, startet dann das Gateway und führt openclaw health aus.
QR-Import-Smoke (Docker)
Stellt sicher, dass qrcode-terminal unter den unterstützten Docker-Node-Laufzeiten geladen wird (standardmäßig Node 24, kompatibel mit Node 22):
pnpm test:docker:qr