Release and CI
Tests
- Vollständiges Test-Kit (Testsuiten, Live-Tests, Docker): Tests
- Validierung von Updates und Plugin-Paketen: Updates und Plugins testen
Standardvorgehen für Agents
Agent-Sitzungen führen einen oder wenige fokussierte Tests und kostengünstige statische Prüfungen nur dann lokal aus, wenn die Quelle vertrauenswürdig und die vorhandene Abhängigkeitsinstallation einsatzbereit ist. Führen Sie niemals Repository-Werkzeuge aus nicht vertrauenswürdigen Quellen lokal aus. Größere Testsuiten, Änderungsprüfungen mit Typecheck-/Lint-Auffächerung, Builds, Docker-, Paket- und E2E-Lanes, Live-Nachweise sowie plattformübergreifende Validierungen werden über Crabbox remote ausgeführt. Für aufwendige Nachweise durch vertrauenswürdige Maintainer wird standardmäßig Blacksmith Testbox verwendet. Der konfigurierte Testbox-Workflow stellt Anmeldedaten bereit. Daher muss nicht vertrauenswürdiger Code von Mitwirkenden oder Forks stattdessen geheimnisfreie Fork-CI oder eine bereinigte direkte AWS-Crabbox verwenden.
Wärmen Sie die Umgebung nicht vorsorglich für erwartete Arbeiten vor. Fordern Sie das Backend erst dann bei Bedarf an, wenn
der erste aufwendige Befehl bereit ist, verwenden Sie die zurückgegebene tbx_...-ID für spätere aufwendige
Befehle erneut, synchronisieren Sie bei jeder Ausführung den aktuellen Checkout und stoppen Sie das Backend vor der Übergabe.
Nach der ersten erfolgreichen Wiederverwendung zeichnet der Wrapper die Basis, die
Abhängigkeiten und den Fingerabdruck des Testbox-Workflows der Lease unter .crabbox/testbox-leases/ auf.
Bei reinen Quelltextänderungen wird die vorgewärmte Box weiterhin verwendet. Eine geänderte Merge-Basis, Lockfile,
Paketmanager-Eingabe, ein geänderter Wrapper oder Testbox-Workflow führt zu einem sicheren Abbruch und erfordert eine
neue Lease. Bei jeder Ausführung wird weiterhin der aktuelle Checkout synchronisiert.
OPENCLAW_TESTBOX_ALLOW_STALE=1 dient ausschließlich der gezielten Diagnose, nicht
dem Release-Nachweis.
Die nachstehenden lokalen Testbefehle sind für menschliche Workflows und begrenzte Agent-Nachweise vorgesehen. Die Nichtverfügbarkeit des Remote-Providers muss gemeldet werden; sie erlaubt nicht, stillschweigend eine umfassende lokale Prüfung auszuführen.
Wärmen Sie für aufwendige Nachweise mit nicht vertrauenswürdigem Code bei Bedarf mit --provider aws vor. Jede Ausführung muss
CRABBOX_ENV_ALLOW=CI setzen, --provider aws --no-hydrate übergeben und
vor der Installation von Abhängigkeiten oder der Ausführung von
Tests eine neue temporäre Remote-HOME verwenden. Verwenden Sie eine neu vorgewärmte Lease, die ausschließlich dieser nicht vertrauenswürdigen Quelle dient; verwenden Sie niemals
eine vertrauenswürdige oder zuvor mit Anmeldedaten ausgestattete Lease erneut. Starten Sie ein installiertes, vertrauenswürdiges Crabbox-
Binary aus einem sauberen, vertrauenswürdigen main-Checkout und rufen Sie mit
--fresh-pr ausschließlich den Remote-PR ab; führen Sie niemals den Wrapper oder die Konfiguration des nicht vertrauenswürdigen Checkouts lokal aus.
Entfernen Sie CRABBOX_AWS_INSTANCE_PROFILE und brechen Sie sicher ab, sofern das aufgelöste
aws.instanceProfile nicht leer ist. Verwenden Sie vor jeder Installation bzw. jedem Test vertrauenswürdige
Werkzeuge mit absoluten Pfaden, um ein IMDSv2-Token zu verlangen, nachzuweisen, dass der Endpunkt für IAM-Anmeldedaten
404 zurückgibt, und zu überprüfen, dass die Remote-git rev-parse HEAD dem vollständigen
SHA des geprüften PR-Heads entspricht. Binden Sie die Lease an diesen SHA und stoppen bzw. erwärmen Sie sie erneut, wenn sich der Head
ändert. Laden Sie die vertrauenswürdige Datei scripts/crabbox-untrusted-bootstrap.sh aus dem sauberen
main zusammen mit --fresh-pr hoch; sie installiert festgelegte Node-/pnpm-Versionen, überprüft den SHA
und die Paketmanager-Festlegung, isoliert HOME, installiert Abhängigkeiten und führt anschließend
den angeforderten Test aus. Wenn der Broker nicht nachweisen kann, dass keine Rolle vorhanden ist, oder kein Remote-PR existiert,
verwenden Sie geheimnisfreie Fork-CI. Verwenden Sie weder hydrate-github noch --no-sync oder einen
mit Anmeldedaten ausgestatteten Testbox-Workflow.
Entfernen Sie alle CRABBOX_TAILSCALE*-Überschreibungen, erzwingen Sie --network public --tailscale=false, löschen Sie Exit-Node-/LAN-Flags und verlangen Sie, dass crabbox inspect
öffentliche Netzwerkanbindung ohne Tailscale-Status meldet, bevor Sie ein Skript hochladen.
Übliche lokale Reihenfolge
pnpm test:changedfür Vitest-Nachweise im geänderten Umfang.pnpm test <path-or-filter>für eine Datei, ein Verzeichnis oder ein explizites Ziel.pnpm testnur, wenn Sie bewusst die vollständige lokale Vitest-Testsuite benötigen.
In einem Codex-Worktree oder einem verknüpften bzw. Sparse-Checkout vermeiden Agents die direkte lokale Verwendung von
pnpm test* / pnpm check* / pnpm crabbox:run:
- Begrenzter fokussierter Nachweis mit einsatzbereiten Abhängigkeiten:
node scripts/run-vitest.mjs <path-or-filter>. - Änderungsprüfung mit vorheriger Klassifizierung:
node scripts/check-changed.mjs; reine Dokumentations-, unveränderte und kleine Metadatenpläne bleiben lokal, wenn die Abhängigkeiten einsatzbereit sind, während aufwendige Pläne oder Pläne mit fehlenden Abhängigkeiten an Testbox delegiert werden. - Expliziter umfassender Nachweis mit beibehaltener Lease:
node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox ... -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed, damit pnpm innerhalb von Testbox ausgeführt wird. - Die abschließende
exitCode-Meldung und das Zeitmessungs-JSON des Wrappers bilden das Befehlsergebnis. Eine delegierte Ausführung über Blacksmith GitHub Actions kann nach einem erfolgreichen SSH-Befehlcancelledanzeigen, weil Testbox außerhalb der Keepalive-Action gestoppt wird; prüfen Sie die Wrapper-Zusammenfassung und die Befehlsausgabe, bevor Sie dies als Fehler behandeln. OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: hält die Serialisierung aufwendiger Prüfungen innerhalb des aktuellen Worktrees statt im gemeinsamen Git-Verzeichnis für Befehle wiepnpm check:changedund gezieltepnpm test .... Verwenden Sie dies nur auf leistungsfähigen lokalen Hosts, wenn Sie bewusst unabhängige Prüfungen über verknüpfte Worktrees hinweg ausführen.
Kernbefehle
Ausführungen des Test-Wrappers enden mit einer kurzen [test] passed|failed|skipped ... in ...-Zusammenfassung; die eigene Laufzeitzeile von Vitest bleibt die Detailangabe je Shard.
| Befehl | Funktion |
|---|---|
pnpm test |
Explizite Datei-/Verzeichnisziele werden über bereichsspezifische Vitest-Lanes geleitet. Ausführungen ohne Ziel dienen als Nachweis der vollständigen Testsuite: Feste Shard-Gruppen werden für die lokale parallele Ausführung zu Blattkonfigurationen erweitert, wobei die erwartete Shard-Auffächerung vor dem Start ausgegeben wird. Die Erweiterungsgruppe wird stets zu Shard-Konfigurationen je Erweiterung erweitert, statt in einem einzigen riesigen Root-Projekt-Prozess ausgeführt zu werden. |
pnpm test:changed |
Kostengünstige intelligente Ausführung geänderter Tests: präzise Ziele aus direkten Teständerungen, gleichgeordneten *.test.ts-Dateien, expliziten Quellzuordnungen und dem lokalen Importgraphen. Umfassende Konfigurations-/Paketänderungen werden übersprungen, sofern sie sich nicht präzisen Tests zuordnen lassen. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Explizite umfassende Ausführung geänderter Tests; verwenden Sie sie, wenn eine Änderung an Test-Harness, Konfiguration oder Paket auf das umfassendere Verhalten von Vitest für geänderte Tests zurückfallen soll. |
pnpm test:force |
Gibt den konfigurierten OpenClaw-Gateway-Port frei (Standard: 18789) und führt anschließend die vollständige Testsuite mit einem isolierten Gateway-Port aus, damit Servertests nicht mit einer laufenden Instanz kollidieren. |
pnpm test:coverage |
Erstellt einen informativen V8-Abdeckungsbericht für die standardmäßige Unit-Lane (vitest.unit.config.ts); es werden keine Abdeckungsschwellenwerte erzwungen. |
pnpm test:coverage:changed |
Unit-Testabdeckung nur für Dateien, die seit origin/main geändert wurden. |
pnpm changed:lanes |
Zeigt die durch den Diff gegenüber origin/main ausgelösten Architekturlanes. |
pnpm check:changed |
Klassifiziert die geänderten Lanes vor der Auswahl der Ausführung. Reine Dokumentations-, unveränderte und kleine Metadatenpläne bleiben lokal, wenn die Abhängigkeiten einsatzbereit sind; Pläne mit Typecheck-/Lint-Auffächerung, anderen aufwendigen Lanes oder fehlenden lokalen Abhängigkeiten werden außerhalb der CI an Crabbox/Testbox delegiert. Führt Vitest nicht aus; verwenden Sie pnpm test:changed oder pnpm test <target> für Testnachweise. |
Gemeinsamer Teststatus und Prozesshilfen
src/test-utils/openclaw-test-state.ts: in Vitest verwenden, wenn ein Test eine isolierteHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, Konfigurations-Fixture, einen Workspace, ein Agent-Verzeichnis oder einen Speicher für Authentifizierungsprofile benötigt.pnpm test:env-mutations:report: nicht blockierender Bericht über Tests/Harnesses, dieHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRoder zugehörige Umgebungsschlüssel direkt verändern. Verwenden Sie ihn, um Migrationskandidaten für die gemeinsame Teststatus-Hilfsfunktion zu finden.test/helpers/openclaw-test-instance.ts: E2E-Tests auf Prozessebene, die einen laufenden Gateway, eine CLI-Umgebung, Protokollerfassung und Bereinigung an einer zentralen Stelle benötigen.- Docker-/Bash-E2E-Lanes, die
scripts/lib/docker-e2e-image.sheinbinden, könnendocker_e2e_test_state_shell_b64 <label> <scenario>an den Container übergeben und mitscripts/lib/openclaw-e2e-instance.shdekodieren; Skripte mit mehreren Home-Verzeichnissen könnendocker_e2e_test_state_function_b64übergeben und in jedem Ablaufopenclaw_test_state_create <label> <scenario>aufrufen.node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonschreibt eine einbindbare Host-Umgebungsdatei (das--vorcreateverhindert, dass neuere Node-Laufzeiten--env-fileals Node-Flag behandeln). Lanes, die einen Gateway starten, könnenscripts/lib/openclaw-e2e-instance.shfür die Auflösung des Einstiegspunkts, den Start eines OpenAI-Mocks, den Start im Vorder- bzw. Hintergrund, Bereitschaftsprüfungen, den Export der Statusumgebung, Protokollausgaben und die Prozessbereinigung einbinden.
Control UI, TUI und Erweiterungs-Lanes
- Gemockte E2E-Tests der Control UI:
pnpm test:ui:e2eführt die Vitest- und Playwright-Lane aus, die die Vite Control UI startet und eine echte Chromium-Seite gegen einen gemockten Gateway-WebSocket steuert. Die Tests befinden sich inui/src/**/*.e2e.test.ts; gemeinsame Mocks und Steuerelemente befinden sich inui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2eumfasst diese Lane. Agent-Ausführungen verwenden standardmäßig Testbox/Crabbox, einschließlich gezielter Nachweise; verwenden Sienode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsnur für einen ausdrücklich festgelegten lokalen Fallback. - TUI-PTY-Tests:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsführt die schnelle PTY-Lane mit simuliertem Backend aus.OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1oderpnpm tui:pty:test:watch --mode localführt den langsamerentui --local-Smoke-Test aus, der nur den externen Modellendpunkt mockt. Prüfen Sie stabilen sichtbaren Text oder Fixture-Aufrufe, nicht rohe ANSI-Snapshots. pnpm test:extensionsundpnpm test extensionsführen alle Erweiterungs-/Plugin-Shards aus. Ressourcenintensive Kanal-Plugins, das Browser-Plugin und OpenAI werden als dedizierte Shards ausgeführt; andere Plugin-Gruppen bleiben gebündelt.pnpm test extensions/<id>führt eine Lane für ein einzelnes gebündeltes Plugin aus.- Quelldateien mit Tests in Geschwisterdateien werden zunächst diesen Geschwisterdateien zugeordnet, bevor auf breitere Verzeichnis-Globs zurückgegriffen wird. Änderungen an Hilfsfunktionen unter
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersundsrc/plugins/contractsverwenden einen lokalen Importgraphen, um importierende Tests auszuführen, statt bei einem eindeutigen Abhängigkeitspfad jeden Shard umfassend auszuführen. - Ziele in Vertragsverzeichnissen werden auf ihre Vertrags-Lanes verteilt:
pnpm test src/channels/plugins/contractsführt die vier Konfigurationen für Kanalverträge aus undpnpm test src/plugins/contractsführt die Konfiguration für Plugin-Verträge aus, da die generischen Projektechannels/pluginscontracts/**ausschließen. auto-replywird in drei dedizierte Konfigurationen aufgeteilt (core,top-level,reply), damit das Antwort-Testgerüst die leichteren übergeordneten Status-/Token-/Hilfsfunktionstests nicht dominiert.- Ausgewählte Testdateien aus
plugin-sdkundcommandswerden über dedizierte ressourcenschonende Lanes geleitet, die nurtest/setup.tsenthalten; laufzeitintensive Fälle verbleiben auf ihren bestehenden Lanes. - Die Vitest-Basiskonfiguration verwendet standardmäßig
pool: "threads"undisolate: false, wobei der gemeinsame nicht isolierte Runner für alle Repository-Konfigurationen aktiviert ist. pnpm test:channelsführtvitest.channels.config.tsaus.
Gateway und E2E
- Die Gateway-Integration ist optional zu aktivieren:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testoderpnpm test:gateway. pnpm test:e2e: Repository-E2E-Gesamtlauf =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: Gateway-End-to-End-Smoke-Tests (WS-/HTTP-/Node-Kopplung mit mehreren Instanzen). Verwendet standardmäßigthreads+isolate: falsemit adaptiven Workern invitest.e2e.config.ts; Anpassung mitOPENCLAW_E2E_WORKERS=<n>, ausführliche Protokolle mitOPENCLAW_E2E_VERBOSE=1.pnpm test:live: Live-Tests für Provider (Claude/Minimax/DeepSeek/z.ai/usw., gesteuert durch*.live.test.ts). Erfordert API-Schlüssel undLIVE=1(oderOPENCLAW_LIVE_TEST=1), um die Tests nicht zu überspringen; ausführliche Ausgabe mitOPENCLAW_LIVE_TEST_QUIET=0.
Vollständige Docker-Suite (pnpm test:docker:all)
Erstellt das gemeinsame Live-Test-Image, verpackt OpenClaw einmalig als npm-Tarball, erstellt/verwendet ein minimales Node-/Git-Runner-Image sowie ein Funktions-Image, das diesen Tarball in /app installiert, und führt anschließend Docker-Smoke-Lanes über einen gewichteten Scheduler aus. scripts/package-openclaw-for-docker.mjs ist der einzige lokale/CI-Paket-Packer und validiert den Tarball sowie dist/postinstall-inventory.json, bevor Docker ihn verwendet.
- Minimales Image (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): Lanes für Installation/Aktualisierung/Plugin-Abhängigkeiten; bindet den vorab erstellten Tarball ein, statt kopierte Repository-Quellen zu verwenden. - Funktions-Image (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): Lanes für die normale Funktionalität der erstellten Anwendung. - Lane-Definitionen:
scripts/lib/docker-e2e-scenarios.mjs. Planer:scripts/lib/docker-e2e-plan.mjs. Ausführer:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsongibt den vom Scheduler verwalteten CI-Plan (Lanes, Image-Typen, Anforderungen an Paket-/Live-Images, Zustandsszenarien, Anmeldedatenprüfungen) aus, ohne Docker zu erstellen oder auszuführen.
Scheduler-Einstellungen (Umgebungsvariablen, Standardwerte in Klammern):
| Umgebungsvariable | Standardwert | Zweck |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Prozess-Slots. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Provider-sensitiver Tail-Pool. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Obergrenze für ressourcenintensive Live-Provider-Lanes. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Obergrenze für Lanes mit npm-Ressourcen. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Obergrenze für Lanes mit Dienstressourcen. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Provider-spezifische Obergrenzen für ressourcenintensive Lanes. |
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT |
1 | Engere Provider-spezifische Obergrenzen. |
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT |
- | Überschreibung für größere Hosts. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Verzögerung zwischen Lane-Starts, um Erstellungsstürme beim lokalen Docker-Daemon zu vermeiden. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 min) | Fallback-Zeitüberschreitung pro Lane; ausgewählte Live-/Tail-Lanes verwenden engere Obergrenzen. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Wiederholungsversuche bei vorübergehenden Live-Provider-Fehlern. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
aus | Gibt das Lane-Manifest aus, ohne Docker auszuführen. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Intervall für die Statusausgabe aktiver Lanes. |
OPENCLAW_DOCKER_ALL_TIMINGS |
ein | Verwendet .artifacts/docker-tests/lane-timings.json erneut für eine Sortierung mit den längsten zuerst; setzen Sie den Wert auf 0, um dies zu deaktivieren. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip nur für deterministische/lokale Lanes, only nur für Live-Provider-Lanes. Aliasse: pnpm test:docker:local:all, pnpm test:docker:live:all. Der Nur-Live-Modus führt Haupt- und Tail-Live-Lanes in einem einzigen, nach längsten zuerst sortierten Pool zusammen, sodass Provider-Buckets Claude-/Codex-/Gemini-Aufgaben gemeinsam bündeln. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Zeitüberschreitung für die Docker-Einrichtung des CLI-Backends. |
Das Muster für Umgebungsvariablen von Ressourcenobergrenzen lautet OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (Ressourcenname in Großbuchstaben, nicht alphanumerische Zeichen zu _ zusammengefasst).
Weiteres Verhalten: Der Runner führt standardmäßig einen Docker-Preflight durch, bereinigt veraltete OpenClaw-E2E-Container, teilt Caches für Provider-CLI-Tools zwischen kompatiblen Lanes und plant nach dem ersten Fehler keine neuen gepoolten Lanes mehr ein, sofern OPENCLAW_DOCKER_ALL_FAIL_FAST=0 nicht gesetzt ist. Wenn eine Lane auf einem Host mit geringer Parallelität die effektive Gewichtungs-/Ressourcenobergrenze überschreitet, kann sie dennoch aus einem leeren Pool starten und allein ausgeführt werden, bis sie Kapazität freigibt. Lane-spezifische Protokolle, summary.json, failures.json und Phasenzeiten werden unter .artifacts/docker-tests/<run-id>/ geschrieben; verwenden Sie pnpm test:docker:timings <summary.json>, um langsame Lanes zu untersuchen, und pnpm test:docker:rerun <run-id|summary.json|failures.json>, um kostengünstige Befehle für gezielte Wiederholungsläufe auszugeben.
Wichtige Docker-Lanes
| Befehl | Überprüft |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
Chromium-gestützter Quell-E2E-Container mit direktem CDP und isoliertem Gateway; CDP-Rollen-Snapshots von browser doctor --deep enthalten Link-URLs, durch den Cursor als anklickbar erkannte Elemente, iframe-Referenzen und Frame-Metadaten. |
pnpm test:docker:skill-install |
Installiert das gepackte Tarball in einem minimalistischen Docker-Runner mit skills.install.allowUploadedArchives: false, ermittelt über eine Live-ClawHub-Suche einen aktuellen Skill-Slug, installiert ihn über openclaw skills install und überprüft SKILL.md, .clawhub/origin.json, .clawhub/lock.json und skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Gezielte Live-Prüfungen für CLI-Backends; Gemini verfügt über die entsprechenden Aliasse :resume und :mcp. |
pnpm test:docker:openwebui |
Dockerisiertes OpenClaw + Open WebUI: anmelden, /api/models prüfen und einen echten weitergeleiteten Chat über /api/chat/completions ausführen. Erfordert einen nutzbaren Schlüssel für ein Live-Modell und lädt ein externes Image herunter; es wird nicht dieselbe CI-Stabilität wie bei den Unit-/E2E-Suites erwartet. |
pnpm test:docker:mcp-channels |
Vorbereiteter Gateway-Container sowie ein Client-Container, der openclaw mcp serve startet: geroutete Konversationserkennung, Lesen von Transkripten, Anhangsmetadaten, Verhalten der Live-Ereigniswarteschlange, Routing ausgehender Sendungen sowie Benachrichtigungen zu Kanälen und Berechtigungen im Claude-Stil über die echte stdio-Bridge (die Assertion liest unverarbeitete stdio-MCP-Frames direkt). |
pnpm test:docker:upgrade-survivor |
Installiert das gepackte Tarball über einer veralteten Bestandsbenutzer-Fixture, führt ohne Live-Schlüssel für Provider/Kanäle eine Paketaktualisierung sowie Doctor im nicht interaktiven Modus aus, startet ein Loopback-Gateway und prüft, ob Agenten-/Kanalkonfiguration, Plugin-Zulassungslisten, Workspace-/Sitzungsdateien, veralteter Abhängigkeitsstatus von Legacy-Plugins, Start und RPC-Status erhalten bleiben. |
pnpm test:docker:published-upgrade-survivor |
Installiert standardmäßig openclaw@latest, legt realistische Dateien eines Bestandsbenutzers an, konfiguriert über ein integriertes openclaw config set-Rezept, aktualisiert auf das gepackte Tarball, führt Doctor im nicht interaktiven Modus aus, schreibt .artifacts/upgrade-survivor/summary.json und prüft /healthz, /readyz sowie den RPC-Status. Überschreiben Sie dies mit OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, erweitern Sie eine Matrix mit OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS oder fügen Sie Szenario-Fixtures mit OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues hinzu (enthält configured-plugin-installs und stale-source-plugin-shadow). Package Acceptance stellt diese als published_upgrade_survivor_baseline(s) / _scenarios bereit und löst Metatoken wie last-stable-4 oder all-since-2026.4.23 auf. |
pnpm test:docker:update-migration |
Testsystem für das Überstehen einer veröffentlichten Aktualisierung im Szenario plugin-deps-cleanup, das standardmäßig bei [email protected] beginnt. Der Workflow Update Migration erweitert dies mit baselines=all-since-2026.4.23, um die Bereinigung von Abhängigkeiten konfigurierter Plugins außerhalb der vollständigen Release-CI nachzuweisen. |
pnpm test:docker:plugins |
Installations-/Aktualisierungs-Smoke-Test für lokalen Pfad, file:, npm-Registry-Pakete mit hochgezogenen Abhängigkeiten, sich bewegende Git-Referenzen, ClawHub-Fixtures, Marketplace-Aktualisierungen sowie Aktivierung/Inspektion des Claude-Bundles. |
Lokales PR-Gate
Führen Sie für lokale Prüfungen zum Landen/Gating eines PR Folgendes aus:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Wenn pnpm test auf einem ausgelasteten Host sporadisch fehlschlägt, führen Sie es einmal erneut aus, bevor Sie es als Regression behandeln, und isolieren Sie es anschließend mit pnpm test <path/to/test>. Für Hosts mit begrenztem Arbeitsspeicher:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Tools für die Testleistung
pnpm test:perf:imports: Aktiviert die Berichterstellung zu Vitest-Importdauer und Importaufschlüsselung, verwendet für explizite Datei-/Verzeichnisziele jedoch weiterhin das bereichsspezifische Lane-Routing.pnpm test:perf:imports:changedbeschränkt dasselbe Profiling auf Dateien, die seitorigin/maingeändert wurden.pnpm test:perf:changed:bench -- --ref <git-ref>vergleicht die Leistung des gerouteten Modus für Änderungen mit dem nativen Lauf des Root-Projekts für denselben committeten Git-Diff;pnpm test:perf:changed:bench -- --worktreemisst den aktuellen Änderungssatz im Worktree, ohne ihn zuvor zu committen.pnpm test:perf:profile:mainschreibt ein CPU-Profil für den Vitest-Hauptthread (.artifacts/vitest-main-profile);pnpm test:perf:profile:runnerschreibt CPU- und Heap-Profile für den Unit-Runner (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: Führt jede Vitest-Blattkonfiguration der vollständigen Suite seriell aus und schreibt gruppierte Laufzeitdaten sowie JSON-/Protokollartefakte pro Konfiguration. Berichte der vollständigen Suite isolieren Dateien standardmäßig, damit beibehaltene Modulgraphen und GC-Pausen aus früheren Dateien nicht späteren Assertions zugerechnet werden; übergeben Sie-- --no-isolatenur, wenn Sie bewusst die Akkumulation in gemeinsam genutzten Workern profilieren. Der Agent für Testleistung verwendet dies als Ausgangsbasis, bevor er versucht, langsame Tests zu beheben.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonvergleicht gruppierte Berichte nach einer leistungsorientierten Änderung.- Läufe für vollständige Suites, Erweiterungen und Include-Muster aktualisieren lokale Zeitmessdaten in
.artifacts/vitest-shard-timings.json; spätere Läufe der gesamten Konfiguration verwenden diese Messwerte, um langsame und schnelle Shards auszugleichen. CI-Shards mit Include-Muster hängen den Shard-Namen an den Zeitmessschlüssel an, wodurch die Zeitmessungen gefilterter Shards sichtbar bleiben, ohne die Zeitmessdaten der gesamten Konfiguration zu ersetzen. Setzen SieOPENCLAW_TEST_PROJECTS_TIMINGS=0, um das lokale Zeitmessartefakt zu ignorieren.
Benchmarks
Modelllatenz (scripts/bench-model.ts)
pnpm tsx scripts/bench-model.ts --runs 10Optionale Umgebungsvariablen: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Standard-Prompt: „Antworten Sie mit einem einzigen Wort: ok. Keine Satzzeichen oder zusätzlichen Texte.“
CLI-Start (scripts/bench-cli-startup.ts)
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.ts --runs 12pnpm 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 allVoreinstellungen:
startup:--version,--help,health,health --json,status --json,statusreal:health,status,status --json,sessions,sessions --json,tasks --json,tasks list --json,tasks audit --json,agents list --json,gateway status,gateway status --json,gateway health --json,config get gateway.portall: beide Voreinstellungen kombiniert
Die Ausgabe enthält sampleCount, Durchschnitt, p50, p95, Minimum/Maximum, die Verteilung von Exit-Codes/Signalen und den maximalen RSS-Wert pro Befehl. --cpu-prof-dir / --heap-prof-dir schreiben V8-Profile für jeden Durchlauf.
Gespeicherte Ausgabe: pnpm test:startup:bench:smoke schreibt .artifacts/cli-startup-bench-smoke.json; pnpm test:startup:bench:save schreibt .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). Eingecheckte Fixture: test/fixtures/cli-startup-bench.json, aktualisiert durch pnpm test:startup:bench:update, verglichen durch pnpm test:startup:bench:check.
Gateway-Start (scripts/bench-gateway-startup.ts)
Verwendet standardmäßig den gebauten CLI-Einstiegspunkt unter dist/entry.js; führen Sie zuerst pnpm build aus. Übergeben Sie --entry scripts/run-node.mjs, um stattdessen den Quellcode-Runner zu messen, und halten Sie diese Ergebnisse von den Baselines des gebauten Einstiegspunkts getrennt.
pnpm test:startup:gateway -- --runs 5 --warmup 1pnpm test:startup:gateway -- --case skipChannels --case fiftyPlugins --runs 5node --import tsx scripts/bench-gateway-startup.ts --case default --runs 5 --output .artifacts/gateway-startup.jsonFall-IDs: default, skipChannels (Kanalstart übersprungen), oneInternalHook, allInternalHooks, fiftyPlugins (50 Manifest-Plugins), fiftyStartupLazyPlugins (50 beim Start verzögert geladene Manifest-Plugins).
Die Ausgabe enthält die erste Prozessausgabe, /healthz, /readyz, die Zeit des HTTP-Listen-Logs, die Zeit des Gateway-Bereitschaftslogs, CPU-Zeit, CPU-Kernverhältnis, maximalen RSS-Wert, Heap, Metriken der Startablaufverfolgung, Event-Loop-Verzögerung und detaillierte Metriken der Plugin-Lookup-Tabelle. Das Skript setzt OPENCLAW_GATEWAY_STARTUP_TRACE=1 in der Umgebung des untergeordneten Gateways.
/healthz steht für Erreichbarkeit (der HTTP-Server kann antworten). /readyz steht für Nutzungsbereitschaft (Plugin-Sidecars beim Start, Kanäle und für die Bereitschaft kritische Arbeiten nach dem Anhängen sind abgeschlossen). Start-Hooks werden asynchron ausgeführt und sind nicht Teil der Bereitschaftsgarantie. Die Zeit des Bereitschaftslogs ist der interne Zeitstempel des Gateways, der für die prozessseitige Zuordnung nützlich ist, aber die externe /readyz-Prüfung nicht ersetzt.
Verwenden Sie beim Vergleich von Änderungen die JSON-Ausgabe oder --output. Verwenden Sie --cpu-prof-dir nur, wenn die Ablaufverfolgung auf Import-, Kompilierungs- oder CPU-gebundene Arbeit hinweist, die sich nicht allein durch die Phasenzeiten erklären lässt.
Gateway-Neustart (scripts/bench-gateway-restart.ts)
Nur macOS und Linux (verwendet SIGUSR1 für prozessinterne Neustarts; schlägt unter Windows sofort fehl). Es gelten derselbe standardmäßige gebaute Einstiegspunkt und dieselbe --entry scripts/run-node.mjs-Überschreibung wie beim Gateway-Start oben.
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1Fall-IDs: skipChannels, skipChannelsAcpxProbe (ACPX-Startprüfung aktiviert), skipChannelsNoAcpxProbe (Prüfung deaktiviert), default, fiftyPlugins.
Die Ausgabe enthält den nächsten /healthz-Wert, den nächsten /readyz-Wert, Ausfallzeit, Zeit bis zur Bereitschaft nach dem Neustart, CPU, RSS, Metriken der Startablaufverfolgung für den Ersatzprozess sowie Neustart-Ablaufverfolgungsmetriken für Signalverarbeitung, das Leeren aktiver Arbeiten, Schließphasen, den nächsten Start, die Bereitschaftszeit und Speicher-Snapshots. Das Skript setzt OPENCLAW_GATEWAY_STARTUP_TRACE=1 und OPENCLAW_GATEWAY_RESTART_TRACE=1.
Verwenden Sie diesen Benchmark, wenn eine Änderung die Neustartsignalisierung, Schließ-Handler, den Start nach einem Neustart, das Herunterfahren von Sidecars, die Dienstübergabe oder die Bereitschaft nach einem Neustart betrifft. Beginnen Sie mit skipChannels, um die Gateway-Mechanik vom Kanalstart zu isolieren; verwenden Sie default oder Plugin-intensive Fälle erst, nachdem der eng gefasste Fall den Neustartpfad erklärt hat. Ablaufverfolgungsmetriken sind Hinweise zur Zuordnung, keine abschließenden Bewertungen — beurteilen Sie eine Neustartänderung anhand mehrerer Stichproben, der zugehörigen Eigentümer-Spanne, des Verhaltens von /healthz//readyz und des für Benutzer sichtbaren Neustartvertrags.
Onboarding-E2E (Docker)
Optional; nur für containerisierte Onboarding-Smoke-Tests erforderlich. Vollständiger Kaltstartablauf in einem sauberen Linux-Container:
scripts/e2e/onboard-docker.shSteuert den interaktiven Assistenten über ein Pseudo-TTY, überprüft Konfigurations-, Workspace- und Sitzungsdateien, startet anschließend das Gateway und führt openclaw health aus.
QR-Import-Smoke-Test (Docker)
Stellt sicher, dass der gepflegte QR-Laufzeithelfer unter den unterstützten Docker-Node-Laufzeiten geladen wird (standardmäßig Node 24, kompatibel mit Node 22):
pnpm test:docker:qr