Testy
- Pełny zestaw testów (pakiety, live, Docker): Testing
-
pnpm test:force: Zabija każdy pozostawiony proces gateway trzymający domyślny port kontrolny, a następnie uruchamia pełny pakiet Vitest z odizolowanym portem gateway, aby testy serwera nie kolidowały z działającą instancją. Używaj tego, gdy wcześniejsze uruchomienie gateway pozostawiło zajęty port 18789. -
pnpm test:coverage: Uruchamia pakiet unit z pokryciem V8 (przezvitest.unit.config.ts). Globalne progi to 70% dla lines/branches/functions/statements. Pokrycie wyklucza entrypointy mocno integracyjne (okablowanie CLI, mosty gateway/telegram, statyczny serwer webchat), aby utrzymać cel skupiony na logice testowalnej jednostkowo. -
pnpm test:coverage:changed: Uruchamia pokrycie unit tylko dla plików zmienionych względemorigin/main. -
pnpm test:changed: rozwija zmienione ścieżki git do zakresowanych lane’ów Vitest, gdy diff dotyka tylko trasowalnych plików źródłowych/testowych. Zmiany config/setup nadal wracają do natywnego uruchomienia projektów root, aby edycje okablowania w razie potrzeby uruchamiały szerszy przebieg. -
pnpm test: kieruje jawne cele plików/katalogów przez zakresowane lane’y Vitest. Niezawężone przebiegi wykonują teraz jedenaście sekwencyjnych konfiguracji shardów (vitest.full-core-unit-src.config.ts,vitest.full-core-unit-security.config.ts,vitest.full-core-unit-ui.config.ts,vitest.full-core-unit-support.config.ts,vitest.full-core-support-boundary.config.ts,vitest.full-core-contracts.config.ts,vitest.full-core-bundled.config.ts,vitest.full-core-runtime.config.ts,vitest.full-agentic.config.ts,vitest.full-auto-reply.config.ts,vitest.full-extensions.config.ts) zamiast jednego ogromnego procesu root-project. -
Wybrane pliki testowe
plugin-sdkicommandssą teraz kierowane przez dedykowane lekkie lane’y, które zachowują tylkotest/setup.ts, pozostawiając przypadki ciężkie runtime’owo na ich dotychczasowych lane’ach. -
Wybrane pliki źródłowe helperów
plugin-sdkicommandsmapują równieżpnpm test:changedna jawne testy siostrzane w tych lekkich lane’ach, dzięki czemu małe edycje helperów nie powodują ponownego uruchamiania ciężkich pakietów opartych na runtime. -
auto-replydzieli się teraz także na trzy dedykowane konfiguracje (core,top-level,reply), dzięki czemu harness odpowiedzi nie dominuje nad lżejszymi testami status/token/helper najwyższego poziomu. -
Bazowa konfiguracja Vitest domyślnie używa teraz
pool: "threads"iisolate: false, a współdzielony nieizolowany runner jest włączony w konfiguracjach całego repozytorium. -
pnpm test:channelsuruchamiavitest.channels.config.ts. -
pnpm test:extensionsuruchamiavitest.extensions.config.ts. -
pnpm test:extensions: uruchamia pakiety extension/plugin. -
pnpm test:perf:imports: włącza raportowanie czasu importu + rozbicia importów w Vitest, nadal używając trasowania przez zakresowane lane’y dla jawnych celów plików/katalogów. -
pnpm test:perf:imports:changed: to samo profilowanie importów, ale tylko dla plików zmienionych względemorigin/main. -
pnpm test:perf:changed:bench -- --ref <git-ref>benchmarkuje trasowaną ścieżkę changed-mode względem natywnego uruchomienia root-project dla tego samego zatwierdzonego diffu git. -
pnpm test:perf:changed:bench -- --worktreebenchmarkuje bieżący zestaw zmian w worktree bez konieczności wcześniejszego commitu. -
pnpm test:perf:profile:main: zapisuje profil CPU dla głównego wątku Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: zapisuje profile CPU + heap dla runnera unit (.artifacts/vitest-runner-profile). -
Integracja gateway: opt-in przez
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testlubpnpm test:gateway. -
pnpm test:e2e: Uruchamia testy smoke end-to-end gateway (wiele instancji WS/HTTP/parowanie węzłów). Domyślnie używathreads+isolate: falsez adaptacyjnymi workerami wvitest.e2e.config.ts; dostrajaj przezOPENCLAW_E2E_WORKERS=<n>i ustawOPENCLAW_E2E_VERBOSE=1, aby włączyć szczegółowe logi. -
pnpm test:live: Uruchamia testy live dostawców (minimax/zai). Wymaga kluczy API iLIVE=1(lub specyficznego dla dostawcy*_LIVE_TEST=1), aby zdjąć pomijanie. -
pnpm test:docker:openwebui: Uruchamia zdockeryzowane OpenClaw + Open WebUI, loguje się przez Open WebUI, sprawdza/api/models, a następnie wykonuje rzeczywisty czat proxowany przez/api/chat/completions. Wymaga użytecznego klucza modelu live (na przykład OpenAI w~/.profile), pobiera zewnętrzny obraz Open WebUI i nie oczekuje się, że będzie tak stabilny w CI jak zwykłe pakiety unit/e2e. -
pnpm test:docker:mcp-channels: Uruchamia zasiany kontener Gateway i drugi kontener klienta, który startujeopenclaw mcp serve, a następnie weryfikuje routowane wykrywanie konwersacji, odczyty transkryptów, metadane załączników, zachowanie kolejki zdarzeń live, routing wysyłek wychodzących oraz powiadomienia kanałowe + uprawnień w stylu Claude przez rzeczywisty most stdio. Asercja powiadomienia Claude odczytuje bezpośrednio surowe ramki stdio MCP, aby smoke odzwierciedlał to, co most rzeczywiście emituje.
Lokalna bramka PR
Dla lokalnych kontroli land/gate PR uruchom:pnpm checkpnpm buildpnpm testpnpm check:docs
pnpm test flaky na obciążonym hoście, uruchom ponownie raz, zanim uznasz to za regresję, a następnie odizoluj problem przez pnpm test <path/to/test>. Dla hostów z ograniczoną pamięcią użyj:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark opóźnień modeli (lokalne klucze)
Skrypt:scripts/bench-model.ts
Użycie:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Opcjonalne env:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Domyślny prompt: “Reply with a single word: ok. No punctuation or extra text.”
- median minimax 1279 ms (min 1114, max 2431)
- median opus 2454 ms (min 1224, max 3170)
Benchmark startu CLI
Skrypt:scripts/bench-cli-startup.ts
Użycie:
pnpm test:startup:benchpnpm test:startup:bench:smokepnpm test:startup:bench:savepnpm test:startup:bench:updatepnpm test:startup:bench:checkpnpm tsx scripts/bench-cli-startup.tspnpm tsx scripts/bench-cli-startup.ts --runs 12pnpm tsx scripts/bench-cli-startup.ts --preset realpnpm tsx scripts/bench-cli-startup.ts --preset real --case status --case gatewayStatus --runs 3pnpm tsx scripts/bench-cli-startup.ts --entry openclaw.mjs --entry-secondary dist/entry.js --preset allpnpm tsx scripts/bench-cli-startup.ts --preset all --output .artifacts/cli-startup-bench-all.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --case gatewayStatusJson --output .artifacts/cli-startup-bench-smoke.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --cpu-prof-dir .artifacts/cli-cpupnpm tsx scripts/bench-cli-startup.ts --json
startup:--version,--help,health,health --json,status --json,statusreal:health,status,status --json,sessions,sessions --json,agents list --json,gateway status,gateway status --json,gateway health --json,config get gateway.portall: oba presety
sampleCount, avg, p50, p95, min/max, rozkład exit-code/signal oraz podsumowania maksymalnego RSS dla każdego polecenia. Opcjonalne --cpu-prof-dir / --heap-prof-dir zapisuje profile V8 dla każdego uruchomienia, dzięki czemu pomiar czasu i przechwytywanie profili używają tego samego harnessu.
Konwencje zapisu wyników:
pnpm test:startup:bench:smokezapisuje ukierunkowany artefakt smoke w.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:savezapisuje artefakt pełnego pakietu w.artifacts/cli-startup-bench-all.jsonz użyciemruns=5iwarmup=1pnpm test:startup:bench:updateodświeża commitowaną fixturę bazową wtest/fixtures/cli-startup-bench.jsonz użyciemruns=5iwarmup=1
test/fixtures/cli-startup-bench.json- Odśwież przez
pnpm test:startup:bench:update - Porównaj bieżące wyniki z fixturą przez
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker jest opcjonalny; jest potrzebny tylko do smoke testów onboardingu w kontenerach. Pełny przebieg cold-start w czystym kontenerze Linux:openclaw health.
Smoke importu QR (Docker)
Zapewnia, żeqrcode-terminal ładuje się w obsługiwanych runtime Node w Dockerze (domyślnie Node 24, zgodność z Node 22):