Testy
- Pełny zestaw testowy (zestawy, live, Docker): Testowanie
-
pnpm test:force: Zamyka wszystkie zalegające procesy gateway, które trzymają domyślny port kontrolny, a następnie uruchamia pełny zestaw Vitest z izolowanym portem gateway, aby testy serwera nie kolidowały z działającą instancją. Użyj tego, gdy wcześniejsze uruchomienie gateway pozostawiło zajęty port 18789. -
pnpm test:coverage: Uruchamia zestaw testów jednostkowych z pokryciem V8 (przezvitest.unit.config.ts). Globalne progi wynoszą 70% dla lines/branches/functions/statements. Pokrycie wyklucza entrypointy silnie zintegrowane (powiązania CLI, mosty gateway/telegram, statyczny serwer webchat), aby utrzymać cel skupiony na logice nadającej się do testów jednostkowych. -
pnpm test:coverage:changed: Uruchamia pokrycie testami jednostkowymi tylko dla plików zmienionych odorigin/main. -
pnpm test:changed: uruchamia natywną konfigurację projektów Vitest z--changed origin/main. Bazowa konfiguracja traktuje pliki projektów/konfiguracji jakoforceRerunTriggers, więc zmiany w powiązaniach nadal powodują szerokie ponowne uruchomienia, gdy jest to potrzebne. -
pnpm test: uruchamia bezpośrednio natywną konfigurację głównych projektów Vitest. Filtry plików działają natywnie we wszystkich skonfigurowanych projektach. -
Bazowa konfiguracja Vitest domyślnie używa teraz
pool: "threads"iisolate: false, a współdzielony nieizolowany runner jest włączony we wszystkich konfiguracjach repozytorium. -
pnpm test:channelsuruchamiavitest.channels.config.ts. -
pnpm test:extensionsuruchamiavitest.extensions.config.ts. -
pnpm test:extensions: uruchamia zestawy dla rozszerzeń/wtyczek. -
pnpm test:perf:imports: włącza raportowanie czasu importu i rozbicia importów Vitest dla natywnego uruchomienia głównych projektów. -
pnpm test:perf:imports:changed: to samo profilowanie importów, ale tylko dla plików zmienionych odorigin/main. -
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 i heap dla runnera testów jednostkowych (.artifacts/vitest-runner-profile). -
Integracja Gateway: tryb opt-in przez
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testlubpnpm test:gateway. -
pnpm test:e2e: Uruchamia testy smoke end-to-end gateway (parowanie wielu instancji WS/HTTP/node). Domyślnie używathreads+isolate: falsez adaptacyjną liczbą workerów wvitest.e2e.config.ts; dostrój 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 wyłączyć pomijanie. -
pnpm test:docker:openwebui: Uruchamia OpenClaw i Open WebUI w Dockerze, loguje się przez Open WebUI, sprawdza/api/models, a następnie wykonuje rzeczywisty czat przez proxy przez/api/chat/completions. Wymaga działającego klucza live modelu (na przykład OpenAI w~/.profile), pobiera zewnętrzny obraz Open WebUI i nie oczekuje się od niego stabilności CI takiej jak w zwykłych zestawach unit/e2e. -
pnpm test:docker:mcp-channels: Uruchamia kontener Gateway z przygotowanymi danymi oraz drugi kontener kliencki, który uruchamiaopenclaw mcp serve, a następnie weryfikuje wykrywanie trasowanych rozmów, odczyty transkryptów, metadane załączników, zachowanie kolejki zdarzeń live, routing wysyłki wychodzącej oraz powiadomienia w stylu Claude dotyczące kanałów i uprawnień przez rzeczywisty most stdio. Asercja powiadomień Claude odczytuje bezpośrednio surowe ramki MCP ze stdio, aby smoke odzwierciedlał to, co most faktycznie emituje.
Lokalna bramka PR
Dla lokalnych kontroli land/gate PR uruchom:pnpm checkpnpm buildpnpm testpnpm check:docs
pnpm test zacznie się sypać na obciążonym hoście, uruchom je ponownie raz, zanim uznasz to za regresję, a następnie wyizoluj 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óźnienia modelu (lokalne klucze)
Skrypt:scripts/bench-model.ts
Użycie:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Opcjonalne zmienne środowiskowe:
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.”
- minimax mediana 1279 ms (min 1114, max 2431)
- opus mediana 2454 ms (min 1224, max 3170)
Benchmark uruchamiania 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 zapisują profile V8 dla każdego uruchomienia, dzięki czemu pomiar czasu i przechwytywanie profilu używają tego samego harnessu.
Konwencje zapisywanych wyników:
pnpm test:startup:bench:smokezapisuje docelowy artefakt smoke w.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:savezapisuje artefakt pełnego zestawu w.artifacts/cli-startup-bench-all.jsonz użyciemruns=5iwarmup=1pnpm test:startup:bench:updateodświeża zatwierdzony fixture bazowy 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 fixture przez
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker jest opcjonalny; jest potrzebny tylko do testów smoke onboardingu w kontenerach. Pełny przepływ cold start w czystym kontenerze Linux:openclaw health.
Smoke importu QR (Docker)
Zapewnia, żeqrcode-terminal ładuje się w obsługiwanych środowiskach Node w Dockerze (domyślnie Node 24, zgodność z Node 22):