Release and CI
Tests
- Vollständiges Test-Kit (Testsammlungen, Live-Tests, Docker): Tests
- Validierung von Updates und Plugin-Paketen: Updates und Plugins testen
Agent-Standard
Agent-Sitzungen führen Tests und rechenintensive Validierungen über Crabbox remote aus. Für vertrauenswürdigen Maintainer-Code wird standardmäßig Blacksmith Testbox verwendet. Der konfigurierte Testbox-Workflow stellt Anmeldedaten bereit; nicht vertrauenswürdiger Code von Mitwirkenden oder Forks muss daher stattdessen eine Fork-CI ohne Geheimnisse oder eine bereinigte direkte AWS-Crabbox verwenden.
Wenn eine Aufgabe mit vertrauenswürdigem Code voraussichtlich Tests oder umfangreiche Nachweise erfordert, wärmen Sie die Umgebung sofort in einer Befehlssitzung im Hintergrund vor, arbeiten Sie während der Bereitstellung weiter, verwenden Sie die zurückgegebene tbx_...-ID erneut, synchronisieren Sie bei jedem Lauf den aktuellen Checkout und beenden Sie die Umgebung vor der Übergabe:
node scripts/crabbox-wrapper.mjs warmup --provider blacksmith-testbox --keep --timing-jsonNach der ersten erfolgreichen Wiederverwendung zeichnet der Wrapper den Fingerabdruck der Basis, der Abhängigkeiten und des Testbox-Workflows der Lease unter .crabbox/testbox-leases/ auf. Bei reinen Quelltextänderungen wird die vorgewärmte Umgebung weiterverwendet. Eine geänderte Merge-Basis, Lockdatei, Paketmanager-Eingabe, ein geänderter Wrapper oder Testbox-Workflow führt zu einem sicheren Abbruch und erfordert eine neue Lease. Bei jedem Lauf wird weiterhin der aktuelle Checkout synchronisiert.
OPENCLAW_TESTBOX_ALLOW_STALE=1 ist ausschließlich für gezielte Diagnosen vorgesehen, nicht als Release-Nachweis.
Die nachstehenden lokalen Testbefehle sind für menschliche Arbeitsabläufe oder einen vom Benutzer ausdrücklich angeforderten lokalen Agent-Fallback vorgesehen. Die Nichtverfügbarkeit eines Remote-Providers muss gemeldet werden; sie berechtigt nicht dazu, stillschweigend eine umfassende lokale Prüfschleuse auszuführen.
Wärmen Sie für nicht vertrauenswürdigen Code mit --provider aws vor. Jeder Lauf muss CRABBOX_ENV_ALLOW=CI setzen, --provider aws --no-hydrate übergeben und vor der Installation von Abhängigkeiten oder der Ausführung von Tests ein frisches temporäres Remote-HOME verwenden. Verwenden Sie eine neu vorgewärmte Lease, die ausschließlich dieser nicht vertrauenswürdigen Quelle zugeordnet ist; verwenden Sie niemals eine vertrauenswürdige oder zuvor mit Anmeldedaten bereitgestellte Lease erneut. Starten Sie eine installierte vertrauenswürdige Crabbox-Binärdatei aus einem sauberen vertrauenswürdigen main-Checkout und rufen Sie mit --fresh-pr ausschließlich den Remote-PR ab; führen Sie niemals lokal den Wrapper oder die Konfiguration des nicht vertrauenswürdigen Checkouts aus. Entfernen Sie CRABBOX_AWS_INSTANCE_PROFILE aus der Umgebung und brechen Sie sicher ab, sofern der aufgelöste Wert von aws.instanceProfile nicht leer ist. Verwenden Sie vor jeder Installation und jedem Test vertrauenswürdige Werkzeuge mit absoluten Pfaden, um ein IMDSv2-Token zu verlangen, nachzuweisen, dass der IAM-Anmeldedaten-Endpunkt den Status 404 zurückgibt, und zu überprüfen, dass das Remote-Ergebnis von git rev-parse HEAD der vollständigen geprüften SHA des PR-Kopfs entspricht. Binden Sie die Lease an diese SHA und beenden beziehungsweise erwärmen Sie sie erneut, wenn sich der Kopf ändert. Laden Sie das vertrauenswürdige Skript scripts/crabbox-untrusted-bootstrap.sh aus einem sauberen main zusammen mit --fresh-pr hoch; es installiert die festgelegten Node-/pnpm-Versionen, überprüft die 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 wenn kein Remote-PR existiert, verwenden Sie eine Fork-CI ohne Geheimnisse. Verwenden Sie weder hydrate-github noch --no-sync oder einen Testbox-Workflow, der mit Anmeldedaten bereitgestellt wurde.
Entfernen Sie alle CRABBOX_TAILSCALE*-Überschreibungen aus der Umgebung, erzwingen Sie --network public --tailscale=false, löschen Sie Exit-Node-/LAN-Flags und verlangen Sie vor dem Hochladen eines Skripts, dass crabbox inspect ein öffentliches Netzwerk ohne Tailscale-Zustand meldet.
Reguläre lokale Reihenfolge
pnpm test:changedfür einen Vitest-Nachweis 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-Testsammlung benötigen.
In einem Codex-Worktree oder einem verknüpften beziehungsweise Sparse-Checkout vermeiden Agents die direkte lokale Ausführung von pnpm test* / pnpm check* / pnpm crabbox:run:
- Vom Benutzer ausdrücklich angeforderter lokaler Fallback für eine kleine Datei:
node scripts/run-vitest.mjs <path-or-filter>. - Prüfschleusen für Änderungen oder umfassende Nachweise:
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. - Der abschließende
exitCodeund das Zeitmessungs-JSON des Wrappers bilden das Befehlsergebnis. Ein delegierter Blacksmith-GitHub-Actions-Lauf kann nach einem erfolgreichen SSH-Befehlcancelledanzeigen, weil die Testbox von außerhalb der Keepalive-Action beendet 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>: Beschränkt die Serialisierung rechenintensiver Prüfungen auf den aktuellen Worktree statt auf das gemeinsame Git-Verzeichnis, beispielsweise für Befehle wiepnpm check:changedund gezielte Aufrufe vonpnpm test .... Verwenden Sie dies nur auf leistungsfähigen lokalen Hosts, wenn Sie bewusst unabhängige Prüfungen in verknüpften Worktrees ausführen.
Kernbefehle
Läufe des Test-Wrappers enden mit einer kurzen Zusammenfassung im Format [test] passed|failed|skipped ... in ...; die eigene Zeitangabe von Vitest bleibt die Detailangabe pro Shard.
| Befehl | Funktion |
|---|---|
pnpm test |
Explizite Datei-/Verzeichnisziele werden über bereichsspezifische Vitest-Lanes geleitet. Läufe ohne Ziel dienen als Nachweis für die vollständige Testsammlung: Feste Shard-Gruppen werden für die lokale parallele Ausführung in einzelne Konfigurationen aufgeteilt; der erwartete Shard-Fanout wird vor dem Start ausgegeben. Die Erweiterungsgruppe wird stets in Shard-Konfigurationen pro Erweiterung aufgeteilt, statt in einem einzigen riesigen Root-Projekt-Prozess ausgeführt zu werden. |
pnpm test:changed |
Kostengünstiger intelligenter Testlauf für Änderungen: präzise Ziele aus direkten Teständerungen, benachbarten *.test.ts-Dateien, expliziten Quellzuordnungen und dem lokalen Importgraphen. Umfassende Änderungen an Konfigurationen oder Paketen werden übersprungen, sofern sie keinen präzisen Tests zugeordnet werden können. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Expliziter umfassender Testlauf für Änderungen; verwenden Sie ihn, wenn eine Änderung am Test-Harness, an der Konfiguration oder an einem 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 (standardmäßig 18789) und führt anschließend die vollständige Testsammlung 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 Mindestwerte für die Abdeckung durchgesetzt. |
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 Architekturbereiche. |
pnpm check:changed |
Delegiert außerhalb der CI standardmäßig an Crabbox/Testbox und führt anschließend die intelligente Prüfschleuse für Änderungen im Remote-Unterprozess aus: Formatierung sowie Typprüfung, Linting und Schutzbefehle für betroffene Lanes. Führt Vitest nicht aus; verwenden Sie pnpm test:changed oder pnpm test <target> als Testnachweis. |
Gemeinsamer Testzustand und Prozesshilfen
src/test-utils/openclaw-test-state.ts: Verwenden Sie dies aus Vitest, wenn ein Test ein isoliertesHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, eine 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 und Test-Harnesses, dieHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRoder zugehörige Umgebungsschlüssel direkt ändern. Verwenden Sie ihn, um Migrationskandidaten für die gemeinsame Testzustands-Hilfsfunktion zu finden.test/helpers/openclaw-test-instance.ts: Prozessbezogene E2E-Tests, 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 den Wert 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 auf dem Host einbindbare Umgebungsdatei (das--vorcreateverhindert, dass neuere Node-Laufzeitumgebungen--env-fileals Node-Flag behandeln). Lanes, die einen Gateway starten, könnenscripts/lib/openclaw-e2e-instance.sheinbinden, um den Einstiegspunkt aufzulösen, den OpenAI-Mock zu starten, Vordergrund-/Hintergrundstarts auszuführen, Bereitschaftsprüfungen durchzuführen, die Zustandsumgebung zu exportieren, Protokolle auszugeben und Prozesse zu bereinigen.
Control UI, TUI und Erweiterungs-Lanes
- Gemockte Control-UI-E2E-Tests:
pnpm test:ui:e2eführt die Vitest- und Playwright-Teststrecke aus, die die Vite-Control-UI startet und eine echte Chromium-Seite mit einem gemockten Gateway-WebSocket steuert. Die Tests befinden sich inui/src/**/*.e2e.test.ts; gemeinsam genutzte Mocks und Steuerungen befinden sich inui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2eschließt diese Teststrecke ein. Agent-Ausführungen verwenden standardmäßig Testbox/Crabbox, auch für gezielte 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 als ausdrücklich vorgesehenen lokalen Fallback. - TUI-PTY-Tests:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsführt die schnelle PTY-Teststrecke 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 Modell-Endpunkt simuliert. 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 die Teststrecke eines einzelnen gebündelten Plugins aus.- Quelldateien mit zugehörigen Tests werden zunächst diesen Tests zugeordnet, bevor auf umfassendere 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 jeden Shard umfassend auszuführen, wenn der Abhängigkeitspfad eindeutig ist. - Ziele für Vertragsverzeichnisse werden auf ihre Vertragsteststrecken aufgefächert:
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-replyist in drei dedizierte Konfigurationen (core,top-level,reply) aufgeteilt, damit das Antwort-Testsystem nicht die leichteren Status-/Token-/Hilfsfunktionstests der obersten Ebene dominiert.- Ausgewählte Testdateien für
plugin-sdkundcommandswerden über dedizierte schlanke Teststrecken geleitet, die nurtest/setup.tsbeibehalten; laufzeitintensive Fälle verbleiben in ihren bestehenden Teststrecken. - Die Vitest-Basiskonfiguration verwendet standardmäßig
pool: "threads"undisolate: false, wobei der gemeinsam genutzte nicht isolierte Runner in allen Repository-Konfigurationen aktiviert ist. pnpm test:channelsführtvitest.channels.config.tsaus.
Gateway und E2E
- Die Gateway-Integration muss explizit aktiviert werden:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testoderpnpm test:gateway. pnpm test:e2e: Repository-weites E2E-Aggregat =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), damit die Tests nicht übersprungen werden; ausführliche Ausgabe mitOPENCLAW_LIVE_TEST_QUIET=0.
Vollständige Docker-Suite (pnpm test:docker:all)
Erstellt das gemeinsam genutzte Live-Test-Image, verpackt OpenClaw einmalig als npm-Tarball, erstellt bzw. verwendet ein minimales Node-/Git-Runner-Image sowie ein funktionales Image, das diesen Tarball unter /app installiert, und führt anschließend Docker-Smoke-Teststrecken über einen gewichteten Scheduler aus. scripts/package-openclaw-for-docker.mjs ist der einzige lokale bzw. CI-Paket-Packer und validiert den Tarball sowie dist/postinstall-inventory.json, bevor Docker ihn verwendet.
- Minimales Image (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): Teststrecken für Installation, Aktualisierung und Plugin-Abhängigkeiten; bindet den vorab erstellten Tarball ein, anstatt kopierte Repository-Quelldateien zu verwenden. - Funktionales Image (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): Teststrecken für die normale Funktionalität der erstellten Anwendung. - Definitionen der Teststrecken:
scripts/lib/docker-e2e-scenarios.mjs. Planer:scripts/lib/docker-e2e-plan.mjs. Ausführung:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsongibt den vom Scheduler verwalteten CI-Plan aus (Teststrecken, Image-Arten, Anforderungen an Paket-/Live-Images, Zustandsszenarien, Anmeldedatenprüfungen), ohne Docker zu erstellen oder auszuführen.
Planungsoptionen (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-Teststrecken. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Obergrenze für Teststrecken mit npm-Ressourcen. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Obergrenze für Teststrecken mit Dienstressourcen. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Provider-spezifische Obergrenzen für ressourcenintensive Teststrecken. |
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 dem Start von Teststrecken, um eine Flut von Erstellungsanforderungen an den lokalen Docker-Daemon zu vermeiden. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 min) | Fallback-Zeitüberschreitung pro Teststrecke; ausgewählte Live-/Tail-Teststrecken verwenden strengere Obergrenzen. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Wiederholungsversuche bei vorübergehenden Fehlern von Live-Providern. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
aus | Gibt das Teststreckenmanifest aus, ohne Docker auszuführen. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Intervall für die Statusausgabe aktiver Teststrecken. |
OPENCLAW_DOCKER_ALL_TIMINGS |
ein | Verwendet .artifacts/docker-tests/lane-timings.json erneut für die Sortierung nach längster Laufzeit zuerst; setzen Sie den Wert zum Deaktivieren auf 0. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip nur für deterministische/lokale Teststrecken, only nur für Live-Provider-Teststrecken. Aliase: pnpm test:docker:local:all, pnpm test:docker:live:all. Im Nur-Live-Modus werden die Haupt- und Tail-Live-Teststrecken in einem einzigen Pool mit längster Laufzeit zuerst zusammengeführt, sodass Provider-Buckets Claude-/Codex-/Gemini-Arbeit gemeinsam einplanen. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Zeitüberschreitung für die Docker-Einrichtung des CLI-Backends. |
Das Muster für Umgebungsvariablen zur Begrenzung von Ressourcen lautet OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (Ressourcenname in Großbuchstaben, nicht alphanumerische Zeichen zu _ zusammengefasst).
Weiteres Verhalten: Der Runner führt standardmäßig Vorabprüfungen für Docker durch, bereinigt veraltete OpenClaw-E2E-Container, teilt Caches der Provider-CLI-Tools zwischen kompatiblen Lanes und plant nach dem ersten Fehler keine neuen gepoolten Lanes mehr ein, sofern nicht OPENCLAW_DOCKER_ALL_FAIL_FAST=0 gesetzt ist. Überschreitet eine Lane auf einem Host mit geringer Parallelität die effektive Gewichtungs-/Ressourcenobergrenze, 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 Phasenzeitmessungen 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, gezielte Befehle zur erneuten Ausführung auszugeben.
Wichtige Docker-Lanes
| Befehl | Überprüft |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
Chromium-gestützter Quellcode-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 minimalen Docker-Runner mit skills.install.allowUploadedArchives: false, ermittelt über eine Live-Suche in ClawHub einen aktuellen Skill-Slug, installiert ihn mittels openclaw skills install und überprüft SKILL.md, .clawhub/origin.json, .clawhub/lock.json sowie skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Gezielte Live-Prüfungen des CLI-Backends; für Gemini gibt es entsprechende Aliasse :resume und :mcp. |
pnpm test:docker:openwebui |
OpenClaw und Open WebUI in Docker: Anmeldung, Prüfung von /api/models und Ausführung eines echten weitergeleiteten Chats über /api/chat/completions. Erfordert einen verwendbaren Live-Modellschlüssel 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 Konversationsermittlung, Lesen von Transkripten, Metadaten von Anhängen, Verhalten der Live-Ereigniswarteschlange, Routing ausgehender Sendungen sowie Claude-ähnliche Kanal- und Berechtigungsbenachrichtigungen über die echte stdio-Bridge (die Assertion liest direkte MCP-Rohframes aus stdio). |
pnpm test:docker:upgrade-survivor |
Installiert das gepackte Tarball über eine verunreinigte Fixture eines alten Benutzers, führt die Paketaktualisierung sowie den nicht interaktiven Doctor ohne Live-Schlüssel für Provider/Kanäle aus, startet ein local-loopback-Gateway und prüft, ob Agenten-/Kanalkonfiguration, Plugin-Zulassungslisten, Workspace-/Sitzungsdateien, veralteter Legacy-Zustand von Plugin-Abhängigkeiten, Start und RPC-Status erhalten bleiben. |
pnpm test:docker:published-upgrade-survivor |
Installiert standardmäßig openclaw@latest, legt realistische Dateien eines bestehenden Benutzers an, konfiguriert sie anhand eines integrierten openclaw config set-Rezepts, aktualisiert auf das gepackte Tarball, führt den nicht interaktiven Doctor 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 Meta-Token wie last-stable-4 oder all-since-2026.4.23 auf. |
pnpm test:docker:update-migration |
Testumgebung für die Überlebensfähigkeit veröffentlichter Upgrades im Szenario plugin-deps-cleanup, standardmäßig beginnend bei openclaw@2026.4.23. Der Workflow Update Migration erweitert dies mit baselines=all-since-2026.4.23, um die Bereinigung der Abhängigkeiten konfigurierter Plugins außerhalb der vollständigen Release-CI nachzuweisen. |
pnpm test:docker:plugins |
Smoke-Test für Installation/Aktualisierung von lokalen Pfaden, file:, npm-Registry-Paketen mit hochgezogenen Abhängigkeiten, veränderlichen Git-Referenzen, ClawHub-Fixtures, Marketplace-Aktualisierungen sowie Aktivierung/Inspektion von Claude-Bundles. |
Lokale PR-Prüfung
Führen Sie für lokale Prüfungen vor der Übernahme bzw. Gate-Prüfungen eines PR Folgendes aus:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Falls pnpm test auf einem ausgelasteten Host sporadisch fehlschlägt, führen Sie den Test einmal erneut aus, bevor Sie dies als Regression einstufen, und isolieren Sie den Fehler 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
Werkzeuge zur Testleistungsanalyse
pnpm test:perf:imports: aktiviert die Berichterstellung zur Vitest-Importdauer und Importaufschlüsselung, verwendet für explizite Datei-/Verzeichnisziele jedoch weiterhin das bereichsbezogene Lane-Routing.pnpm test:perf:imports:changedbeschränkt dasselbe Profiling auf Dateien, die sich seitorigin/maingeändert haben.pnpm test:perf:changed:bench -- --ref <git-ref>vergleicht die Leistung des gerouteten Pfads im Änderungsmodus mit der nativen Ausführung des Root-Projekts für denselben eingecheckten Git-Diff;pnpm test:perf:changed:bench -- --worktreeführt den Benchmark für die aktuellen Änderungen im Arbeitsverzeichnis aus, ohne diese zuvor einzuchecken.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-Test-Runner (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: führt jede untergeordnete Vitest-Konfiguration der vollständigen Testsuite nacheinander aus und schreibt gruppierte Laufzeitdaten sowie JSON-/Protokollartefakte pro Konfiguration. Berichte der vollständigen Testsuite 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 korrigieren.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonvergleicht gruppierte Berichte nach einer leistungsorientierten Änderung.- Vollständige, Erweiterungs- und Include-Muster-Shard-Ausführungen aktualisieren lokale Zeitmessdaten in
.artifacts/vitest-shard-timings.json; spätere Ausführungen der gesamten Konfiguration verwenden diese Messwerte, um langsame und schnelle Shards auszubalancieren. Include-Muster-CI-Shards hängen den Shard-Namen an den Zeitmessschlüssel an, sodass die Zeitmesswerte 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 pro Ausführung.
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 Ausgangswerten 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 bis zum HTTP-Listen-Protokolleintrag, die Zeit bis zum Bereitschafts-Protokolleintrag des Gateways, CPU-Zeit, CPU-Kern-Verhältnis, maximalen RSS-Wert, Heap, Metriken der Startablaufverfolgung, Ereignisschleifenverzögerung und Detailmetriken der Plugin-Lookup-Tabelle. Das Skript setzt OPENCLAW_GATEWAY_STARTUP_TRACE=1 in der Umgebung des untergeordneten Gateways.
/healthz zeigt die Betriebsfähigkeit an (der HTTP-Server kann antworten). /readyz zeigt die Nutzungsbereitschaft an (Plugin-Sidecars beim Start, Kanäle und für die Bereitschaft kritische Arbeiten nach dem Anhängen sind abgeschlossen). Start-Hooks werden asynchron ausgelöst und sind nicht Teil der Bereitschaftsgarantie. Die Zeit des Bereitschafts-Protokolleintrags ist der interne Zeitstempel des Gateways. Sie ist für die prozessseitige Zuordnung nützlich, ersetzt jedoch nicht die externe /readyz-Prüfung.
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 Arbeiten hinweist, die sich allein anhand der Phasenzeiten nicht erklären lassen.
Gateway-Neustart (scripts/bench-gateway-restart.ts)
Nur für macOS und Linux (verwendet SIGUSR1 für prozessinterne Neustarts; schlägt unter Windows sofort fehl). Es gelten dieselbe Standardeinstellung für den gebauten Einstiegspunkt und dieselbe Überschreibung mit --entry scripts/run-node.mjs 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 das nächste /healthz, das nächste /readyz, die Ausfallzeit, die Zeit bis zur Bereitschaft nach dem Neustart, CPU, RSS, Metriken der Startablaufverfolgung für den Ersatzprozess sowie Metriken der Neustartablaufverfolgung für Signalverarbeitung, das Leeren aktiver Arbeit, Abschlussphasen, 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, Abschluss-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. Ablaufverfolgungsmetriken sind Hinweise zur Zuordnung, keine endgültigen Bewertungen — beurteilen Sie eine Neustartänderung anhand mehrerer Stichproben, des zugehörigen Zuständigkeitsabschnitts, 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-, Arbeitsbereichs- 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