Release and CI
Tests
- Volledige testkit (suites, live, Docker): Testen
- Validatie van updates en pluginpakketten: Updates en plugins testen
Standaardinstelling voor agents
Agentsessies voeren alleen lokaal één/enkele gerichte tests en goedkope statische controles uit voor vertrouwde broncode en wanneer de bestaande installatie van afhankelijkheden gereed is. Voer nooit lokaal tooling uit een niet-vertrouwde repository uit. Grotere suites, gewijzigde gates met uitwaaierende typecheck-/linttaken, builds, Docker, pakketlanes, E2E, live-bewijs en platformoverschrijdende validatie worden extern uitgevoerd via Crabbox. Voor zwaar bewijs van vertrouwde maintainers wordt standaard Blacksmith Testbox gebruikt. De geconfigureerde Testbox-workflow laadt inloggegevens, dus code van niet-vertrouwde bijdragers of forks moet in plaats daarvan fork-CI zonder secrets of een opgeschoonde directe AWS Crabbox gebruiken.
Warm niet vooraf op voor verwacht werk. Verkrijg de backend pas wanneer de
eerste zware opdracht gereed is, hergebruik de geretourneerde tbx_...-id voor latere zware
opdrachten, synchroniseer bij elke uitvoering de huidige checkout en stop deze vóór de overdracht.
Na het eerste geslaagde hergebruik registreert de wrapper de basis-, afhankelijkheids- en
Testbox-workflowvingerafdruk van de lease onder .crabbox/testbox-leases/.
Wijzigingen die alleen de broncode betreffen, blijven de opgewarmde box hergebruiken. Een gewijzigde merge-base, lockfile,
pakketmanagerinvoer, wrapper of Testbox-workflow faalt gesloten en vereist een
nieuwe lease. Bij elke uitvoering wordt de huidige checkout nog steeds gesynchroniseerd.
OPENCLAW_TESTBOX_ALLOW_STALE=1 is alleen bedoeld voor doelbewuste diagnostiek, niet voor
releasebewijs.
De onderstaande lokale testopdrachten zijn bedoeld voor menselijke workflows en begrensd agentbewijs. Onbeschikbaarheid van de externe provider moet worden gemeld; dit geeft geen toestemming om stilzwijgend een brede lokale gate uit te voeren.
Warm voor zwaar niet-vertrouwd bewijs pas op met --provider aws. Elke uitvoering moet
CRABBOX_ENV_ALLOW=CI instellen, --provider aws --no-hydrate doorgeven en
een nieuwe tijdelijke externe HOME gebruiken voordat afhankelijkheden worden geïnstalleerd of
tests worden uitgevoerd. Gebruik een nieuw opgewarmde lease die uitsluitend voor die niet-vertrouwde bron is bestemd; hergebruik
nooit een vertrouwde of eerder met inloggegevens geladen lease. Start een geïnstalleerde vertrouwde Crabbox-
binary vanuit een schone vertrouwde main-checkout en haal alleen de externe PR op met
--fresh-pr; voer de wrapper of configuratie van de niet-vertrouwde checkout nooit lokaal uit.
Verwijder CRABBOX_AWS_INSTANCE_PROFILE uit de omgeving en faal gesloten tenzij de opgeloste
aws.instanceProfile leeg is. Gebruik vóór elke installatie/test vertrouwde
tools met absolute paden om een IMDSv2-token te vereisen, aan te tonen dat het eindpunt voor IAM-inloggegevens
404 retourneert en te verifiëren dat de externe git rev-parse HEAD gelijk is aan de volledige
beoordeelde SHA van de PR-head. Koppel de lease aan die SHA en stop/warm opnieuw op wanneer de head
wijzigt. Upload de vertrouwde scripts/crabbox-untrusted-bootstrap.sh vanuit een schone
main naast --fresh-pr; deze installeert vastgezette Node/pnpm-versies, verifieert de SHA
en de pakketmanagerpin, isoleert HOME, installeert afhankelijkheden en voert vervolgens
de gevraagde test uit. Als de broker niet kan aantonen dat er geen rol is of dat er geen externe PR bestaat,
gebruik dan fork-CI zonder secrets. Gebruik geen hydrate-github, --no-sync of een
Testbox-workflow die met inloggegevens is geladen.
Verwijder alle CRABBOX_TAILSCALE*-overrides uit de omgeving, dwing --network public --tailscale=false af, wis exit-node-/LAN-vlaggen en vereis dat crabbox inspect
openbare netwerktoegang zonder Tailscale-status rapporteert voordat een script wordt geüpload.
Gebruikelijke lokale volgorde
pnpm test:changedvoor Vitest-bewijs binnen de gewijzigde scope.pnpm test <path-or-filter>voor één bestand, map of expliciet doel.pnpm testalleen wanneer je doelbewust de volledige lokale Vitest-suite nodig hebt.
In een Codex-worktree of gekoppelde/sparse checkout vermijden agents directe lokale
pnpm test* / pnpm check* / pnpm crabbox:run:
- Begrensd gericht bewijs met gereedstaande afhankelijkheden:
node scripts/run-vitest.mjs <path-or-filter>. - Gewijzigde controle met classificatie als eerste stap:
node scripts/check-changed.mjs; plannen die alleen documentatie betreffen, geen wijzigingen bevatten of weinig metadata omvatten, blijven lokaal wanneer afhankelijkheden gereed zijn, terwijl zware plannen of plannen met ontbrekende afhankelijkheden aan Testbox worden gedelegeerd. - Expliciet breed bewijs met behouden 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, zodat pnpm binnen Testbox wordt uitgevoerd. - De laatste
exitCodeen timing-JSON van de wrapper vormen het opdrachtresultaat. Een gedelegeerde Blacksmith GitHub Actions-uitvoering kan na een geslaagde SSH-opdrachtcancelledtonen omdat de Testbox buiten de keepalive-action wordt gestopt; controleer de wrappersamenvatting en opdrachtuitvoer voordat je dit als een fout beschouwt. OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: houdt de serialisatie van zware controles binnen de huidige worktree in plaats van de gemeenschappelijke Git-map voor opdrachten zoalspnpm check:changeden gerichtepnpm test .... Gebruik dit alleen op lokale hosts met hoge capaciteit wanneer je doelbewust onafhankelijke controles uitvoert in gekoppelde worktrees.
Kernopdrachten
Uitvoeringen van de testwrapper eindigen met een korte [test] passed|failed|skipped ... in ...-samenvatting; de eigen duurregel van Vitest blijft het detail per shard.
| Opdracht | Functie |
|---|---|
pnpm test |
Expliciete bestands-/mapdoelen worden via Vitest-lanes met beperkte scope geleid. Uitvoeringen zonder doel zijn bewijs voor de volledige suite: vaste shardgroepen worden uitgebreid naar leaf-configuraties voor lokale parallelle uitvoering, waarbij de verwachte sharduitwaaiering vóór de start wordt weergegeven. De extensiegroep wordt altijd uitgebreid naar shardconfiguraties per extensie in plaats van één gigantisch root-projectproces. |
pnpm test:changed |
Goedkope, slimme uitvoering van gewijzigde tests: precieze doelen uit rechtstreekse testwijzigingen, naastgelegen *.test.ts-bestanden, expliciete bronkoppelingen en de lokale importgraaf. Brede configuratie-/pakketwijzigingen worden overgeslagen tenzij ze aan precieze tests zijn gekoppeld. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Expliciete brede uitvoering van gewijzigde tests; gebruik dit wanneer een wijziging aan een testharnas, configuratie of pakket moet terugvallen op het bredere gedrag van Vitest voor gewijzigde tests. |
pnpm test:force |
Maakt de geconfigureerde OpenClaw Gateway-poort vrij (standaard 18789) en voert vervolgens de volledige suite uit met een geïsoleerde Gateway-poort, zodat servertests niet botsen met een actieve instantie. |
pnpm test:coverage |
Genereert een informatief V8-dekkingsrapport voor de standaard unitlane (vitest.unit.config.ts); er worden geen dekkingsdrempels afgedwongen. |
pnpm test:coverage:changed |
Alleen unitdekking voor bestanden die sinds origin/main zijn gewijzigd. |
pnpm changed:lanes |
Toont de architectuurlanes die worden geactiveerd door het verschil ten opzichte van origin/main. |
pnpm check:changed |
Classificeert de gewijzigde lanes voordat de uitvoering wordt gekozen. Plannen die alleen documentatie betreffen, geen wijzigingen bevatten of weinig metadata omvatten, blijven lokaal wanneer afhankelijkheden gereed zijn; plannen met uitwaaierende typecheck-/linttaken, andere zware lanes of ontbrekende lokale afhankelijkheden worden buiten CI aan Crabbox/Testbox gedelegeerd. Voert Vitest niet uit; gebruik pnpm test:changed of pnpm test <target> voor testbewijs. |
Gedeelde teststatus en proceshelpers
src/test-utils/openclaw-test-state.ts: gebruik vanuit Vitest wanneer een test een geïsoleerdeHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, configuratiefixture, werkruimte, agentmap of opslag voor authenticatieprofielen nodig heeft.pnpm test:env-mutations:report: niet-blokkerend rapport van tests/harnassen dieHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRof gerelateerde omgevingssleutels rechtstreeks wijzigen. Gebruik dit om migratiekandidaten voor de gedeelde teststatushelper te vinden.test/helpers/openclaw-test-instance.ts: E2E-tests op procesniveau die op één plek een actieve Gateway, CLI-omgeving, logregistratie en opschoning nodig hebben.- Docker-/Bash-E2E-lanes die
scripts/lib/docker-e2e-image.shsourcen, kunnendocker_e2e_test_state_shell_b64 <label> <scenario>aan de container doorgeven en dit decoderen metscripts/lib/openclaw-e2e-instance.sh; scripts met meerdere home-mappen kunnendocker_e2e_test_state_function_b64doorgeven en in elke flowopenclaw_test_state_create <label> <scenario>aanroepen.node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonschrijft een sourcebaar hostomgevingsbestand (de--vóórcreatevoorkomt dat nieuwere Node-runtimes--env-fileals een Node-vlag behandelen). Lanes die een Gateway starten, kunnenscripts/lib/openclaw-e2e-instance.shsourcen voor het oplossen van het entrypoint, een nagebootste OpenAI-start, starten op de voorgrond/achtergrond, gereedheidscontroles, export van statusomgevingsvariabelen, logdumps en procesopschoning.
Control UI-, TUI- en extensielanes
- E2E met gesimuleerde Control UI:
pnpm test:ui:e2evoert de Vitest- en Playwright-lane uit die de Vite Control UI start en een echte Chromium-pagina aanstuurt via een gesimuleerde Gateway-WebSocket. Tests staan inui/src/**/*.e2e.test.ts; gedeelde simulaties en besturingselementen staan inui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2eomvat deze lane. Agent-uitvoeringen gebruiken standaard Testbox/Crabbox, inclusief gerichte verificatie; gebruiknode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsalleen als expliciete lokale terugvaloptie. - TUI-PTY-tests:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsvoert de snelle PTY-lane met een nepbackend uit.OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1ofpnpm tui:pty:test:watch --mode localvoert de trageretui --local-smoketest uit, die alleen het externe modeleindpunt simuleert. Controleer stabiele zichtbare tekst of fixture-aanroepen, geen onbewerkte ANSI-snapshots. pnpm test:extensionsenpnpm test extensionsvoeren alle shards voor extensies/plugins uit. Zware kanaalplugins, de browserplugin en OpenAI worden als afzonderlijke shards uitgevoerd; andere plugingroepen blijven gebundeld.pnpm test extensions/<id>voert één lane voor een gebundelde plugin uit.- Bronbestanden met tests op hetzelfde niveau worden eerst aan die tests gekoppeld, voordat wordt teruggevallen op bredere directoryglobs. Wijzigingen aan helpers onder
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersensrc/plugins/contractsgebruiken een lokale importgraaf om importerendetests uit te voeren in plaats van elke shard breed uit te voeren wanneer het afhankelijkheidspad nauwkeurig is. - Doelen voor contractdirectory's waaieren uit naar hun contractlanes:
pnpm test src/channels/plugins/contractsvoert de vier configuraties voor kanaalcontracten uit enpnpm test src/plugins/contractsvoert de configuratie voor plugincontracten uit, omdat de generieke projectenchannels/pluginscontracts/**uitsluiten. auto-replywordt opgesplitst in drie afzonderlijke configuraties (core,top-level,reply), zodat de antwoordharnas niet de lichtere status-, token- en helpertests op het hoogste niveau overheerst.- Geselecteerde testbestanden van
plugin-sdkencommandsworden via afzonderlijke lichte lanes geleid die alleentest/setup.tsbehouden, terwijl runtime-intensieve gevallen op hun bestaande lanes blijven. - De basisconfiguratie van Vitest gebruikt standaard
pool: "threads"enisolate: false, waarbij de gedeelde niet-geïsoleerde runner voor alle repoconfiguraties is ingeschakeld. pnpm test:channelsvoertvitest.channels.config.tsuit.
Gateway en E2E
- Gateway-integratie is opt-in:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testofpnpm test:gateway. pnpm test:e2e: geaggregeerde repo-E2E =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: end-to-end-smoketests voor de Gateway (koppeling van meerdere instanties via WS/HTTP/Node). Gebruikt standaardthreads+isolate: falsemet adaptieve workers invitest.e2e.config.ts; stel af metOPENCLAW_E2E_WORKERS=<n>, uitgebreide logboeken metOPENCLAW_E2E_VERBOSE=1.pnpm test:live: live providertests (Claude/Minimax/DeepSeek/z.ai/enzovoort, afgeschermd door*.live.test.ts). Vereist API-sleutels enLIVE=1(ofOPENCLAW_LIVE_TEST=1) om overslaan uit te schakelen; uitgebreide uitvoer metOPENCLAW_LIVE_TEST_QUIET=0.
Volledige Docker-suite (pnpm test:docker:all)
Bouwt de gedeelde live-testimage, verpakt OpenClaw eenmaal als een npm-tarball, bouwt/hergebruikt een kale Node/Git-runnerimage plus een functionele image die die tarball in /app installeert, en voert vervolgens Docker-smoketestlanes uit via een gewogen planner. scripts/package-openclaw-for-docker.mjs is de enige lokale/CI-pakketverpakker en valideert de tarball plus dist/postinstall-inventory.json voordat Docker deze gebruikt.
- Kale image (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): lanes voor installatieprogramma's, updates en plugin-afhankelijkheden; koppelt de vooraf gebouwde tarball aan in plaats van gekopieerde repobronnen. - Functionele image (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): lanes voor normale functionaliteit van de gebouwde app. - Lanedefinities:
scripts/lib/docker-e2e-scenarios.mjs. Planner:scripts/lib/docker-e2e-plan.mjs. Uitvoerder:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsonproduceert het CI-plan dat door de planner wordt beheerd (lanes, imagetypen, behoeften aan pakketten/live-images, statusscenario's, controle van referenties) zonder Docker te bouwen of uit te voeren.
Planningsinstellingen (omgevingsvariabelen, standaardwaarden tussen haakjes):
| Omgevingsvariabele | Standaard | Doel |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Processlots. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Providergevoelige eindpool. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Limiet voor zware live-providerlanes. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Limiet voor lanes met npm-resources. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Limiet voor lanes met serviceresources. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Limieten voor zware lanes per provider. |
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT |
1 | Strengere limieten per provider. |
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT |
- | Overschrijving voor grotere hosts. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Vertraging tussen het starten van lanes om aanmaakpieken van de lokale Docker-daemon te voorkomen. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 min) | Terugvaltime-out per lane; geselecteerde live-/eindlanes gebruiken strengere limieten. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Nieuwe pogingen bij tijdelijke fouten van live providers. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
uit | Drukt het lanemanifest af zonder Docker uit te voeren. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Interval voor het afdrukken van de status van actieve lanes. |
OPENCLAW_DOCKER_ALL_TIMINGS |
aan | Hergebruikt .artifacts/docker-tests/lane-timings.json voor ordening van langst naar kortst; stel in op 0 om dit uit te schakelen. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip alleen voor deterministische/lokale lanes, only alleen voor live-providerlanes. Aliassen: pnpm test:docker:local:all, pnpm test:docker:live:all. De modus met alleen live-lanes voegt de hoofd- en eindlanes voor livegebruik samen tot één pool van langst naar kortst, zodat providerbuckets Claude-/Codex-/Gemini-werk samen groeperen. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Time-out voor Docker-installatie van de CLI-backend. |
Het patroon voor omgevingsvariabelen voor resourcelimieten is OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (resourcenaam in hoofdletters, niet-alfanumerieke tekens samengevoegd tot _).
Overig gedrag: de runner voert standaard een preflightcontrole van Docker uit, ruimt verouderde OpenClaw E2E-containers op, deelt caches van CLI-tools van providers tussen compatibele lanes en stopt na de eerste fout met het plannen van nieuwe gepoolde lanes, tenzij OPENCLAW_DOCKER_ALL_FAIL_FAST=0 is ingesteld. Als één lane de effectieve gewichts-/resourcelimiet op een host met lage paralleliteit overschrijdt, kan deze toch vanuit een lege pool starten en alleen worden uitgevoerd totdat er capaciteit vrijkomt. Logboeken per lane, summary.json, failures.json en fasetimings worden weggeschreven onder .artifacts/docker-tests/<run-id>/; gebruik pnpm test:docker:timings <summary.json> om trage lanes te onderzoeken en pnpm test:docker:rerun <run-id|summary.json|failures.json> om goedkope, gerichte opdrachten voor opnieuw uitvoeren af te drukken.
Opmerkelijke Docker-lanes
| Opdracht | Verifieert |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
Brongebaseerde E2E-container met Chromium, onbewerkte CDP en geïsoleerde Gateway; browser doctor --deep CDP-rolsnapshots bevatten link-URL's, door de cursor tot klikbaar gepromoveerde elementen, iframe-verwijzingen en framemetadata. |
pnpm test:docker:skill-install |
Installeert het ingepakte tarball in een kale Docker-runner met skills.install.allowUploadedArchives: false, bepaalt een actuele skill-slug via live zoeken in ClawHub, installeert via openclaw skills install en verifieert SKILL.md, .clawhub/origin.json, .clawhub/lock.json en skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Gerichte live probes voor CLI-backends; Gemini heeft overeenkomstige aliassen :resume en :mcp. |
pnpm test:docker:openwebui |
OpenClaw + Open WebUI in Docker: aanmelden, /api/models controleren en een echte geproxiede chat uitvoeren via /api/chat/completions. Vereist een bruikbare sleutel voor een live model en haalt een externe image op; naar verwachting niet zo CI-stabiel als de unit-/E2E-suites. |
pnpm test:docker:mcp-channels |
Vooraf gevulde Gateway-container plus een clientcontainer die openclaw mcp serve start: gerouteerde gespreksdetectie, transcriptlezingen, metagegevens van bijlagen, gedrag van de live-gebeurteniswachtrij, routering van uitgaande verzending en meldingen in Claude-stijl over kanalen en machtigingen via de echte stdio-bridge (de assertie leest onbewerkte stdio-MCP-frames rechtstreeks). |
pnpm test:docker:upgrade-survivor |
Installeert het ingepakte tarball over een vervuilde fixture van een oude gebruiker, voert een pakketupdate plus niet-interactieve doctor uit zonder live provider-/kanaalsleutels, start een loopback-Gateway en controleert of agents, kanaalconfiguratie, Plugin-toestaanlijsten, werkruimte-/sessiebestanden, verouderde afhankelijkheidsstatus van legacy-Plugins, opstarten en RPC-status behouden blijven. |
pnpm test:docker:published-upgrade-survivor |
Installeert standaard openclaw@latest, vult realistische bestaande gebruikersbestanden vooraf, configureert via een ingebakken openclaw config set-recept, werkt bij naar het ingepakte tarball, voert niet-interactieve doctor uit, schrijft .artifacts/upgrade-survivor/summary.json en controleert /healthz, /readyz en de RPC-status. Overschrijf met OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, breid een matrix uit met OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS of voeg scenariofixtures toe met OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues (bevat configured-plugin-installs en stale-source-plugin-shadow). Package Acceptance stelt deze beschikbaar als published_upgrade_survivor_baseline(s) / _scenarios en verwerkt metatokens zoals last-stable-4 of all-since-2026.4.23. |
pnpm test:docker:update-migration |
Testharnas voor overleving na een gepubliceerde upgrade in het scenario plugin-deps-cleanup, dat standaard begint bij [email protected]. De workflow Update Migration breidt dit uit met baselines=all-since-2026.4.23 om het opschonen van afhankelijkheden van geconfigureerde Plugins buiten Full Release CI aan te tonen. |
pnpm test:docker:plugins |
Installatie-/updatesmoketest voor een lokaal pad, file:, npm-registerpakketten met omhoog verplaatste afhankelijkheden, bewegende git-verwijzingen, ClawHub-fixtures, marketplace-updates en het inschakelen/inspecteren van de Claude-bundel. |
Lokale PR-gate
Voer voor lokale controles voor het landen/de gate van een PR het volgende uit:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Als pnpm test op een zwaar belaste host onregelmatig faalt, voer deze dan één keer opnieuw uit voordat je dit als een regressie beschouwt en isoleer het probleem vervolgens met pnpm test <path/to/test>. Voor hosts met beperkt geheugen:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Tools voor testprestaties
pnpm test:perf:imports: schakelt rapportage van Vitest-importduur en importuitsplitsing in, terwijl gerichte laneroutering voor expliciete bestands-/mapdoelen behouden blijft.pnpm test:perf:imports:changedbeperkt dezelfde profilering tot bestanden die sindsorigin/mainzijn gewijzigd.pnpm test:perf:changed:bench -- --ref <git-ref>benchmarkt het gerouteerde pad voor de modus met wijzigingen tegenover de native uitvoering van het hoofdproject voor dezelfde gecommitte git-diff;pnpm test:perf:changed:bench -- --worktreebenchmarkt de huidige wijzigingenset in de worktree zonder deze eerst te committen.pnpm test:perf:profile:mainschrijft een CPU-profiel voor de hoofdthread van Vitest (.artifacts/vitest-main-profile);pnpm test:perf:profile:runnerschrijft CPU- en heap-profielen voor de unit-runner (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: voert elke Vitest-leafconfiguratie van de volledige suite serieel uit en schrijft gegroepeerde duurgegevens plus JSON-/logboekartefacten per configuratie. Rapporten van de volledige suite isoleren standaard bestanden, zodat behouden modulegrafen en GC-pauzes van eerdere bestanden niet aan latere asserties worden toegerekend; geef-- --no-isolatealleen door wanneer je bewust accumulatie in gedeelde workers profileert. De Test Performance Agent gebruikt dit als basislijn voordat deze probeert trage tests te verbeteren.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonvergelijkt gegroepeerde rapporten na een prestatiegerichte wijziging.- Uitvoeringen van volledige suites, extensies en shards met opnamepatronen werken lokale timinggegevens bij in
.artifacts/vitest-shard-timings.json; latere uitvoeringen van volledige configuraties gebruiken die timings om trage en snelle shards in balans te brengen. CI-shards met opnamepatronen voegen de shardnaam toe aan de timingsleutel, waardoor gefilterde shardtimings zichtbaar blijven zonder timinggegevens van volledige configuraties te vervangen. StelOPENCLAW_TEST_PROJECTS_TIMINGS=0in om het lokale timingartefact te negeren.
Benchmarks
Modellatentie (scripts/bench-model.ts)
pnpm tsx scripts/bench-model.ts --runs 10Optionele omgevingsvariabelen: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Standaardprompt: "Antwoord met één woord: ok. Geen interpunctie of extra tekst."
Opstarten van de CLI (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 allVoorinstellingen:
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 voorinstellingen gecombineerd
De uitvoer bevat sampleCount, gemiddelde, p50, p95, minimum/maximum, de verdeling van afsluitcodes/signalen en de maximale RSS per opdracht. --cpu-prof-dir / --heap-prof-dir schrijven per uitvoering V8-profielen.
Opgeslagen uitvoer: pnpm test:startup:bench:smoke schrijft .artifacts/cli-startup-bench-smoke.json; pnpm test:startup:bench:save schrijft .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). Ingecheckte fixture: test/fixtures/cli-startup-bench.json, vernieuwd door pnpm test:startup:bench:update, vergeleken door pnpm test:startup:bench:check.
Opstarten van de Gateway (scripts/bench-gateway-startup.ts)
Gebruikt standaard het gebouwde CLI-ingangspunt op dist/entry.js; voer eerst pnpm build uit. Geef --entry scripts/run-node.mjs door om in plaats daarvan de bronrunner te meten en houd die resultaten gescheiden van de basiswaarden voor het gebouwde ingangspunt.
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.jsonCasus-id's: default, skipChannels (opstarten van kanalen overgeslagen), oneInternalHook, allInternalHooks, fiftyPlugins (50 manifestplugins), fiftyStartupLazyPlugins (50 manifestplugins die bij het opstarten lui worden geladen).
De uitvoer bevat de eerste procesuitvoer, /healthz, /readyz, de logtijd voor het luisteren via HTTP, de logtijd voor het gereed zijn van de Gateway, CPU-tijd, CPU-kernverhouding, maximale RSS, heap, metrische gegevens van de opstarttracering, vertraging van de eventloop en gedetailleerde metrische gegevens van de opzoektabel voor plugins. Het script stelt OPENCLAW_GATEWAY_STARTUP_TRACE=1 in de omgeving van de onderliggende Gateway in.
/healthz staat voor actief zijn (de HTTP-server kan antwoorden). /readyz staat voor bruikbare gereedheid (sidecars van opstartplugins, kanalen en gereedheidskritiek werk na het koppelen zijn afgerond). Opstarthooks worden asynchroon verzonden en maken geen deel uit van de gereedheidsgarantie. De logtijd voor gereedheid is de interne tijdstempel van de Gateway, nuttig voor toewijzing aan de proceszijde maar geen vervanging voor de externe /readyz-probe.
Gebruik JSON-uitvoer of --output bij het vergelijken van wijzigingen. Gebruik --cpu-prof-dir alleen nadat traceringsuitvoer wijst op import-, compilatie- of CPU-gebonden werk dat niet uitsluitend met fasetijden kan worden verklaard.
Herstarten van de Gateway (scripts/bench-gateway-restart.ts)
Alleen macOS en Linux (gebruikt SIGUSR1 voor herstarts binnen het proces; mislukt onmiddellijk op Windows). Dezelfde standaard voor het gebouwde ingangspunt en --entry scripts/run-node.mjs-overschrijving als bij het opstarten van de Gateway hierboven.
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1Casus-id's: skipChannels, skipChannelsAcpxProbe (ACPX-opstartprobe ingeschakeld), skipChannelsNoAcpxProbe (probe uitgeschakeld), default, fiftyPlugins.
De uitvoer bevat de volgende /healthz, de volgende /readyz, uitvaltijd, timing voor gereedheid na herstart, CPU, RSS, metrische gegevens van de opstarttracering voor het vervangende proces en metrische gegevens van de herstarttracering voor signaalafhandeling, het laten aflopen van actief werk, afsluitfasen, de volgende start, gereedheidstiming en geheugensnapshots. Het script stelt OPENCLAW_GATEWAY_STARTUP_TRACE=1 en OPENCLAW_GATEWAY_RESTART_TRACE=1 in.
Gebruik deze benchmark wanneer een wijziging betrekking heeft op herstartsignalering, afsluitingshandlers, opstarten na een herstart, afsluiten van sidecars, overdracht van services of gereedheid na een herstart. Begin met skipChannels om de werking van de Gateway te isoleren van het opstarten van kanalen; gebruik default of casussen met veel plugins pas nadat de smalle casus het herstartpad verklaart. Traceringsgegevens zijn aanwijzingen voor toewijzing, geen definitieve beoordelingen — beoordeel een herstartwijziging aan de hand van meerdere steekproeven, de overeenkomende eigenaarsspanne, het gedrag van /healthz//readyz en het voor de gebruiker zichtbare herstartcontract.
E2E voor onboarding (Docker)
Optioneel; alleen nodig voor gecontaineriseerde rooktests voor onboarding. Volledige koudestartstroom in een schone Linux-container:
scripts/e2e/onboard-docker.shBestuurt de interactieve wizard via een pseudo-tty, verifieert configuratie-, werkruimte- en sessiebestanden, start vervolgens de Gateway en voert openclaw health uit.
Rooktest voor QR-import (Docker)
Waarborgt dat de onderhouden QR-runtimehelper wordt geladen onder de ondersteunde Docker Node-runtimes (standaard Node 24, compatibel met Node 22):
pnpm test:docker:qr