Testing
Testen
OpenClaw heeft drie Vitest-suites (unit/integratie, e2e, live) en een kleine set Docker-runners. Dit document is een gids voor "hoe we testen":
- Wat elke suite dekt (en wat deze bewust niet dekt).
- Welke commando's je uitvoert voor veelvoorkomende workflows (lokaal, pre-push, debuggen).
- Hoe live tests inloggegevens ontdekken en modellen/providers selecteren.
- Hoe je regressies toevoegt voor echte model-/providerproblemen.
Snel aan de slag
De meeste dagen:
- Volledige gate (verwacht vóór push):
pnpm build && pnpm check && pnpm check:test-types && pnpm test - Snellere lokale volledige suite-run op een ruime machine:
pnpm test:max - Directe Vitest-watchloop:
pnpm test:watch - Directe bestandstargeting routeert nu ook extension-/channel-paden:
pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts - Geef eerst de voorkeur aan gerichte runs wanneer je aan één failure werkt.
- Docker-ondersteunde QA-site:
pnpm qa:lab:up - Linux-VM-ondersteunde QA-lane:
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
Wanneer je tests aanraakt of extra vertrouwen wilt:
- Coverage-gate:
pnpm test:coverage - E2E-suite:
pnpm test:e2e
Tijdelijke testmappen
Geef de voorkeur aan de gedeelde helpers in test/helpers/temp-dir.ts voor
test-eigen tijdelijke mappen. Ze maken eigenaarschap expliciet en houden cleanup in dezelfde
testlevenscyclus:
const tempDirs = useAutoCleanupTempDirTracker(afterEach); it("uses a temp workspace", () => { const workspace = tempDirs.make("openclaw-example-"); // use workspace});useAutoCleanupTempDirTracker(afterEach) stelt bewust geen handmatige cleanup-methode beschikbaar; Vitest
is eigenaar van cleanup na elke test. Bestaande lower-level helpers blijven beschikbaar voor tests die
nog niet zijn verplaatst, maar nieuwe en gemigreerde tests moeten de automatisch opschonende
tracker gebruiken. Vermijd nieuw handmatig gebruik van makeTempDir, cleanupTempDirs of
createTempDirTracker en vermijd nieuwe kale fs.mkdtemp*-aanroepen in tests,
tenzij een case expliciet raw temp-dir-gedrag verifieert. Voeg een auditeerbare
allow-comment toe met een concrete reden wanneer een test bewust een kale tijdelijke
map nodig heeft:
// openclaw-temp-dir: allow verifies raw fs cleanup behaviorconst workspace = fs.mkdtempSync(prefix);Voor migratiezichtbaarheid rapporteert node scripts/report-test-temp-creations.mjs
nieuwe kale temp-dir-aanmaak en nieuw handmatig gebruik van gedeelde helpers in toegevoegde diffregels
zonder bestaande cleanup-stijlen te blokkeren. De bestandsscope volgt bewust
dezelfde testpadclassificatie die door scripts/changed-lanes.mjs wordt gebruikt,
in plaats van een aparte test-helper-bestandsnaamheuristiek te onderhouden, terwijl
de gedeelde helperimplementatie zelf wordt overgeslagen. check:changed voert dit rapport uit voor
gewijzigde testpaden als een waarschuwing-only CI-signaal; bevindingen zijn GitHub-waarschuwingsannotaties,
geen failures.
Bij het debuggen van echte providers/modellen (vereist echte inloggegevens):
- Live suite (modellen + Gateway tool-/image-probes):
pnpm test:live - Target één live bestand stil:
pnpm test:live -- src/agents/models.profiles.live.test.ts - Runtimeperformancerapporten: dispatch
OpenClaw Performancemetlive_openai_candidate=truevoor een echteopenai/gpt-5.5agent-turn ofdeep_profile=truevoor Kova CPU-/heap-/trace-artefacten. Dagelijkse geplande runs publiceren mock-provider-, deep-profile- en GPT 5.5-lane-artefacten naaropenclaw/clawgrit-reportswanneerCLAWGRIT_REPORTS_TOKENis geconfigureerd. Het mock-provider-rapport bevat ook source-level Gateway-boot-, geheugen-, plugin-pressure-, herhaalde fake-model hello-loop- en CLI-opstartcijfers. - Docker live model sweep:
pnpm test:docker:live-models- Elk geselecteerd model voert nu een text-turn plus een kleine file-read-achtige probe uit.
Modellen waarvan de metadata
image-input adverteert, voeren ook een tiny image-turn uit. Schakel de extra probes uit metOPENCLAW_LIVE_MODEL_FILE_PROBE=0ofOPENCLAW_LIVE_MODEL_IMAGE_PROBE=0wanneer je providerfailures isoleert. - CI-coverage: dagelijkse
OpenClaw Scheduled Live And E2E Checksen handmatigeOpenClaw Release Checksroepen allebei de herbruikbare live/E2E-workflow aan metinclude_live_suites: true, wat afzonderlijke Docker live model matrixjobs bevat die per provider zijn geshard. - Voor gerichte CI-herhalingen dispatch je
OpenClaw Live And E2E Checks (Reusable)metinclude_live_suites: trueenlive_models_only: true. - Voeg nieuwe high-signal providersecrets toe aan
scripts/ci-hydrate-live-auth.shplus.github/workflows/openclaw-live-and-e2e-checks-reusable.ymlen de geplande/release-callers daarvan.
- Elk geselecteerd model voert nu een text-turn plus een kleine file-read-achtige probe uit.
Modellen waarvan de metadata
- Native Codex bound-chat smoke:
pnpm test:docker:live-codex-bind- Voert een Docker live lane uit tegen het Codex app-server-pad, bindt een synthetische
Slack-DM met
/codex bind, oefent/codex fasten/codex permissions, en verifieert daarna dat een gewone reply en een image attachment via de native Plugin-binding worden gerouteerd in plaats van via ACP.
- Voert een Docker live lane uit tegen het Codex app-server-pad, bindt een synthetische
Slack-DM met
- Codex app-server harness smoke:
pnpm test:docker:live-codex-harness- Voert Gateway agent-turns uit via de Plugin-eigen Codex app-server harness,
verifieert
/codex statusen/codex models, en oefent standaard image, Cron MCP, sub-agent en Guardian-probes. Schakel de sub-agent-probe uit metOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0wanneer je andere Codex app-server-failures isoleert. Voor een gerichte sub-agent-check schakel je de andere probes uit:OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 pnpm test:docker:live-codex-harness. Dit stopt na de sub-agent-probe tenzijOPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0is ingesteld.
- Voert Gateway agent-turns uit via de Plugin-eigen Codex app-server harness,
verifieert
- Codex on-demand install smoke:
pnpm test:docker:codex-on-demand- Installeert de verpakte OpenClaw-tarball in Docker, voert OpenAI API-key
onboarding uit en verifieert dat de Codex-Plugin plus de
@openai/codex-dependency on demand zijn gedownload naar de beheerde npm-projectroot.
- Installeert de verpakte OpenClaw-tarball in Docker, voert OpenAI API-key
onboarding uit en verifieert dat de Codex-Plugin plus de
- Live Plugin tool dependency smoke:
pnpm test:docker:live-plugin-tool- Pakt een fixture-Plugin met een echte
slugify-dependency, installeert die vianpm-pack:, verifieert de dependency onder de beheerde npm-projectroot, en vraagt vervolgens een live OpenAI-model om de Plugin-tool aan te roepen en de verborgen slug terug te geven.
- Pakt een fixture-Plugin met een echte
- Crestodian rescue command smoke:
pnpm test:live:crestodian-rescue-channel- Opt-in belt-and-suspenders-check voor de rescue-command-surface van message-channel.
Deze oefent
/crestodian status, zet een permanente modelwijziging in de wachtrij, antwoordt/crestodian yesen verifieert het audit-/config-write-pad.
- Opt-in belt-and-suspenders-check voor de rescue-command-surface van message-channel.
Deze oefent
- Crestodian planner Docker smoke:
pnpm test:docker:crestodian-planner- Voert Crestodian uit in een configloze container met een fake Claude CLI op
PATHen verifieert dat de fuzzy planner fallback wordt vertaald naar een geaudite typed config-write.
- Voert Crestodian uit in een configloze container met een fake Claude CLI op
- Crestodian first-run Docker smoke:
pnpm test:docker:crestodian-first-run- Start vanuit een lege OpenClaw state-dir, verifieert de moderne onboard
Crestodian-entrypoint, past setup-/model-/agent-/Discord-Plugin + SecretRef
writes toe, valideert config en verifieert auditentries. Hetzelfde Ring 0 setup-pad
wordt ook gedekt in QA Lab door
pnpm openclaw qa suite --scenario crestodian-ring-zero-setup.
- Start vanuit een lege OpenClaw state-dir, verifieert de moderne onboard
Crestodian-entrypoint, past setup-/model-/agent-/Discord-Plugin + SecretRef
writes toe, valideert config en verifieert auditentries. Hetzelfde Ring 0 setup-pad
wordt ook gedekt in QA Lab door
- Moonshot/Kimi cost smoke: met
MOONSHOT_API_KEYingesteld, voeropenclaw models list --provider moonshot --jsonuit en voer daarna een geïsoleerdeopenclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --jsonuit tegenmoonshot/kimi-k2.6. Verifieer dat de JSON Moonshot/K2.6 rapporteert en dat het assistant-transcript genormaliseerdeusage.costopslaat.
QA-specifieke runners
Deze commando's staan naast de hoofdtestsuites wanneer je QA-lab-realisme nodig hebt:
CI voert QA Lab uit in dedicated workflows. Agentic parity is genest onder
QA-Lab - All Lanes en releasevalidatie, niet als standalone PR-workflow.
Brede validatie moet Full Release Validation gebruiken met
rerun_group=qa-parity of de QA-groep van release-checks. Stabiele/standaard release
checks houden uitputtende live/Docker-soak achter run_release_soak=true; het
full-profiel forceert soak aan. QA-Lab - All Lanes
draait nightly op main en via handmatige dispatch met de mock parity lane, live
Matrix lane, Convex-beheerde live Telegram lane en Convex-beheerde live Discord
lane als parallelle jobs. Geplande QA- en releasechecks geven Matrix
--profile fast expliciet door, terwijl de Matrix CLI en handmatige workflowinput
standaard all blijven; handmatige dispatch kan all sharden in transport,
media, e2ee-smoke, e2ee-deep en e2ee-cli-jobs. OpenClaw Release Checks voert parity plus de snelle Matrix- en Telegram-lanes uit vóór releasegoedkeuring,
met mock-openai/gpt-5.5 voor release transport checks zodat ze
deterministisch blijven en normale provider-Plugin-startup vermijden. Deze live transport
gateways schakelen memory search uit; memory-gedrag blijft gedekt door de QA parity
suites.
Volledige release live media shards gebruiken
ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04, waarin
ffmpeg en ffprobe al aanwezig zijn. Docker live model/backend shards gebruiken de gedeelde
ghcr.io/openclaw/openclaw-live-test:<sha>-image die één keer per geselecteerde
commit wordt gebouwd, en pullen die daarna met OPENCLAW_SKIP_DOCKER_BUILD=1 in plaats van
opnieuw te bouwen binnen elke shard.
pnpm openclaw qa suite- Voert repo-ondersteunde QA-scenario's rechtstreeks op de host uit.
- Schrijft artefacten op topniveau
qa-evidence.json,qa-suite-summary.jsonenqa-suite-report.mdvoor de geselecteerde scenarioset, inclusief selecties voor gemengde flow-, Vitest- en Playwright-scenario's. - Wanneer gestart door
pnpm openclaw qa run --qa-profile <profile>, wordt de scorekaart van het geselecteerde taxonomieprofiel in dezelfdeqa-evidence.jsonopgenomen.smoke-cischrijft beperkte bewijsgegevens, waarmeeevidenceMode: "slim"wordt ingesteld enexecutionper vermelding wordt weggelaten.releasedekt de samengestelde releasegereedheidsdoorsnede;allselecteert elke actieve volwassenheidscategorie en is bedoeld voor expliciete workflow-dispatches voor QA-profielbewijs wanneer een volledig scorekaartartefact nodig is. - Voert standaard meerdere geselecteerde scenario's parallel uit met geisoleerde
Gateway-workers.
qa-channelgebruikt standaard concurrency 4 (begrensd door het aantal geselecteerde scenario's). Gebruik--concurrency <count>om het aantal workers af te stemmen, of--concurrency 1voor de oudere seriele baan. - Sluit af met een niet-nulcode wanneer een scenario faalt. Gebruik
--allow-failureswanneer je artefacten wilt zonder falende afsluitcode. - Ondersteunt providermodi
live-frontier,mock-openaienaimock.aimockstart een lokale, door AIMock ondersteunde provider-server voor experimentele fixture- en protocolmock-dekking zonder de scenariobewustemock-openai-baan te vervangen.
pnpm openclaw qa coverage --match <query>- Doorzoekt scenario-ID's, titels, oppervlakken, dekkings-ID's, docs-verwijzingen, codeverwijzingen, Plugins en providervereisten, en drukt daarna overeenkomende suitedoelen af.
- Gebruik dit voor een QA Lab-run wanneer je het gewijzigde gedrag of bestandspad kent, maar niet het kleinste scenario. Het is alleen adviserend; kies nog steeds mock-, live-, Multipass-, Matrix- of transportbewijs op basis van het gedrag dat wordt gewijzigd.
pnpm test:plugins:kitchen-sink-live- Voert de live OpenAI Kitchen Sink-Pluginproef uit via QA Lab. Het
installeert het externe Kitchen Sink-pakket, verifieert de inventaris van het
Plugin SDK-oppervlak, peilt
/healthzen/readyz, registreert Gateway CPU/RSS-bewijs, voert een live OpenAI-beurt uit en controleert vijandige diagnostiek. Vereist live OpenAI-authenticatie zoalsOPENAI_API_KEY. In gehydrateerde Testbox-sessies laadt het automatisch het Testbox live-auth-profiel wanneer de helperopenclaw-testbox-envaanwezig is.
- Voert de live OpenAI Kitchen Sink-Pluginproef uit via QA Lab. Het
installeert het externe Kitchen Sink-pakket, verifieert de inventaris van het
Plugin SDK-oppervlak, peilt
pnpm test:gateway:cpu-scenarios- Voert de Gateway-opstartbenchmark uit plus een klein mock-QA Lab-scenariopakket
(
channel-chat-baseline,memory-failure-fallback,gateway-restart-inflight-run) en schrijft een gecombineerde CPU-observatiesamenvatting onder.artifacts/gateway-cpu-scenarios/. - Markeert standaard alleen aanhoudende hete CPU-observaties (
--cpu-core-warnplus--hot-wall-warn-ms), zodat korte opstartpieken als meetwaarden worden geregistreerd zonder eruit te zien als de minutenlange Gateway-pegregressie. - Gebruikt gebouwde
dist-artefacten; voer eerst een build uit wanneer de checkout nog geen verse runtime-output heeft.
- Voert de Gateway-opstartbenchmark uit plus een klein mock-QA Lab-scenariopakket
(
pnpm openclaw qa suite --runner multipass- Voert dezelfde QA-suite uit binnen een wegwerpbare Multipass Linux-VM.
- Behoudt hetzelfde scenarioselectiegedrag als
qa suiteop de host. - Hergebruikt dezelfde provider-/modelselectievlaggen als
qa suite. - Live-runs sturen de ondersteunde QA-authenticatie-invoer door die praktisch is
voor de guest: provider-sleutels via env, het configuratiepad voor de QA-liveprovider
en
CODEX_HOMEwanneer aanwezig. - Uitvoermappen moeten onder de repo-root blijven zodat de guest via de gemounte workspace kan terugschrijven.
- Schrijft het normale QA-rapport plus samenvatting en Multipass-logs onder
.artifacts/qa-e2e/....
pnpm qa:lab:up- Start de door Docker ondersteunde QA-site voor QA-werk in operatorstijl.
pnpm test:docker:npm-onboard-channel-agent- Bouwt een npm-tarball uit de huidige checkout, installeert die globaal in Docker, voert niet-interactieve onboarding met OpenAI API-sleutel uit, configureert standaard Telegram, verifieert dat de verpakte Plugin-runtime zonder opstartafhankelijkheidsherstel wordt geladen, voert doctor uit en voert een lokale agentbeurt uit tegen een gemockt OpenAI-eindpunt.
- Gebruik
OPENCLAW_NPM_ONBOARD_CHANNEL=discordom dezelfde verpakte-installatiebaan met Discord uit te voeren.
pnpm test:docker:session-runtime-context- Voert een deterministische Docker-smoke voor de gebouwde app uit voor ingebedde
runtimecontexttranscripten. Het verifieert dat verborgen OpenClaw-runtimecontext
wordt bewaard als een aangepast bericht dat niet wordt weergegeven in plaats van
in de zichtbare gebruikersbeurt te lekken, seedt daarna een getroffen kapotte
sessie-JSONL en verifieert dat
openclaw doctor --fixdie herschrijft naar de actieve branch met een back-up.
- Voert een deterministische Docker-smoke voor de gebouwde app uit voor ingebedde
runtimecontexttranscripten. Het verifieert dat verborgen OpenClaw-runtimecontext
wordt bewaard als een aangepast bericht dat niet wordt weergegeven in plaats van
in de zichtbare gebruikersbeurt te lekken, seedt daarna een getroffen kapotte
sessie-JSONL en verifieert dat
pnpm test:docker:npm-telegram-live- Installeert een OpenClaw-pakketkandidaat in Docker, voert onboarding voor het geinstalleerde pakket uit, configureert Telegram via de geinstalleerde CLI en hergebruikt daarna de live Telegram QA-baan met dat geinstalleerde pakket als de SUT-Gateway.
- De wrapper mount alleen de
qa-lab-harnessbron uit de checkout; het geinstalleerde pakket bezitdist,openclaw/plugin-sdken de gebundelde Plugin-runtime, zodat de baan huidige checkout-Plugins niet mengt in het pakket dat wordt getest. - Gebruikt standaard
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@beta; stelOPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgzofOPENCLAW_CURRENT_PACKAGE_TGZin om in plaats van installatie uit het register een opgeloste lokale tarball te testen. - Geeft standaard herhaalde RTT-timing in
qa-evidence.jsonuit metOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20. OverschrijfOPENCLAW_NPM_TELEGRAM_RTT_SAMPLES,OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MSofOPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURESom de RTT-run af te stemmen.OPENCLAW_NPM_TELEGRAM_RTT_CHECKSaccepteert een door komma's gescheiden lijst met Telegram QA-check-ID's om te samplen; wanneer niet ingesteld, is de standaard RTT-geschikte checktelegram-mentioned-message-reply. - Gebruikt dezelfde Telegram-env-referenties of Convex-referentiebron als
pnpm openclaw qa telegram. Stel voor CI-/releaseautomatiseringOPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convexin plusOPENCLAW_QA_CONVEX_SITE_URLen een rolsecret. AlsOPENCLAW_QA_CONVEX_SITE_URLen een Convex-rolsecret aanwezig zijn in CI, selecteert de Docker-wrapper Convex automatisch. - De wrapper valideert Telegram- of Convex-referentie-env op de host voordat
Docker-build-/installatiewerk begint. Stel
OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1alleen in wanneer je doelbewust de setup voor referenties debugt. OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintaineroverschrijft de gedeeldeOPENCLAW_QA_CREDENTIAL_ROLEalleen voor deze baan. Wanneer Convex-referenties zijn geselecteerd en geen rol is ingesteld, gebruikt de wrapperciin CI enmaintainerbuiten CI.- GitHub Actions stelt deze baan beschikbaar als de handmatige maintainerworkflow
NPM Telegram Beta E2E. Die draait niet bij merge. De workflow gebruikt de omgevingqa-live-shareden Convex CI-referentieleases.
- GitHub Actions stelt ook
Package Acceptancebeschikbaar voor aanvullend productbewijs tegen een kandidaatpakket. Het accepteert een vertrouwde ref, gepubliceerde npm-specificatie, HTTPS-tarball-URL plus SHA-256, of tarballartefact uit een andere run, uploadt de genormaliseerdeopenclaw-current.tgzalspackage-under-testen voert daarna de bestaande Docker E2E-planner uit met smoke-, package-, product-, full- of aangepaste baanprofielen. Steltelegram_mode=mock-openaioflive-frontierin om de Telegram QA-workflow tegen hetzelfdepackage-under-test-artefact uit te voeren.- Productbewijs voor de nieuwste beta:
gh workflow run package-acceptance.yml --ref main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f telegram_mode=mock-openai- Bewijs met exacte tarball-URL vereist een digest en gebruikt het veiligheidsbeleid voor openbare URL's:
gh workflow run package-acceptance.yml --ref main \ -f source=url \ -f package_url=https://registry.npmjs.org/openclaw/-/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=package- Enterprise-/prive-tarball-mirrors gebruiken een expliciet beleid voor vertrouwde bronnen:
gh workflow run package-acceptance.yml --ref main \ -f source=trusted-url \ -f trusted_source_id=enterprise-artifactory \ -f package_url=https://packages.example.internal:8443/artifactory/openclaw/openclaw-VERSION.tgz \ -f package_sha256=<sha256> \ -f suite_profile=packagesource=trusted-url leest .github/package-trusted-sources.json uit de vertrouwde
workflow-ref en accepteert geen URL-referenties of een private-network-bypass via
workflowinvoer. Als het genoemde beleid bearer-auth declareert, configureer dan het
vaste secret OPENCLAW_TRUSTED_PACKAGE_TOKEN.
- Artefactbewijs downloadt een tarballartefact uit een andere Actions-run:
gh workflow run package-acceptance.yml --ref main \ -f source=artifact \ -f artifact_run_id=<run-id> \ -f artifact_name=<artifact-name> \ -f suite_profile=smoke-
pnpm test:docker:plugins- Verpakt en installeert de huidige OpenClaw-build in Docker, start de Gateway met OpenAI geconfigureerd en schakelt daarna gebundelde kanalen/Plugins in via configuratiebewerkingen.
- Verifieert dat setupdetectie niet-geconfigureerde downloadbare Plugins afwezig laat, dat de eerste geconfigureerde doctor-reparatie elke ontbrekende downloadbare Plugin expliciet installeert, en dat een tweede herstart geen verborgen afhankelijkheidsherstel uitvoert.
- Installeert ook een bekende oudere npm-baseline, schakelt Telegram in voordat
openclaw update --tag <candidate>wordt uitgevoerd, en verifieert dat de post-update doctor van de kandidaat verouderde Plugin-afhankelijkheidsresten opruimt zonder postinstall-reparatie aan de harnesszijde.
-
pnpm test:parallels:npm-update-
Voert de native smoke voor verpakte-installatie-updates uit over Parallels-guests. Elk geselecteerd platform installeert eerst het gevraagde baselinepakket, voert daarna de geinstalleerde opdracht
openclaw updatein dezelfde guest uit en verifieert de geinstalleerde versie, updatestatus, Gateway-gereedheid en een lokale agentbeurt. -
Gebruik
--platform macos,--platform windowsof--platform linuxterwijl je aan een guest itereert. Gebruik--jsonvoor het pad van het samenvattingsartefact en de status per baan. -
De OpenAI-baan gebruikt standaard
openai/gpt-5.5voor het bewijs van de live agentbeurt. Geef--model <provider/model>door of stelOPENCLAW_PARALLELS_OPENAI_MODELin wanneer je doelbewust een ander OpenAI-model valideert. -
Wikkel lange lokale runs in een host-timeout zodat Parallels-transportstalls niet de rest van het testvenster kunnen verbruiken:
bash timeout --foreground 150m pnpm test:parallels:npm-update -- --jsontimeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json -
Het script schrijft geneste baanlogs onder
/tmp/openclaw-parallels-npm-update.*. Inspecteerwindows-update.log,macos-update.logoflinux-update.logvoordat je aanneemt dat de buitenste wrapper hangt. -
Windows-update kan op een koude guest 10 tot 15 minuten besteden aan post-update doctor- en pakketupdatewerk; dat is nog steeds gezond wanneer het geneste npm-debuglog vooruitgaat.
-
Voer deze aggregatiewrapper niet parallel uit met afzonderlijke Parallels-smokebanen voor macOS, Windows of Linux. Ze delen VM-status en kunnen botsen bij snapshotherstel, pakketservering of guest-Gateway-status.
-
Het post-updatebewijs voert het normale gebundelde Plugin-oppervlak uit omdat capability-facades zoals spraak, beeldgeneratie en mediabegrip via gebundelde runtime-API's worden geladen, zelfs wanneer de agentbeurt zelf alleen een eenvoudige tekstrespons controleert.
-
-
pnpm openclaw qa aimock- Start alleen de lokale AIMock-provider-server voor directe protocol-smoke tests.
-
pnpm openclaw qa matrix- Voert de Matrix live QA-lane uit tegen een wegwerpbare, door Docker ondersteunde Tuwunel-homeserver. Alleen source-checkout - verpakte installaties leveren
qa-labniet mee. - Volledige CLI, profiel-/scenariocatalogus, env-vars en artifact-indeling: Matrix QA.
- Voert de Matrix live QA-lane uit tegen een wegwerpbare, door Docker ondersteunde Tuwunel-homeserver. Alleen source-checkout - verpakte installaties leveren
-
pnpm openclaw qa telegram- Voert de Telegram live QA-lane uit tegen een echte privégroep met de driver- en SUT-bottokens uit env.
- Vereist
OPENCLAW_QA_TELEGRAM_GROUP_ID,OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKENenOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN. De groeps-id moet de numerieke Telegram-chat-id zijn. - Ondersteunt
--credential-source convexvoor gedeelde gepoolde credentials. Gebruik standaard de env-modus, of stelOPENCLAW_QA_CREDENTIAL_SOURCE=convexin om gepoolde leases te gebruiken. - Standaardinstellingen dekken canary, mention-gating, command-adressering,
/status, bot-naar-bot genoemde antwoorden en native core-commandantwoorden.mock-openai-standaarden dekken ook deterministische regressies voor reply-chain en Telegram final-message streaming. Gebruik--list-scenariosvoor optionele probes zoalssession_status. - Sluit af met een niet-nulcode wanneer een scenario mislukt. Gebruik
--allow-failureswanneer je artifacts wilt zonder een falende exitcode. - Vereist twee verschillende bots in dezelfde privégroep, waarbij de SUT-bot een Telegram-gebruikersnaam beschikbaar stelt.
- Schakel voor stabiele bot-naar-bot-observatie Bot-to-Bot Communication Mode in
@BotFatherin voor beide bots en zorg dat de driver-bot groepsbotverkeer kan observeren. - Schrijft een Telegram QA-rapport, samenvatting en
qa-evidence.jsononder.artifacts/qa-e2e/.... Antwoordscenario's bevatten RTT vanaf het driver-verzendverzoek tot het geobserveerde SUT-antwoord.
Mantis Telegram Live is de PR-evidence-wrapper rond deze lane. Deze voert de
candidate-ref uit met door Convex geleasede Telegram-credentials, rendert de geredigeerde QA
report/evidence-bundel in een Crabbox-desktopbrowser, neemt MP4-evidence op,
genereert een op beweging getrimde GIF, uploadt de artifact-bundel en plaatst inline PR
evidence via de Mantis GitHub App wanneer pr_number is ingesteld. Maintainers kunnen
dit starten vanuit de Actions-UI via Mantis Scenario (scenario_id: telegram-live) of direct vanuit een pull request-comment:
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-replyMantis Telegram Desktop Proof is de agentische native Telegram Desktop
before/after-wrapper voor visueel PR-bewijs. Start deze vanuit de Actions-UI met
vrije instructions, via Mantis Scenario (scenario_id: telegram-desktop-proof), of vanuit een PR-comment:
@openclaw-mantis telegram desktop proofDe Mantis-agent leest de PR, bepaalt welk Telegram-zichtbaar gedrag de
wijziging bewijst, voert de real-user Crabbox Telegram Desktop proof-lane uit op baseline- en
candidate-refs, itereert tot de native GIF's bruikbaar zijn, schrijft een gekoppeld
motionPreview-manifest en plaatst dezelfde 2-koloms GIF-tabel via de
Mantis GitHub App wanneer pr_number is ingesteld.
pnpm openclaw qa mantis telegram-desktop-builder- Leaset of hergebruikt een Crabbox Linux-desktop, installeert native Telegram Desktop, configureert OpenClaw met een geleased Telegram SUT-bottoken, start de Gateway en neemt screenshot-/MP4-evidence op vanaf de zichtbare VNC-desktop.
- Gebruikt standaard
--credential-source convexzodat workflows alleen het Convex broker-secret nodig hebben. Gebruik--credential-source envmet dezelfdeOPENCLAW_QA_TELEGRAM_*-variabelen alspnpm openclaw qa telegram. - Telegram Desktop heeft nog steeds een gebruikerslogin/-profiel nodig. Het bottoken configureert alleen OpenClaw. Gebruik
--telegram-profile-archive-env <name>voor een base64.tgz-profielarchief, of gebruik--keep-leaseen log eenmalig handmatig in via VNC. - Schrijft
mantis-telegram-desktop-builder-report.md,mantis-telegram-desktop-builder-summary.json,telegram-desktop-builder.pngentelegram-desktop-builder.mp4onder de uitvoermap.
Live transport-lanes delen één standaardcontract zodat nieuwe transports niet afwijken; de dekkingsmatrix per lane staat in QA-overzicht → Live transport-dekking. qa-channel is de brede synthetische suite en maakt geen deel uit van die matrix.
Gedeelde Telegram-credentials via Convex (v1)
Wanneer --credential-source convex (of OPENCLAW_QA_CREDENTIAL_SOURCE=convex) is ingeschakeld voor
live transport QA, verkrijgt QA lab een exclusieve lease uit een door Convex ondersteunde pool, heartbeatt die
lease terwijl de lane draait en geeft de lease vrij bij afsluiten. De sectienaam dateert van vóór
Discord-, Slack- en WhatsApp-ondersteuning; het leasecontract wordt gedeeld tussen soorten.
Referentie-Convex-projectscaffold:
qa/convex-credential-broker/
Vereiste env-vars:
OPENCLAW_QA_CONVEX_SITE_URL(bijvoorbeeldhttps://your-deployment.convex.site)- Eén secret voor de geselecteerde rol:
OPENCLAW_QA_CONVEX_SECRET_MAINTAINERvoormaintainerOPENCLAW_QA_CONVEX_SECRET_CIvoorci
- Selectie van credentialrol:
- CLI:
--credential-role maintainer|ci - Env-standaard:
OPENCLAW_QA_CREDENTIAL_ROLE(standaardciin CI, andersmaintainer)
- CLI:
Optionele env-vars:
OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS(standaard1200000)OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS(standaard30000)OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS(standaard90000)OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS(standaard15000)OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX(standaard/qa-credentials/v1)OPENCLAW_QA_CREDENTIAL_OWNER_ID(optionele trace-id)OPENCLAW_QA_ALLOW_INSECURE_HTTP=1staat loopbackhttp://Convex-URL's toe voor uitsluitend lokale ontwikkeling.
OPENCLAW_QA_CONVEX_SITE_URL moet in normaal gebruik https:// gebruiken.
Maintainer-admincommands (pool toevoegen/verwijderen/listen) vereisen specifiek
OPENCLAW_QA_CONVEX_SECRET_MAINTAINER.
CLI-helpers voor maintainers:
pnpm openclaw qa credentials doctorpnpm openclaw qa credentials add --kind telegram --payload-file qa/telegram-credential.jsonpnpm openclaw qa credentials list --kind telegrampnpm openclaw qa credentials remove --credential-id <credential-id>Gebruik doctor vóór live runs om de Convex-site-URL, broker-secrets,
endpoint-prefix, HTTP-timeout en admin/list-bereikbaarheid te controleren zonder
secretwaarden af te drukken. Gebruik --json voor machineleesbare uitvoer in scripts en CI
utilities.
Standaard endpointcontract (OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1):
POST /acquire- Verzoek:
{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs } - Succes:
{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? } - Uitgeput/opnieuw te proberen:
{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
- Verzoek:
POST /payload-chunk- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken, index } - Succes:
{ status: "ok", index, data }
- Verzoek:
POST /heartbeat- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs } - Succes:
{ status: "ok" }(of lege2xx)
- Verzoek:
POST /release- Verzoek:
{ kind, ownerId, actorRole, credentialId, leaseToken } - Succes:
{ status: "ok" }(of lege2xx)
- Verzoek:
POST /admin/add(alleen maintainer-secret)- Verzoek:
{ kind, actorId, payload, note?, status? } - Succes:
{ status: "ok", credential }
- Verzoek:
POST /admin/remove(alleen maintainer-secret)- Verzoek:
{ credentialId, actorId } - Succes:
{ status: "ok", changed, credential } - Actieve lease-guard:
{ status: "error", code: "LEASE_ACTIVE", ... }
- Verzoek:
POST /admin/list(alleen maintainer-secret)- Verzoek:
{ kind?, status?, includePayload?, limit? } - Succes:
{ status: "ok", credentials, count }
- Verzoek:
Payload-vorm voor Telegram-soort:
{ groupId: string, driverToken: string, sutToken: string }groupIdmoet een numerieke Telegram-chat-id-string zijn.admin/addvalideert deze vorm voorkind: "telegram"en weigert verkeerd gevormde payloads.
Payload-vorm voor Telegram real-user-soort:
{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }groupId,testerUserIdentelegramApiIdmoeten numerieke strings zijn.tdlibArchiveSha256endesktopTdataArchiveSha256moeten SHA-256-hexstrings zijn.kind: "telegram-user"is gereserveerd voor de Mantis Telegram Desktop proof-workflow. Generieke QA Lab-lanes mogen deze niet verkrijgen.
Door de broker gevalideerde multi-channel-payloads:
- Discord:
{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string } - WhatsApp:
{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }
Slack-lanes kunnen ook uit de pool leasen, maar Slack-payloadvalidatie
bevindt zich momenteel in de Slack QA-runner in plaats van de broker. Gebruik
{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }
voor Slack-rijen.
Een kanaal toevoegen aan QA
De architectuur- en scenario-helpernamen voor nieuwe channel-adapters staan in QA-overzicht → Een kanaal toevoegen. De minimumbasis: implementeer de transport-runner op de gedeelde qa-lab-hostseam, declareer qaRunners in het pluginmanifest, mount als openclaw qa <runner> en schrijf scenario's onder qa/scenarios/.
Testsuites (wat waar draait)
Zie de suites als "toenemend realisme" (en toenemende instabiliteit/kosten):
Unit / integratie (standaard)
- Command:
pnpm test - Config: ongerichte runs gebruiken de
vitest.full-*.config.ts-shardset en kunnen multi-project-shards uitbreiden naar per-project-configs voor parallelle planning - Bestanden: core-/unit-inventarissen onder
src/**/*.test.ts,packages/**/*.test.tsentest/**/*.test.ts; UI-unittests draaien in de specialeunit-ui-shard - Scope:
- Pure unittests
- In-process integratietests (Gateway-auth, routing, tooling, parsing, config)
- Deterministische regressies voor bekende bugs
- Verwachtingen:
- Draait in CI
- Geen echte sleutels vereist
- Moet snel en stabiel zijn
- Resolver- en public-surface-loadertests moeten breed
api.js- enruntime-api.js-fallbackgedrag bewijzen met gegenereerde kleine plugin-fixtures, niet met echte gebundelde plugin source-API's. Echte plugin-API-loads horen thuis in plugin-eigen contract-/integratiesuites.
Native dependency-beleid:
- Standaard testinstallaties slaan optionele native Discord opus-builds over. Discord voice gebruikt gebundelde
libopus-wasm, en@discordjs/opusblijft uitgeschakeld inallowBuildszodat lokale tests en Testbox-lanes de native addon niet compileren. - Vergelijk native opus-prestaties in de
libopus-wasm-benchmarkrepo, niet in standaard OpenClaw-installatie-/testloops. Zet@discordjs/opusniet optruein de standaardallowBuilds; daardoor gaan niet-gerelateerde installatie-/testloops native code compileren.
Projecten, shards en scoped lanes
- Een niet-gerichte
pnpm testdraait twaalf kleinere shard-configuraties (core-unit-fast,core-unit-src,core-unit-security,core-unit-ui,core-unit-support,core-support-boundary,core-contracts,core-bundled,core-runtime,agentic,auto-reply,extensions) in plaats van één enorm native root-projectproces. Dit verlaagt de piek-RSS op zwaar belaste machines en voorkomt dat auto-reply-/extensionwerk niet-gerelateerde suites uithongert. pnpm test --watchgebruikt nog steeds de native root-vitest.config.ts-projectgrafiek, omdat een multi-shard watch-loop niet praktisch is.pnpm test,pnpm test:watchenpnpm test:perf:importsleiden expliciete bestands-/directorytargets eerst door scoped lanes, zodatpnpm test extensions/discord/src/monitor/message-handler.preflight.test.tsniet de volledige opstartkosten van het root-project hoeft te betalen.pnpm test:changedbreidt gewijzigde git-paden standaard uit naar goedkope scoped lanes: directe testbewerkingen, naastliggende*.test.ts-bestanden, expliciete source-mappings en lokale import-grafiekafhankelijken. Config-/setup-/packagebewerkingen draaien tests niet breed, tenzij je explicietOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedgebruikt.pnpm check:changedis de normale slimme lokale check-gate voor smal werk. Het classificeert de diff in core, core-tests, extensions, extension-tests, apps, docs, release-metadata, live Docker-tooling en tooling, en draait daarna de bijpassende typecheck-, lint- en guard-commando's. Het draait geen Vitest-tests; gebruikpnpm test:changedof explicietpnpm test <target>voor testbewijs. Versiebumpen met alleen release-metadata draaien gerichte versie-/config-/root-dependencychecks, met een guard die packagewijzigingen buiten het top-level version-veld afwijst.- Bewerkingen aan de live Docker ACP-harness draaien gerichte checks: shell-syntaxis voor de live Docker-authscripts en een dry-run van de live Docker-scheduler.
package.json-wijzigingen worden alleen meegenomen wanneer de diff beperkt is totscripts["test:docker:live-*"]; dependency-, export-, versie- en andere package-oppervlakbewerkingen gebruiken nog steeds de bredere guards. - Import-lichte unit-tests uit agents, commands, plugins, auto-reply-helpers,
plugin-sdken vergelijkbare pure utility-gebieden lopen via deunit-fast-lane, dietest/setup-openclaw-runtime.tsoverslaat; stateful/runtime-zware bestanden blijven op de bestaande lanes. - Geselecteerde
plugin-sdk- encommands-helpersourcebestanden mappen changed-mode-runs ook naar expliciete naastliggende tests in die lichte lanes, zodat helperbewerkingen voorkomen dat de volledige zware suite voor die directory opnieuw draait. auto-replyheeft aparte buckets voor top-level core-helpers, top-levelreply.*-integratietests en desrc/auto-reply/reply/**-subtree. CI splitst de reply-subtree verder in shards voor agent-runner, dispatch en commands/state-routing, zodat één import-zware bucket niet de volledige Node-staart bezit.- Normale PR-/main-CI slaat bewust de extension-batchsweep en de release-only
agentic-plugins-shard over. Full Release Validation dispatcht de aparte child-workflowPlugin Prereleasevoor die plugin-/extension-zware suites op release candidates.
Embedded runner coverage
- Wanneer je inputs voor message-tool discovery of Compaction-runtimecontext wijzigt, behoud dan beide dekkingsniveaus.
- Voeg gerichte helperregressies toe voor pure routerings- en normalisatie- grenzen.
- Houd de integratiesuites voor de embedded runner gezond:
src/agents/embedded-agent-runner/compact.hooks.test.ts,src/agents/embedded-agent-runner/run.overflow-compaction.test.tsensrc/agents/embedded-agent-runner/run.overflow-compaction.loop.test.ts. - Die suites verifiëren dat scoped id's en Compaction-gedrag nog steeds
door de echte
run.ts- /compact.ts-paden lopen; helper-only tests zijn geen voldoende vervanging voor die integratiepaden.
Vitest pool and isolation defaults
- De basis-Vitest-config gebruikt standaard
threads. - De gedeelde Vitest-config zet
isolate: falsevast en gebruikt de niet-geïsoleerde runner voor de root-projecten, e2e en live configs. - De root-UI-lane behoudt zijn
jsdom-setup en optimizer, maar draait ook op de gedeelde niet-geïsoleerde runner. - Elke
pnpm test-shard erft dezelfde standaardwaardenthreads+isolate: falseuit de gedeelde Vitest-config. scripts/run-vitest.mjsvoegt standaard--no-maglevtoe voor Vitest-child-Node- processen om V8-compilechurn tijdens grote lokale runs te verminderen. StelOPENCLAW_VITEST_ENABLE_MAGLEV=1in om te vergelijken met standaard V8- gedrag.scripts/run-vitest.mjsbeëindigt expliciete niet-watch Vitest-runs na 5 minuten zonder stdout- of stderr-output. StelOPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0in om de watchdog uit te schakelen voor een bewust stil onderzoek.
Fast local iteration
pnpm changed:lanestoont welke architecturale lanes een diff activeert.- De pre-commit-hook is alleen voor formattering. Hij staged geformatteerde bestanden opnieuw en draait geen lint, typecheck of tests.
- Draai
pnpm check:changedexpliciet vóór handoff of push wanneer je de slimme lokale check-gate nodig hebt. pnpm test:changedloopt standaard via goedkope scoped lanes. GebruikOPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changedalleen wanneer de agent besluit dat een harness-, config-, package- of contractbewerking echt bredere Vitest-dekking nodig heeft.pnpm test:maxenpnpm test:changed:maxbehouden hetzelfde routerings- gedrag, alleen met een hogere workerlimiet.- Lokale worker-autoscaling is bewust conservatief en schaalt terug wanneer de load average van de host al hoog is, zodat meerdere gelijktijdige Vitest-runs standaard minder schade veroorzaken.
- De basis-Vitest-config markeert de projecten/configbestanden als
forceRerunTriggers, zodat changed-mode reruns correct blijven wanneer test- wiring verandert. - De config houdt
OPENCLAW_VITEST_FS_MODULE_CACHEingeschakeld op ondersteunde hosts; stelOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/pathin als je één expliciete cachelocatie wilt voor directe profiling.
Perf debugging
pnpm test:perf:importsschakelt Vitest-importduur-rapportage plus import-breakdown-output in.pnpm test:perf:imports:changedbeperkt dezelfde profilingweergave tot bestanden die sindsorigin/mainzijn gewijzigd.- Shard-timingdata wordt geschreven naar
.artifacts/vitest-shard-timings.json. Whole-config-runs gebruiken het configpad als key; include-pattern-CI- shards voegen de shardnaam toe, zodat gefilterde shards apart kunnen worden gevolgd. - Wanneer één hot test nog steeds het grootste deel van zijn tijd in startupimports doorbrengt,
houd zware dependencies dan achter een smalle lokale
*.runtime.ts-seam en mock die seam direct in plaats van runtime-helpers deep te importeren alleen om ze doorvi.mock(...)te halen. pnpm test:perf:changed:bench -- --ref <git-ref>vergelijkt gerouteerdetest:changedmet het native root-projectpad voor die gecommitte diff en print wall time plus macOS max RSS.pnpm test:perf:changed:bench -- --worktreebenchmarkt de huidige dirty tree door de lijst met gewijzigde bestanden viascripts/test-projects.mjsen de root-Vitest-config te routeren.pnpm test:perf:profile:mainschrijft een main-thread CPU-profiel voor Vitest-/Vite-opstart en transform-overhead.pnpm test:perf:profile:runnerschrijft runner-CPU+heapprofielen voor de unit-suite met bestandsparallelisme uitgeschakeld.
Stabiliteit (Gateway)
- Commando:
pnpm test:stability:gateway - Config:
vitest.gateway.config.ts, geforceerd naar één worker - Scope:
- Start standaard een echte loopback-Gateway met diagnostics ingeschakeld
- Stuurt synthetische gateway message-, memory- en large-payload-churn door het diagnostic-eventpad
- Bevraagt
diagnostics.stabilityvia de Gateway WS RPC - Dekt persistentiehelpers voor diagnostic-stabilitybundles
- Assert dat de recorder begrensd blijft, synthetische RSS-samples onder het pressure-budget blijven en per-session queuedieptes terug naar nul leeglopen
- Verwachtingen:
- CI-veilig en keyless
- Smalle lane voor follow-up van stabiliteitsregressies, geen vervanging voor de volledige Gateway-suite
E2E (repo-aggregaat)
- Commando:
pnpm test:e2e - Scope:
- Draait de gateway-smoke-E2E-lane
- Draait de gemockte Control UI-browser-E2E-lane
- Verwachtingen:
- CI-veilig en keyless
- Vereist dat Playwright Chromium is geïnstalleerd
E2E (gateway smoke)
- Commando:
pnpm test:e2e:gateway - Config:
vitest.e2e.config.ts - Bestanden:
src/**/*.e2e.test.ts,test/**/*.e2e.test.tsen gebundelde-plugin-E2E-tests onderextensions/ - Runtime-standaardwaarden:
- Gebruikt Vitest
threadsmetisolate: false, gelijk aan de rest van de repo. - Gebruikt adaptieve workers (CI: tot 2, lokaal: standaard 1).
- Draait standaard in silent mode om console-I/O-overhead te verminderen.
- Gebruikt Vitest
- Nuttige overrides:
OPENCLAW_E2E_WORKERS=<n>om het aantal workers te forceren (afgetopt op 16).OPENCLAW_E2E_VERBOSE=1om verbose console-output opnieuw in te schakelen.
- Scope:
- End-to-end gedrag van multi-instance gateway
- WebSocket-/HTTP-oppervlakken, node-pairing en zwaardere networking
- Verwachtingen:
- Draait in CI (wanneer ingeschakeld in de pipeline)
- Geen echte keys vereist
- Meer bewegende delen dan unit-tests (kan langzamer zijn)
E2E (Control UI gemockte browser)
- Commando:
pnpm test:ui:e2e - Config:
test/vitest/vitest.ui-e2e.config.ts - Bestanden:
ui/src/**/*.e2e.test.ts - Scope:
- Start de Vite Control UI
- Stuurt een echte Chromium-pagina aan via Playwright
- Vervangt de Gateway WebSocket door deterministische in-browser mocks
- Verwachtingen:
- Draait in CI als onderdeel van
pnpm test:e2e - Geen echte Gateway, agents of providerkeys vereist
- Browserdependency moet aanwezig zijn (
pnpm --dir ui exec playwright install chromium)
- Draait in CI als onderdeel van
E2E: OpenShell backend-smoke
- Commando:
pnpm test:e2e:openshell - Bestand:
extensions/openshell/src/backend.e2e.test.ts - Scope:
- Hergebruikt een actieve lokale OpenShell-gateway
- Maakt een sandbox vanuit een tijdelijk lokaal Dockerfile
- Oefent OpenClaw's OpenShell-backend via echte
sandbox ssh-config+ SSH exec - Verifieert remote-canoniek filesystemgedrag via de sandbox fs bridge
- Verwachtingen:
- Alleen opt-in; geen onderdeel van de standaard
pnpm test:e2e-run - Vereist een lokale
openshell-CLI plus een werkende Docker-daemon - Vereist een actieve lokale OpenShell-gateway en de configbron daarvan
- Gebruikt geïsoleerde
HOME/XDG_CONFIG_HOMEen vernietigt daarna de testsandbox
- Alleen opt-in; geen onderdeel van de standaard
- Nuttige overrides:
OPENCLAW_E2E_OPENSHELL=1om de test in te schakelen bij het handmatig draaien van de bredere e2e-suiteOPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshellom naar een niet-standaard CLI-binary of wrapper-script te wijzenOPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/configom de geregistreerde gatewayconfig beschikbaar te maken voor de geïsoleerde testOPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1om het Docker-gateway-IP te overschrijven dat door de host-policy-fixture wordt gebruikt
Live (echte providers + echte modellen)
- Opdracht:
pnpm test:live - Configuratie:
vitest.live.config.ts - Bestanden:
src/**/*.live.test.ts,test/**/*.live.test.tsen live tests voor gebundelde Plugins onderextensions/ - Standaard: ingeschakeld door
pnpm test:live(steltOPENCLAW_LIVE_TEST=1in) - Bereik:
- "Werkt deze provider/dit model vandaag echt met echte referenties?"
- Vang wijzigingen in providerindeling, eigenaardigheden bij tool-aanroepen, authenticatieproblemen en rate-limitgedrag op
- Verwachtingen:
- Ontwerp is niet CI-stabiel (echte netwerken, echt providerbeleid, quota, storingen)
- Kost geld / gebruikt rate limits
- Voer bij voorkeur beperkte subsets uit in plaats van "alles"
- Live runs gebruiken al geexporteerde API-sleutels en voorbereide authenticatieprofielen.
- Standaard isoleren live runs nog steeds
HOMEen kopieren ze configuratie-/authenticatiemateriaal naar een tijdelijke test-home, zodat unit-fixtures je echte~/.openclawniet kunnen wijzigen. - Stel
OPENCLAW_LIVE_USE_REAL_HOME=1alleen in wanneer je bewust wilt dat live tests je echte home-map gebruiken. pnpm test:livegebruikt standaard een stillere modus: deze behoudt[live] ...-voortgangsuitvoer en dempt Gateway-bootstraplogs/Bonjour-ruis. StelOPENCLAW_LIVE_TEST_QUIET=0in als je de volledige opstartlogs terug wilt.- Rotatie van API-sleutels (providerspecifiek): stel
*_API_KEYSin met komma-/puntkomma-indeling of*_API_KEY_1,*_API_KEY_2(bijvoorbeeldOPENAI_API_KEYS,ANTHROPIC_API_KEYS,GEMINI_API_KEYS) of per-live override viaOPENCLAW_LIVE_*_KEY; tests proberen opnieuw bij rate-limitantwoorden. - Voortgangs-/Heartbeat-uitvoer:
- Live suites schrijven nu voortgangsregels naar stderr, zodat lange provideraanroepen zichtbaar actief zijn, zelfs wanneer Vitest-consolecapture stil is.
vitest.live.config.tsschakelt Vitest-console-interceptie uit, zodat provider-/Gateway-voortgangsregels tijdens live runs direct streamen.- Stem direct-model-Heartbeats af met
OPENCLAW_LIVE_HEARTBEAT_MS. - Stem Gateway-/probe-Heartbeats af met
OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS.
Welke suite moet ik uitvoeren?
Gebruik deze beslistabel:
- Logica/tests bewerken: voer
pnpm testuit (enpnpm test:coverageals je veel hebt gewijzigd) - Gateway-netwerken / WS-protocol / koppeling aanraken: voeg
pnpm test:e2etoe - Debuggen van "mijn bot ligt eruit" / providerspecifieke fouten / tool-aanroepen: voer een beperkte
pnpm test:liveuit
Live (netwerk-aanrakende) tests
Voor de live modelmatrix, CLI-backend-smokes, ACP-smokes, Codex app-server harness, en alle live tests voor mediaproviders (Deepgram, BytePlus, ComfyUI, image, music, video, media harness) - plus referentieafhandeling voor live runs - zie Live suites testen. Voor de speciale checklist voor updates en Plugin-validatie, zie Updates en Plugins testen.
Docker-runners (optionele "werkt in Linux"-controles)
Deze Docker-runners zijn opgesplitst in twee groepen:
- Live-model-runners:
test:docker:live-modelsentest:docker:live-gatewayvoeren alleen hun overeenkomende live bestand met profielsleutel uit binnen de repo-Docker-image (src/agents/models.profiles.live.test.tsensrc/gateway/gateway-models.profiles.live.test.ts), waarbij je lokale configuratiemap, workspace en optioneel profiel-env-bestand worden gemount. De overeenkomende lokale entrypoints zijntest:live:models-profilesentest:live:gateway-profiles. - Docker-live-runners behouden waar nodig hun eigen praktische limieten:
test:docker:live-modelsgebruikt standaard de samengestelde ondersteunde set met hoge signaalwaarde, entest:docker:live-gatewaygebruikt standaardOPENCLAW_LIVE_GATEWAY_SMOKE=1,OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8,OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000enOPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000. StelOPENCLAW_LIVE_MAX_MODELSof de Gateway-env-vars in wanneer je expliciet een kleinere limiet of grotere scan wilt. test:docker:allbouwt de live Docker-image eenmalig viatest:docker:live-build, verpakt OpenClaw eenmalig als npm-tarball viascripts/package-openclaw-for-docker.mjs, en bouwt/hergebruikt daarna tweescripts/e2e/Dockerfile-images. De kale image is alleen de Node/Git-runner voor install/update/plugin-dependency-lanes; die lanes mounten de vooraf gebouwde tarball. De functionele image installeert dezelfde tarball in/appvoor lanes voor ingebouwde-appfunctionaliteit. Docker-lanedefinities staan inscripts/lib/docker-e2e-scenarios.mjs; plannerlogica staat inscripts/lib/docker-e2e-plan.mjs;scripts/test-docker-all.mjsvoert het geselecteerde plan uit. De aggregaatrunner gebruikt een gewogen lokale scheduler:OPENCLAW_DOCKER_ALL_PARALLELISMbepaalt processlots, terwijl resourcelimieten voorkomen dat zware live-, npm-install- en multi-service-lanes allemaal tegelijk starten. Als een enkele lane zwaarder is dan de actieve limieten, kan de scheduler deze nog steeds starten wanneer de pool leeg is en deze daarna alleen laten draaien totdat er weer capaciteit beschikbaar is. Standaarden zijn 10 slots,OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9,OPENCLAW_DOCKER_ALL_NPM_LIMIT=5enOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7; stemOPENCLAW_DOCKER_ALL_WEIGHT_LIMITofOPENCLAW_DOCKER_ALL_DOCKER_LIMITalleen af wanneer de Docker-host meer ruimte heeft. De runner voert standaard een Docker-preflight uit, verwijdert verouderde OpenClaw E2E-containers, print elke 30 seconden status, bewaart timings van geslaagde lanes in.artifacts/docker-tests/lane-timings.json, en gebruikt die timings om bij latere runs langere lanes eerst te starten. GebruikOPENCLAW_DOCKER_ALL_DRY_RUN=1om het gewogen lanemanifest te printen zonder Docker te bouwen of uit te voeren, ofnode scripts/test-docker-all.mjs --plan-jsonom het CI-plan voor geselecteerde lanes, pakket-/imagebehoeften en referenties te printen.Package Acceptanceis de GitHub-native pakketpoort voor "werkt deze installeerbare tarball als product?" Deze lost een kandidaatpakket op uitsource=npm,source=ref,source=urlofsource=artifact, uploadt het alspackage-under-test, en voert daarna de herbruikbare Docker E2E-lanes uit tegen exact die tarball in plaats van de geselecteerde ref opnieuw te verpakken. Profielen zijn gerangschikt op breedte:smoke,package,productenfull. Zie Updates en Plugins testen voor het pakket-/update-/Plugin-contract, de survivor-matrix voor gepubliceerde upgrades, releasestandaarden en fouttriage.- Build- en releasecontroles voeren
scripts/check-cli-bootstrap-imports.mjsuit na tsdown. De guard doorloopt de statische gebouwde graaf vanafdist/entry.jsendist/cli/run-main.jsen faalt als pre-dispatch-opstart package-afhankelijkheden importeert, zoals Commander, prompt-UI, undici of logging voor commandodispatch; deze houdt ook de gebundelde Gateway-run-chunk binnen budget en wijst statische imports van bekende koude Gateway-paden af. Packaged CLI smoke dekt ook roothelp, onboard-help, doctor-help, status, config-schema en een model-list-opdracht. - Legacycompatibiliteit voor Package Acceptance is begrensd op
2026.4.25(2026.4.25-beta.*inbegrepen). Tot en met die grens tolereert de harness alleen metadatahiaten van verzonden pakketten: weggelaten prive-QA-inventarisitems, ontbrekendegateway install --wrapper, ontbrekende patchbestanden in de uit de tarball afgeleide git-fixture, ontbrekende gepersisteerdeupdate.channel, legacylocaties voor Plugin-install-records, ontbrekende persistentie van marketplace-install-records en configuratiemetadata-migratie tijdensplugins update. Voor pakketten na2026.4.25zijn die paden strikte fouten. - Container-smoke-runners:
test:docker:openwebui,test:docker:onboard,test:docker:npm-onboard-channel-agent,test:docker:release-user-journey,test:docker:release-typed-onboarding,test:docker:release-media-memory,test:docker:release-upgrade-user-journey,test:docker:release-plugin-marketplace,test:docker:skill-install,test:docker:update-channel-switch,test:docker:upgrade-survivor,test:docker:published-upgrade-survivor,test:docker:session-runtime-context,test:docker:agents-delete-shared-workspace,test:docker:gateway-network,test:docker:browser-cdp-snapshot,test:docker:mcp-channels,test:docker:agent-bundle-mcp-tools,test:docker:cron-mcp-cleanup,test:docker:plugins,test:docker:plugin-update,test:docker:plugin-lifecycle-matrixentest:docker:config-reloadstarten een of meer echte containers en verifieren integratiepaden op hoger niveau. - Docker/Bash E2E-lanes die de verpakte OpenClaw-tarball installeren via
scripts/lib/openclaw-e2e-instance.sh, begrenzennpm installopOPENCLAW_E2E_NPM_INSTALL_TIMEOUT(standaard600s; stel0in om de wrapper uit te schakelen voor debuggen).
De live-model-Docker-runners bind-mounten ook alleen de benodigde CLI-auth-homes (of alle ondersteunde homes wanneer de run niet is beperkt), en kopieren die daarna naar de container-home voor de run, zodat external-CLI-OAuth tokens kan vernieuwen zonder de host-auth-store te wijzigen:
-
Directe modellen:
pnpm test:docker:live-models(script:scripts/test-live-models-docker.sh) -
ACP-bind-smoke:
pnpm test:docker:live-acp-bind(script:scripts/test-live-acp-bind-docker.sh; dekt standaard Claude, Codex en Gemini, met strikte Droid/OpenCode-dekking viapnpm test:docker:live-acp-bind:droidenpnpm test:docker:live-acp-bind:opencode) -
CLI-backend-smoke:
pnpm test:docker:live-cli-backend(script:scripts/test-live-cli-backend-docker.sh) -
Codex app-server harness-smoke:
pnpm test:docker:live-codex-harness(script:scripts/test-live-codex-harness-docker.sh) -
Gateway + dev-agent:
pnpm test:docker:live-gateway(script:scripts/test-live-gateway-models-docker.sh) -
Observability-smokes:
pnpm qa:otel:smoke,pnpm qa:prometheus:smokeenpnpm qa:observability:smokezijn prive-QA-lanes voor source-checkout. Ze maken bewust geen deel uit van package-Docker-releaselanes, omdat de npm-tarball QA Lab weglaat. -
Open WebUI live smoke:
pnpm test:docker:openwebui(script:scripts/e2e/openwebui-docker.sh) -
Onboardingwizard (TTY, volledige scaffolding):
pnpm test:docker:onboard(script:scripts/e2e/onboard-docker.sh) -
Npm-tarball-onboarding/channel/agent-smoke:
pnpm test:docker:npm-onboard-channel-agentinstalleert de verpakte OpenClaw-tarball globaal in Docker, configureert OpenAI via env-ref-onboarding plus standaard Telegram, voert doctor uit en voert een gemockte OpenAI-agentbeurt uit. Hergebruik een vooraf gebouwde tarball metOPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz, sla de host-rebuild over metOPENCLAW_NPM_ONBOARD_HOST_BUILD=0, of wissel van kanaal metOPENCLAW_NPM_ONBOARD_CHANNEL=discordofOPENCLAW_NPM_ONBOARD_CHANNEL=slack. -
Release-gebruikersreis-smoketest:
pnpm test:docker:release-user-journeyinstalleert de verpakte OpenClaw-tarball globaal in een schone Docker-home, voert onboarding uit, configureert een gemockte OpenAI-provider, voert een agent-turn uit, installeert/deïnstalleert externe plugins, configureert ClickClack tegen een lokale fixture, verifieert uitgaande/inkomende berichten, herstart Gateway en voert doctor uit. -
Release-getypte-onboarding-smoketest:
pnpm test:docker:release-typed-onboardinginstalleert de verpakte tarball, stuurtopenclaw onboardvia een echte TTY aan, configureert OpenAI als een env-ref-provider, verifieert dat er geen ruwe sleutel persistent wordt opgeslagen en voert een gemockte agent-turn uit. -
Release-media/geheugen-smoketest:
pnpm test:docker:release-media-memoryinstalleert de verpakte tarball, verifieert beeldbegrip uit een PNG-bijlage, OpenAI-compatibele uitvoer voor beeldgeneratie, geheugenzoekherinnering en behoud van herinnering na een Gateway-herstart. -
Release-upgrade-gebruikersreis-smoketest:
pnpm test:docker:release-upgrade-user-journeyinstalleert standaard de nieuwste gepubliceerde baseline die ouder is dan de kandidaat-tarball, configureert provider-/plugin-/ClickClack-status op het gepubliceerde pakket, upgradet naar de kandidaat-tarball en voert daarna de kernreis voor agent/plugin/kanaal opnieuw uit. Als er geen oudere gepubliceerde baseline bestaat, wordt de kandidaatversie opnieuw gebruikt. Overschrijf de baseline metOPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version>. -
Release-plugin-marktplaats-smoketest:
pnpm test:docker:release-plugin-marketplaceinstalleert vanuit een lokale fixture-marktplaats, werkt de geïnstalleerde plugin bij, deïnstalleert deze en verifieert dat de plugin-CLI verdwijnt terwijl installatiemetadata worden opgeschoond. -
Skill-installatie-smoketest:
pnpm test:docker:skill-installinstalleert de verpakte OpenClaw-tarball globaal in Docker, schakelt geüploade archiefinstallaties uit in de configuratie, haalt de huidige live ClawHub-skill-slug op uit zoeken, installeert deze metopenclaw skills installen verifieert de geïnstalleerde skill plus.clawhub-origin-/lock-metadata. -
Update-kanaalwissel-smoketest:
pnpm test:docker:update-channel-switchinstalleert de verpakte OpenClaw-tarball globaal in Docker, schakelt van pakketstablenaar gitdev, verifieert het persistent opgeslagen kanaal en plugin-werking na de update, schakelt daarna terug naar pakketstableen controleert de updatestatus. -
Upgrade-overlevings-smoketest:
pnpm test:docker:upgrade-survivorinstalleert de verpakte OpenClaw-tarball over een vuile fixture voor een oude gebruiker met agents, kanaalconfiguratie, plugin-allowlists, verouderde plugin-afhankelijkheidsstatus en bestaande workspace-/sessiebestanden. Deze voert een pakketupdate plus niet-interactieve doctor uit zonder live provider- of kanaalsleutels, start daarna een loopback-Gateway en controleert behoud van configuratie/status plus startup-/statusbudgetten. -
Gepubliceerde-upgrade-overlevings-smoketest:
pnpm test:docker:published-upgrade-survivorinstalleert standaardopenclaw@latest, seedt realistische bestaande-gebruikersbestanden, configureert die baseline met een ingebakken commandorecept, valideert de resulterende configuratie, werkt die gepubliceerde installatie bij naar de kandidaat-tarball, voert niet-interactieve doctor uit, schrijft.artifacts/upgrade-survivor/summary.json, start daarna een loopback-Gateway en controleert geconfigureerde intents, behoud van status, startup,/healthz,/readyzen RPC-statusbudgetten. Overschrijf één baseline metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, vraag de aggregatiescheduler om exacte lokale baselines uit te breiden metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECSzoalsopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, en breid issue-vormige fixtures uit metOPENCLAW_UPGRADE_SURVIVOR_SCENARIOSzoalsreported-issues; de reported-issues-set bevatconfigured-plugin-installsvoor automatische reparatie van installatie van externe OpenClaw-plugins. Package Acceptance stelt deze beschikbaar alspublished_upgrade_survivor_baseline,published_upgrade_survivor_baselinesenpublished_upgrade_survivor_scenarios, lost meta-baseline-tokens op zoalslast-stable-4ofall-since-2026.4.23, en Full Release Validation breidt de release-soak-pakketgate uit naarlast-stable-4 2026.4.23 2026.5.2 2026.4.15plusreported-issues. -
Sessie-runtimecontext-smoketest:
pnpm test:docker:session-runtime-contextverifieert persistentie van verborgen runtimecontexttranscripten plus doctor-reparatie van getroffen gedupliceerde prompt-herschrijfvertakkingen. -
Bun-globale-installatie-smoketest:
bash scripts/e2e/bun-global-install-smoke.shverpakt de huidige tree, installeert deze metbun install -gin een geïsoleerde home en verifieert datopenclaw infer image providers --jsongebundelde beeldproviders retourneert in plaats van te blijven hangen. Hergebruik een vooraf gebouwde tarball metOPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz, sla de host-build over metOPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0, of kopieerdist/uit een gebouwde Docker-image metOPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local. -
Installer-Docker-smoketest:
bash scripts/test-install-sh-docker.shdeelt één npm-cache tussen de root-, update- en direct-npm-containers. Update-smoketest gebruikt standaard npmlatestals de stabiele baseline vóór upgrade naar de kandidaat-tarball. Overschrijf lokaal metOPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22, of met deupdate_baseline_version-input van de Install Smoke-workflow op GitHub. Niet-root-installatiecontroles houden een geïsoleerde npm-cache bij zodat cachevermeldingen van root geen gebruikerslokale installatiegedrag maskeren. StelOPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cachein om de root-/update-/direct-npm-cache opnieuw te gebruiken bij lokale heruitvoeringen. -
Install Smoke CI slaat de dubbele directe globale npm-update over met
OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1; voer het script lokaal uit zonder die env wanneer dekking voor directenpm install -gnodig is. -
Agents-gedeelde-workspace-verwijderen-CLI-smoketest:
pnpm test:docker:agents-delete-shared-workspace(script:scripts/e2e/agents-delete-shared-workspace-docker.sh) bouwt standaard de root-Dockerfile-image, seedt twee agents met één workspace in een geïsoleerde container-home, voertagents delete --jsonuit en verifieert geldige JSON plus gedrag voor behouden workspace. Hergebruik de install-smoke-image metOPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1. -
Gateway-netwerken (twee containers, WS-auth + health):
pnpm test:docker:gateway-network(script:scripts/e2e/gateway-network-docker.sh) -
Browser-CDP-snapshot-smoketest:
pnpm test:docker:browser-cdp-snapshot(script:scripts/e2e/browser-cdp-snapshot-docker.sh) bouwt de bron-E2E-image plus een Chromium-laag, start Chromium met ruwe CDP, voertbrowser doctor --deepuit en verifieert dat CDP-rolsnapshots link-URL's, tot cursor gepromoveerde klikbare elementen, iframe-refs en framemetadata dekken. -
OpenAI Responses web_search minimale-redenering-regressie:
pnpm test:docker:openai-web-search-minimal(script:scripts/e2e/openai-web-search-minimal-docker.sh) voert een gemockte OpenAI-server uit via Gateway, verifieert datweb_searchreasoning.effortverhoogt vanminimalnaarlow, forceert daarna de provider-schema-afwijzing en controleert dat het ruwe detail in Gateway-logs verschijnt. -
MCP-kanaalbrug (geseede Gateway + stdio-brug + ruwe Claude-notification-frame-smoketest):
pnpm test:docker:mcp-channels(script:scripts/e2e/mcp-channels-docker.sh) -
OpenClaw-bundel-MCP-tools (echte stdio-MCP-server + ingebedde OpenClaw-profiel-allow/deny-smoketest):
pnpm test:docker:agent-bundle-mcp-tools(script:scripts/e2e/agent-bundle-mcp-tools-docker.sh) -
Cron/subagent-MCP-cleanup (echte Gateway + afbreken van stdio-MCP-child na geïsoleerde cron- en eenmalige subagent-runs):
pnpm test:docker:cron-mcp-cleanup(script:scripts/e2e/cron-mcp-cleanup-docker.sh) -
Plugins (installatie-/update-smoketest voor lokaal pad,
file:, npm-register met gehesen afhankelijkheden, misvormde npm-pakketmetadata, git moving refs, ClawHub kitchen-sink, marktplaatsupdates en Claude-bundel inschakelen/inspecteren):pnpm test:docker:plugins(script:scripts/e2e/plugins-docker.sh) StelOPENCLAW_PLUGINS_E2E_CLAWHUB=0in om het ClawHub-blok over te slaan, of overschrijf het standaard kitchen-sink-pakket/runtime-paar metOPENCLAW_PLUGINS_E2E_CLAWHUB_SPECenOPENCLAW_PLUGINS_E2E_CLAWHUB_ID. ZonderOPENCLAW_CLAWHUB_URL/CLAWHUB_URLgebruikt de test een hermetische lokale ClawHub-fixtureserver. -
Plugin-update-ongewijzigd-smoketest:
pnpm test:docker:plugin-update(script:scripts/e2e/plugin-update-unchanged-docker.sh) -
Plugin-levenscyclusmatrix-smoketest:
pnpm test:docker:plugin-lifecycle-matrixinstalleert de verpakte OpenClaw-tarball in een kale container, installeert een npm-plugin, schakelt enable/disable om, upgradet en downgradet deze via een lokaal npm-register, verwijdert de geïnstalleerde code en verifieert daarna dat uninstall nog steeds verouderde status verwijdert terwijl RSS-/CPU-metrics voor elke levenscyclusfase worden gelogd. -
Configuratie-herlaadmetadata-smoketest:
pnpm test:docker:config-reload(script:scripts/e2e/config-reload-source-docker.sh) -
Plugins:
pnpm test:docker:pluginsdekt installatie-/update-smoketest voor lokaal pad,file:, npm-register met gehesen afhankelijkheden, git moving refs, ClawHub-fixtures, marktplaatsupdates en Claude-bundel inschakelen/inspecteren.pnpm test:docker:plugin-updatedekt ongewijzigd updategedrag voor geïnstalleerde plugins.pnpm test:docker:plugin-lifecycle-matrixdekt met resources bijgehouden npm-plugin-installatie, inschakelen, uitschakelen, upgrade, downgrade en uninstall bij ontbrekende code.
Om de gedeelde functionele image handmatig vooraf te bouwen en opnieuw te gebruiken:
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local pnpm test:docker:e2e-buildOPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channelsSuitespecifieke image-overschrijvingen zoals OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE winnen nog steeds wanneer ze zijn ingesteld. Wanneer OPENCLAW_SKIP_DOCKER_BUILD=1 naar een gedeelde externe image wijst, halen de scripts deze op als die nog niet lokaal aanwezig is. De QR- en installer-Docker-tests behouden hun eigen Dockerfiles omdat zij pakket-/installatiegedrag valideren in plaats van de gedeelde gebouwde-app-runtime.
De live-model-Docker-runners koppelen de huidige checkout ook alleen-lezen via een bind mount en
plaatsen die in een tijdelijke werkmap binnen de container. Zo blijft de runtime-
image slank, terwijl Vitest nog steeds tegen je exacte lokale source/config draait.
De stagingstap slaat grote, alleen lokale caches en app-buildoutputs over, zoals
.pnpm-store, .worktrees, __openclaw_vitest__, en app-lokale .build- of
Gradle-outputmappen, zodat Docker-live-runs geen minuten besteden aan het kopiëren van
machine-specifieke artefacten.
Ze zetten ook OPENCLAW_SKIP_CHANNELS=1, zodat Gateway-liveprobes geen
echte Telegram/Discord/enz.-kanaalworkers binnen de container starten.
test:docker:live-models draait nog steeds pnpm test:live, dus geef ook
OPENCLAW_LIVE_GATEWAY_* door wanneer je live Gateway-dekking in die Docker-baan
wilt beperken of uitsluiten.
test:docker:openwebui is een compatibiliteits-smoketest op hoger niveau: deze start een
OpenClaw Gateway-container met de OpenAI-compatibele HTTP-eindpunten ingeschakeld,
start een vastgepinde Open WebUI-container tegen die Gateway, meldt aan via
Open WebUI, verifieert dat /api/models openclaw/default toont, en stuurt daarna een
echt chatverzoek via Open WebUI's /api/chat/completions-proxy.
Stel OPENWEBUI_SMOKE_MODE=models in voor CI-controles op het releasepad die moeten stoppen
na aanmelden bij Open WebUI en modeldetectie, zonder te wachten op een live
modelvoltooiing.
De eerste run kan merkbaar trager zijn, omdat Docker mogelijk de
Open WebUI-image moet ophalen en Open WebUI mogelijk zijn eigen cold-start-setup moet afronden.
Deze baan verwacht een bruikbare live modelsleutel. Geef die door via de procesomgeving,
gestagede auth-profielen, of een expliciet OPENCLAW_PROFILE_FILE.
Geslaagde runs printen een kleine JSON-payload zoals { "ok": true, "model": "openclaw/default", ... }.
test:docker:mcp-channels is bewust deterministisch en heeft geen echt
Telegram-, Discord- of iMessage-account nodig. Het start een seeded Gateway-
container, start een tweede container die openclaw mcp serve spawnt, en
verifieert daarna gerouteerde gespreksdetectie, transcriptreads, attachmentmetadata,
live eventqueue-gedrag, routering van uitgaande verzendingen, en Claude-stijl kanaal- en
toestemmingsmeldingen over de echte stdio MCP-bridge. De meldingscontrole
inspecteert de ruwe stdio MCP-frames rechtstreeks, zodat de smoketest valideert wat de
bridge echt uitzendt, niet alleen wat een specifieke client-SDK toevallig toont.
test:docker:agent-bundle-mcp-tools is deterministisch en heeft geen live
modelsleutel nodig. Het bouwt de repo-Docker-image, start een echte stdio MCP-probeserver
binnen de container, materialiseert die server via de ingebedde OpenClaw-bundel
MCP-runtime, voert de tool uit, en verifieert daarna dat coding en messaging
bundle-mcp-tools behouden, terwijl minimal en tools.deny: ["bundle-mcp"] ze filteren.
test:docker:cron-mcp-cleanup is deterministisch en heeft geen live model
sleutel nodig. Het start een seeded Gateway met een echte stdio MCP-probeserver, draait een
geisoleerde cron-turn en een sessions_spawn one-shot child-turn, en verifieert daarna
dat het MCP-childproces na elke run afsluit.
Handmatige ACP-thread-smoketest in gewone taal (niet CI):
bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...- Bewaar dit script voor regressie-/debugworkflows. Het kan opnieuw nodig zijn voor ACP-threadrouteringsvalidatie, dus verwijder het niet.
Nuttige env-vars:
OPENCLAW_CONFIG_DIR=...(standaard:~/.openclaw) gemount naar/home/node/.openclawOPENCLAW_WORKSPACE_DIR=...(standaard:~/.openclaw/workspace) gemount naar/home/node/.openclaw/workspaceOPENCLAW_PROFILE_FILE=...gemount en gesourcet voordat tests worden uitgevoerdOPENCLAW_DOCKER_PROFILE_ENV_ONLY=1om alleen env-vars te verifiëren die uitOPENCLAW_PROFILE_FILEzijn gesourcet, met tijdelijke config-/werkmapmappen en zonder externe CLI-auth-mountsOPENCLAW_DOCKER_CLI_TOOLS_DIR=...(standaard:~/.cache/openclaw/docker-cli-tools) gemount naar/home/node/.npm-globalvoor gecachte CLI-installaties binnen Docker- Externe CLI-auth-mappen/-bestanden onder
$HOMEworden alleen-lezen gemount onder/host-auth...en daarna naar/home/node/...gekopieerd voordat tests starten- Standaardmappen:
.minimax - Standaardbestanden:
~/.codex/auth.json,~/.codex/config.toml,.claude.json,~/.claude/.credentials.json,~/.claude/settings.json,~/.claude/settings.local.json - Beperkte providerruns mounten alleen de benodigde mappen/bestanden die uit
OPENCLAW_LIVE_PROVIDERS/OPENCLAW_LIVE_GATEWAY_PROVIDERSworden afgeleid - Overschrijf handmatig met
OPENCLAW_DOCKER_AUTH_DIRS=all,OPENCLAW_DOCKER_AUTH_DIRS=none, of een kommagescheiden lijst zoalsOPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex
- Standaardmappen:
OPENCLAW_LIVE_GATEWAY_MODELS=.../OPENCLAW_LIVE_MODELS=...om de run te beperkenOPENCLAW_LIVE_GATEWAY_PROVIDERS=.../OPENCLAW_LIVE_PROVIDERS=...om providers in-container te filterenOPENCLAW_SKIP_DOCKER_BUILD=1om een bestaandeopenclaw:local-live-image opnieuw te gebruiken voor herhalingen die geen rebuild nodig hebbenOPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1om te verzekeren dat credentials uit de profielopslag komen (niet uit env)OPENCLAW_OPENWEBUI_MODEL=...om het model te kiezen dat door de Gateway voor de Open WebUI-smoketest wordt getoondOPENCLAW_OPENWEBUI_PROMPT=...om de nonce-checkprompt te overschrijven die door de Open WebUI-smoketest wordt gebruiktOPENWEBUI_IMAGE=...om de vastgepinde Open WebUI-imagetag te overschrijven
Docs-sanity
Draai docs-controles na docs-wijzigingen: pnpm check:docs.
Draai volledige Mintlify-ankervalidatie wanneer je ook controles op koppen binnen pagina's nodig hebt: pnpm docs:check-links:anchors.
Offline regressie (CI-veilig)
Dit zijn regressies van de "echte pipeline" zonder echte providers:
- Gateway-toolaanroepen (mock OpenAI, echte Gateway + agentloop):
src/gateway/gateway.test.ts(case: "runs a mock OpenAI tool call end-to-end via gateway agent loop") - Gateway-wizard (WS
wizard.start/wizard.next, schrijft config + auth afgedwongen):src/gateway/gateway.test.ts(case: "runs wizard over ws and writes auth token config")
Agent-betrouwbaarheidsevaluaties (Skills)
We hebben al een paar CI-veilige tests die zich gedragen als "agent-betrouwbaarheidsevaluaties":
- Mock-toolaanroepen via de echte Gateway + agentloop (
src/gateway/gateway.test.ts). - End-to-end wizardflows die sessiebedrading en configeffecten valideren (
src/gateway/gateway.test.ts).
Wat nog ontbreekt voor Skills (zie Skills):
- Besluitvorming: wanneer Skills in de prompt worden vermeld, kiest de agent dan de juiste Skill (of vermijdt hij irrelevante)?
- Naleving: leest de agent
SKILL.mdvoor gebruik en volgt hij de vereiste stappen/args? - Werkstroomcontracten: multi-turn-scenario's die toolvolgorde, behoud van sessiegeschiedenis en sandboxgrenzen afdwingen.
Toekomstige evaluaties moeten eerst deterministisch blijven:
- Een scenariorunner met mockproviders om toolaanroepen + volgorde, Skill-bestandsreads en sessiebedrading te controleren.
- Een kleine suite met Skill-gerichte scenario's (gebruiken versus vermijden, gating, promptinjectie).
- Optionele live-evaluaties (opt-in, env-gated) pas nadat de CI-veilige suite er is.
Contracttests (Plugin- en kanaalvorm)
Contracttests verifiëren dat elke geregistreerde Plugin en elk kanaal aan het
interfacecontract voldoet. Ze itereren over alle ontdekte Plugins en draaien een suite met
vorm- en gedragsasserties. De standaard pnpm test unit-baan slaat deze gedeelde
seam- en smokebestanden bewust over; draai de contractcommando's expliciet
wanneer je gedeelde kanaal- of providersurfaces aanraakt.
Commando's
- Alle contracten:
pnpm test:contracts - Alleen kanaalcontracten:
pnpm test:contracts:channels - Alleen providercontracten:
pnpm test:contracts:plugins
Kanaalcontracten
Te vinden in src/channels/plugins/contracts/*.contract.test.ts:
- plugin - Basis-Plugin-vorm (id, naam, capabilities)
- setup - Setupwizardcontract
- session-binding - Sessiebindinggedrag
- outbound-payload - Berichtpayloadstructuur
- inbound - Afhandeling van inkomende berichten
- actions - Kanaalactiehandlers
- threading - Afhandeling van thread-ID's
- directory - Directory/roster-API
- group-policy - Afdwinging van groepsbeleid
Providerstatuscontracten
Te vinden in src/plugins/contracts/*.contract.test.ts.
- status - Kanaalstatusprobes
- registry - Vorm van Plugin-register
Providercontracten
Te vinden in src/plugins/contracts/*.contract.test.ts:
- auth - Auth-flowcontract
- auth-choice - Auth-keuze/selectie
- catalog - Modelcatalogus-API
- discovery - Plugin-detectie
- loader - Plugin-laden
- runtime - Provider-runtime
- shape - Plugin-vorm/interface
- wizard - Setupwizard
Wanneer draaien
- Na het wijzigen van plugin-sdk-exports of subpaden
- Na het toevoegen of wijzigen van een kanaal- of provider-Plugin
- Na het refactoren van Plugin-registratie of -detectie
Contracttests draaien in CI en vereisen geen echte API-sleutels.
Regressies toevoegen (richtlijn)
Wanneer je een provider-/modelprobleem oplost dat live is ontdekt:
- Voeg indien mogelijk een CI-veilige regressie toe (mock-/stubprovider, of leg de exacte request-shape-transformatie vast)
- Als het inherent alleen live is (ratelimits, authbeleid), houd de live test dan smal en opt-in via env-vars
- Richt je bij voorkeur op de kleinste laag die de bug vangt:
- provider-requestconversie-/replaybug → directe modeltest
- Gateway-sessie-/history-/toolpipelinebug → Gateway-live-smoketest of CI-veilige Gateway-mocktest
- SecretRef-traversal-guardrail:
src/secrets/exec-secret-ref-id-parity.test.tsleidt één gesampled doel per SecretRef-klasse af uit registermetadata (listSecretTargetRegistryEntries()), en assert daarna dat exec-id's met traversalsegmenten worden afgewezen.- Als je een nieuwe
includeInPlanSecretRef-doelfamilie toevoegt insrc/secrets/target-registry-data.ts, werk danclassifyTargetClassin die test bij. De test faalt bewust op niet-geclassificeerde doel-id's, zodat nieuwe klassen niet stilzwijgend kunnen worden overgeslagen.