Release and CI
Testy
- Kompletny zestaw testowy (zestawy, testy na żywo, Docker): Testowanie
- Walidacja aktualizacji i pakietów Pluginów: Testowanie aktualizacji i Pluginów
Domyślne ustawienia agenta
Sesje agentów uruchamiają testy i walidację wymagającą dużej mocy obliczeniowej zdalnie za pośrednictwem Crabbox. Dla zaufanego kodu opiekunów domyślnie używany jest Blacksmith Testbox. Skonfigurowany przepływ pracy Testbox wczytuje dane uwierzytelniające, dlatego niezaufany kod współtwórców lub forków musi zamiast niego korzystać z CI forka bez sekretów albo oczyszczonego, bezpośredniego środowiska AWS Crabbox.
Jeśli zadanie dotyczące zaufanego kodu prawdopodobnie będzie wymagać testów lub rozbudowanych
dowodów, natychmiast rozpocznij wstępne rozgrzewanie w sesji poleceń działającej w tle, kontynuuj
pracę podczas przygotowywania środowiska, ponownie wykorzystuj zwrócony identyfikator tbx_...,
synchronizuj bieżącą kopię roboczą przy każdym uruchomieniu i zatrzymaj środowisko przed
przekazaniem pracy:
node scripts/crabbox-wrapper.mjs warmup --provider blacksmith-testbox --keep --timing-jsonPo pierwszym udanym ponownym użyciu wrapper zapisuje bazę dzierżawy, zależności i odcisk palca
przepływu pracy Testbox w katalogu .crabbox/testbox-leases/. Zmiany wyłącznie w kodzie źródłowym
nadal korzystają z rozgrzanego środowiska. Zmieniona baza scalania, plik blokady, dane wejściowe
menedżera pakietów, wrapper lub przepływ pracy Testbox powodują bezpieczne przerwanie i wymagają
nowej dzierżawy. Każde uruchomienie nadal synchronizuje bieżącą kopię roboczą.
OPENCLAW_TESTBOX_ALLOW_STALE=1 służy wyłącznie do celowej diagnostyki, a nie jako dowód
wydania.
Poniższe lokalne polecenia testowe są przeznaczone dla przepływów pracy wykonywanych przez ludzi lub jako jawnie zażądany przez użytkownika mechanizm zastępczy dla agenta. Niedostępność zdalnego dostawcy musi zostać zgłoszona; nie stanowi ona pozwolenia na ciche uruchomienie szerokiej lokalnej bramki.
W przypadku niezaufanego kodu wykonaj wstępne rozgrzewanie z użyciem --provider aws. Każde
uruchomienie musi ustawiać CRABBOX_ENV_ALLOW=CI, przekazywać --provider aws --no-hydrate
i używać nowego tymczasowego zdalnego katalogu HOME przed instalacją zależności lub
uruchomieniem testów. Użyj nowo rozgrzanej dzierżawy przeznaczonej wyłącznie dla tego
niezaufanego źródła; nigdy nie używaj ponownie zaufanej ani wcześniej przygotowanej dzierżawy.
Uruchom zainstalowany, zaufany plik wykonywalny Crabbox z czystej, zaufanej kopii roboczej
gałęzi main i pobierz wyłącznie zdalny PR za pomocą --fresh-pr; nigdy nie wykonuj lokalnie
wrappera ani konfiguracji z niezaufanej kopii roboczej. Usuń ustawienie
CRABBOX_AWS_INSTANCE_PROFILE i przerwij bezpiecznie, jeśli rozpoznana wartość
aws.instanceProfile nie jest pusta. Przed każdą instalacją lub testem użyj zaufanych narzędzi
wskazanych ścieżkami bezwzględnymi, aby wymagać tokenu IMDSv2, udowodnić, że punkt końcowy danych
uwierzytelniających IAM zwraca kod 404, oraz sprawdzić, czy zdalne git rev-parse HEAD jest równe
pełnemu, sprawdzonemu SHA rewizji głównej PR-a. Powiąż dzierżawę z tym SHA oraz zatrzymaj i ponownie
rozgrzej środowisko, gdy rewizja główna się zmieni. Prześlij zaufany skrypt
scripts/crabbox-untrusted-bootstrap.sh z czystej gałęzi main wraz z --fresh-pr; instaluje on
przypięte wersje Node/pnpm, weryfikuje SHA i przypięcie menedżera pakietów, izoluje HOME,
instaluje zależności, a następnie wykonuje żądany test. Jeśli broker nie może potwierdzić braku roli
lub nie istnieje zdalny PR, użyj CI forka bez sekretów. Nie używaj hydrate-github, --no-sync
ani przepływu pracy Testbox z wczytanymi danymi uwierzytelniającymi.
Usuń wszystkie nadpisania CRABBOX_TAILSCALE*, wymuś --network public --tailscale=false, wyczyść flagi węzła wyjściowego i sieci LAN oraz przed przesłaniem
jakiegokolwiek skryptu wymagaj, aby crabbox inspect raportował sieć publiczną bez stanu Tailscale.
Rutynowa kolejność lokalna
pnpm test:changeddo walidacji zmienionego zakresu za pomocą Vitest.pnpm test <path-or-filter>dla jednego pliku, katalogu lub jawnie określonego celu.pnpm testtylko wtedy, gdy celowo potrzebujesz pełnego lokalnego zestawu Vitest.
W drzewie roboczym Codex albo połączonej lub częściowej kopii roboczej agenci unikają
bezpośredniego lokalnego uruchamiania pnpm test* / pnpm check* / pnpm crabbox:run:
- Jawnie zażądany przez użytkownika lokalny mechanizm zastępczy dla małego pliku:
node scripts/run-vitest.mjs <path-or-filter>. - Bramki zmian lub szeroka walidacja:
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, dzięki czemu pnpm działa wewnątrz Testbox. - Końcowy
exitCodewrappera oraz dane czasowe JSON stanowią wynik polecenia. Delegowane uruchomienie Blacksmith GitHub Actions może po pomyślnym poleceniu SSH wyświetlić stancancelled, ponieważ Testbox jest zatrzymywany spoza akcji podtrzymującej działanie; zanim uznasz to za błąd, sprawdź podsumowanie wrappera i dane wyjściowe polecenia. OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: utrzymuje serializację intensywnych kontroli w bieżącym drzewie roboczym zamiast we wspólnym katalogu Git dla poleceń takich jakpnpm check:changedi ukierunkowanepnpm test .... Używaj tego wyłącznie na lokalnych hostach o dużej wydajności, gdy celowo uruchamiasz niezależne kontrole w wielu połączonych drzewach roboczych.
Podstawowe polecenia
Uruchomienia wrappera testów kończą się krótkim podsumowaniem [test] passed|failed|skipped ... in ...; własny wiersz czasu trwania Vitest pozostaje szczegółem poszczególnego fragmentu.
| Polecenie | Działanie |
|---|---|
pnpm test |
Jawne cele w postaci plików lub katalogów są kierowane do ograniczonych zakresowo ścieżek Vitest. Uruchomienia bez celu stanowią walidację pełnego zestawu: stałe grupy fragmentów są rozwijane do konfiguracji końcowych w celu lokalnego wykonywania równoległego, a oczekiwany podział na fragmenty jest wyświetlany przed rozpoczęciem. Grupa rozszerzeń jest zawsze rozwijana do konfiguracji fragmentów dla poszczególnych rozszerzeń zamiast jednego ogromnego procesu projektu głównego. |
pnpm test:changed |
Tanie, inteligentne uruchomienie testów zmian: precyzyjne cele wynikające z bezpośrednich zmian w testach, sąsiednich plików *.test.ts, jawnych mapowań źródeł i lokalnego grafu importów. Szerokie zmiany konfiguracji lub pakietów są pomijane, chyba że można je odwzorować na konkretne testy. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Jawne szerokie uruchomienie testów zmian; użyj, gdy zmiana infrastruktury testowej, konfiguracji lub pakietu powinna powodować użycie szerszego mechanizmu testowania zmian Vitest. |
pnpm test:force |
Zwalnia skonfigurowany port Gateway OpenClaw (domyślnie 18789), a następnie uruchamia pełny zestaw z odizolowanym portem Gateway, aby testy serwera nie kolidowały z działającą instancją. |
pnpm test:coverage |
Generuje informacyjny raport pokrycia V8 dla domyślnej ścieżki testów jednostkowych (vitest.unit.config.ts); nie są egzekwowane żadne progi pokrycia. |
pnpm test:coverage:changed |
Pokrycie testami jednostkowymi wyłącznie dla plików zmienionych od origin/main. |
pnpm changed:lanes |
Wyświetla ścieżki architektoniczne aktywowane przez różnice względem origin/main. |
pnpm check:changed |
Poza CI domyślnie deleguje do Crabbox/Testbox, a następnie uruchamia inteligentną bramkę kontroli zmian w zdalnym procesie podrzędnym: formatowanie oraz polecenia sprawdzania typów, lintowania i zabezpieczeń dla objętych zmianami ścieżek. Nie uruchamia Vitest; do walidacji testowej użyj pnpm test:changed lub pnpm test <target>. |
Współdzielony stan testów i pomocnicze funkcje procesów
src/test-utils/openclaw-test-state.ts: używaj w Vitest, gdy test wymaga odizolowanegoHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, przykładowej konfiguracji, przestrzeni roboczej, katalogu agenta lub magazynu profili uwierzytelniania.pnpm test:env-mutations:report: nieblokujący raport testów i infrastruktur testowych, które bezpośrednio modyfikująHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRlub powiązane klucze środowiskowe. Użyj go do znajdowania kandydatów do migracji na współdzieloną funkcję pomocniczą stanu testów.test/helpers/openclaw-test-instance.ts: testy E2E na poziomie procesu, które wymagają działającego Gateway, środowiska CLI, przechwytywania dzienników i sprzątania w jednym miejscu.- Ścieżki E2E Docker/Bash, które wczytują
scripts/lib/docker-e2e-image.sh, mogą przekazaćdocker_e2e_test_state_shell_b64 <label> <scenario>do kontenera i zdekodować go za pomocąscripts/lib/openclaw-e2e-instance.sh; skrypty korzystające z wielu katalogów domowych mogą przekazaćdocker_e2e_test_state_function_b64i wywołaćopenclaw_test_state_create <label> <scenario>w każdym przepływie.node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonzapisuje plik środowiskowy hosta, który można wczytać jako źródło (--przedcreatezapobiega interpretowaniu--env-filejako flagi Node przez nowsze środowiska uruchomieniowe Node). Ścieżki uruchamiające Gateway mogą wczytaćscripts/lib/openclaw-e2e-instance.sh, aby uzyskać rozpoznawanie punktu wejścia, uruchamianie makiety OpenAI, uruchamianie na pierwszym planie lub w tle, sondy gotowości, eksport środowiska stanu, zrzuty dzienników i sprzątanie procesów.
Ścieżki Control UI, TUI i rozszerzeń
- Testy E2E interfejsu Control UI z atrapami:
pnpm test:ui:e2euruchamia ścieżkę Vitest + Playwright, która uruchamia Control UI w Vite i steruje rzeczywistą stroną Chromium komunikującą się z atrapą WebSocketu Gateway. Testy znajdują się wui/src/**/*.e2e.test.ts, a współdzielone atrapy i elementy sterujące wui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2eobejmuje tę ścieżkę. Uruchomienia przez agenta domyślnie odbywają się w Testbox/Crabbox, w tym ukierunkowane testy potwierdzające; polecenianode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsużywaj tylko jako jawnie wybranego lokalnego rozwiązania awaryjnego. - Testy PTY interfejsu TUI:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsuruchamia szybką ścieżkę PTY z atrapą zaplecza.OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1lubpnpm tui:pty:test:watch --mode localuruchamia wolniejszy test dymnytui --local, który zastępuje atrapą wyłącznie zewnętrzny punkt końcowy modelu. Sprawdzaj stabilny widoczny tekst lub wywołania fikstur, a nie surowe migawki ANSI. pnpm test:extensionsipnpm test extensionsuruchamiają wszystkie fragmenty rozszerzeń/pluginów. Zasobożerne pluginy kanałów, plugin przeglądarki i OpenAI działają jako osobne fragmenty; pozostałe grupy pluginów pozostają zgrupowane.pnpm test extensions/<id>uruchamia ścieżkę jednego wbudowanego pluginu.- Pliki źródłowe z sąsiednimi testami są najpierw mapowane na te testy, a dopiero potem używane są szersze wzorce katalogów. Zmiany pomocnicze w
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersisrc/plugins/contractswykorzystują lokalny graf importów, aby uruchamiać testy importujące te pliki zamiast szeroko uruchamiać każdy fragment, gdy ścieżka zależności jest jednoznaczna. - Cele katalogów kontraktów są rozdzielane na odpowiadające im ścieżki kontraktów:
pnpm test src/channels/plugins/contractsuruchamia cztery konfiguracje kontraktów kanałów, apnpm test src/plugins/contractsuruchamia konfigurację kontraktów pluginów, ponieważ ogólne projektychannels/pluginswykluczającontracts/**. auto-replyjest podzielone na trzy dedykowane konfiguracje (core,top-level,reply), aby infrastruktura testowa odpowiedzi nie dominowała nad lżejszymi testami stanu, tokenów i funkcji pomocniczych najwyższego poziomu.- Wybrane pliki testowe
plugin-sdkicommandssą kierowane przez dedykowane lekkie ścieżki, które zachowują tylkotest/setup.ts, pozostawiając przypadki mocno zależne od środowiska uruchomieniowego w ich dotychczasowych ścieżkach. - Podstawowa konfiguracja Vitest używa domyślnie
pool: "threads"iisolate: false, a współdzielony nieizolowany mechanizm uruchamiający jest włączony we wszystkich konfiguracjach repozytorium. pnpm test:channelsuruchamiavitest.channels.config.ts.
Gateway i E2E
- Integracja z Gateway jest opcjonalna:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testlubpnpm test:gateway. pnpm test:e2e: zbiorczy zestaw E2E repozytorium =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: kompleksowe testy dymne Gateway (parowanie wielu instancji przez WS/HTTP/Node). Domyślnie używathreads+isolate: falsez adaptacyjną liczbą procesów roboczych wvitest.e2e.config.ts; dostosuj ją za pomocąOPENCLAW_E2E_WORKERS=<n>, a szczegółowe dzienniki włącz przezOPENCLAW_E2E_VERBOSE=1.pnpm test:live: testy dostawców na żywo (Claude/Minimax/DeepSeek/z.ai/itd., kontrolowane przez*.live.test.ts). Wymagają kluczy API orazLIVE=1(lubOPENCLAW_LIVE_TEST=1), aby nie zostały pominięte; szczegółowe dane wyjściowe włączaOPENCLAW_LIVE_TEST_QUIET=0.
Pełny zestaw Docker (pnpm test:docker:all)
Buduje współdzielony obraz testów na żywo, jednokrotnie pakuje OpenClaw jako archiwum tar npm, buduje lub ponownie wykorzystuje bazowy obraz wykonawczy Node/Git oraz obraz funkcjonalny, który instaluje to archiwum tar w /app, a następnie uruchamia ścieżki testów dymnych Docker za pomocą harmonogramu z wagami. scripts/package-openclaw-for-docker.mjs jest jedynym lokalnym i używanym w CI narzędziem pakującym oraz weryfikuje archiwum tar i plik dist/postinstall-inventory.json, zanim Docker ich użyje.
- Obraz bazowy (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): ścieżki instalatora, aktualizacji i zależności pluginów; montuje wcześniej zbudowane archiwum tar zamiast skopiowanych źródeł repozytorium. - Obraz funkcjonalny (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): ścieżki zwykłej funkcjonalności zbudowanej aplikacji. - Definicje ścieżek:
scripts/lib/docker-e2e-scenarios.mjs. Planista:scripts/lib/docker-e2e-plan.mjs. Wykonawca:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsongeneruje należący do harmonogramu plan CI (ścieżki, rodzaje obrazów, wymagania dotyczące pakietów i obrazów testów na żywo, scenariusze stanu, kontrole danych uwierzytelniających) bez budowania ani uruchamiania Docker.
Parametry harmonogramu (zmienne środowiskowe, wartości domyślne w nawiasach):
| Zmienna środowiskowa | Domyślnie | Przeznaczenie |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Miejsca na procesy. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Pula końcowa wrażliwa na dostawcę. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Limit zasobożernych ścieżek dostawców na żywo. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Limit ścieżek korzystających z zasobów npm. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Limit ścieżek korzystających z zasobów usług. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Limity zasobożernych ścieżek dla poszczególnych dostawców. |
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT |
1 | Węższe limity dla poszczególnych dostawców. |
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT |
- | Nadpisanie dla większych hostów. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Opóźnienie między uruchomieniami ścieżek, zapobiegające lokalnym spiętrzeniom tworzenia w demonie Docker. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 min) | Awaryjny limit czasu dla każdej ścieżki; wybrane ścieżki na żywo i końcowe używają bardziej restrykcyjnych limitów. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Ponowienia po przejściowych awariach dostawców na żywo. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
wyłączone | Wyświetla manifest ścieżek bez uruchamiania Docker. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Interwał wyświetlania stanu aktywnych ścieżek. |
OPENCLAW_DOCKER_ALL_TIMINGS |
włączone | Ponownie wykorzystuje .artifacts/docker-tests/lane-timings.json, aby najpierw uruchamiać najdłuższe ścieżki; ustaw 0, aby wyłączyć. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip uruchamia tylko deterministyczne/lokalne ścieżki, a only tylko ścieżki dostawców na żywo. Aliasy: pnpm test:docker:local:all, pnpm test:docker:live:all. Tryb wyłącznie na żywo łączy główne i końcowe ścieżki na żywo w jedną pulę uporządkowaną od najdłuższych, dzięki czemu koszyki dostawców grupują prace Claude/Codex/Gemini. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Limit czasu konfiguracji zaplecza CLI w Docker. |
Wzorzec nazw zmiennych środowiskowych dla limitów zasobów to OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (nazwa zasobu wielkimi literami, znaki niealfanumeryczne zastąpione przez _).
Inne zachowania: runner domyślnie wykonuje kontrolę wstępną Dockera, usuwa nieaktualne kontenery E2E OpenClaw, współdzieli pamięci podręczne narzędzi CLI dostawców między zgodnymi ścieżkami i po pierwszej awarii przestaje planować nowe ścieżki z puli, chyba że ustawiono OPENCLAW_DOCKER_ALL_FAIL_FAST=0. Jeśli jedna ścieżka przekracza efektywny limit wagi/zasobów na hoście o niskim poziomie równoległości, nadal może wystartować z pustej puli i działać samodzielnie do czasu zwolnienia zasobów. Dzienniki poszczególnych ścieżek, pliki summary.json i failures.json oraz pomiary czasu faz są zapisywane w .artifacts/docker-tests/<run-id>/; użyj pnpm test:docker:timings <summary.json>, aby sprawdzić wolne ścieżki, oraz pnpm test:docker:rerun <run-id|summary.json|failures.json>, aby wyświetlić niedrogie polecenia ukierunkowanego ponownego uruchomienia.
Istotne ścieżki Dockera
| Polecenie | Weryfikuje |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
Kontener źródłowego E2E oparty na Chromium z bezpośrednim CDP i izolowanym Gateway; migawki ról CDP z browser doctor --deep zawierają adresy URL odnośników, elementy klikalne wykryte na podstawie kursora, odwołania do ramek iframe oraz metadane ramek. |
pnpm test:docker:skill-install |
Instaluje spakowane archiwum tar w podstawowym runnerze Dockera z skills.install.allowUploadedArchives: false, rozpoznaje aktualny identyfikator umiejętności na podstawie wyszukiwania na żywo w ClawHub, instaluje za pomocą openclaw skills install oraz weryfikuje pliki SKILL.md, .clawhub/origin.json, .clawhub/lock.json i wynik skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Ukierunkowane testy na żywo backendu CLI; Gemini ma odpowiadające aliasy :resume i :mcp. |
pnpm test:docker:openwebui |
OpenClaw i Open WebUI w Dockerze: logowanie, sprawdzenie /api/models, uruchomienie rzeczywistego czatu przez serwer proxy za pośrednictwem /api/chat/completions. Wymaga działającego klucza modelu na żywo i pobiera zewnętrzny obraz; nie oczekuje się takiej stabilności w CI jak w przypadku zestawów testów jednostkowych/E2E. |
pnpm test:docker:mcp-channels |
Kontener Gateway ze wstępnie wypełnionymi danymi oraz kontener klienta uruchamiający openclaw mcp serve: wykrywanie kierowanych konwersacji, odczyt transkrypcji, metadane załączników, zachowanie kolejki zdarzeń na żywo, kierowanie wysyłania wychodzącego oraz powiadomienia o kanałach i uprawnieniach w stylu Claude przez rzeczywisty most stdio (asercja odczytuje bezpośrednio surowe ramki MCP ze stdio). |
pnpm test:docker:upgrade-survivor |
Instaluje spakowane archiwum tar na celowo zabrudzonym zestawie danych starego użytkownika, przeprowadza aktualizację pakietu i nieinteraktywne działanie narzędzia diagnostycznego bez aktywnych kluczy dostawcy/kanału, uruchamia Gateway w trybie local loopback oraz sprawdza, czy zachowane pozostają: agenci, konfiguracja kanałów, listy dozwolonych Pluginów, pliki obszaru roboczego i sesji, nieaktualny stan zależności starszego Pluginu, uruchamianie i stan RPC. |
pnpm test:docker:published-upgrade-survivor |
Domyślnie instaluje openclaw@latest, przygotowuje realistyczne pliki istniejącego użytkownika, konfiguruje za pomocą wbudowanej procedury openclaw config set, aktualizuje do spakowanego archiwum tar, uruchamia nieinteraktywne narzędzie diagnostyczne, zapisuje .artifacts/upgrade-survivor/summary.json oraz sprawdza /healthz, /readyz i stan RPC. Wartość bazową można zastąpić za pomocą OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, rozszerzyć macierz za pomocą OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS lub dodać zestawy danych scenariuszy przez OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues (obejmuje configured-plugin-installs i stale-source-plugin-shadow). Package Acceptance udostępnia je jako published_upgrade_survivor_baseline(s) / _scenarios i rozpoznaje metatokeny, takie jak last-stable-4 lub all-since-2026.4.23. |
pnpm test:docker:update-migration |
Mechanizm testowania przetrwania opublikowanej aktualizacji w scenariuszu plugin-deps-cleanup, domyślnie rozpoczynający od openclaw@2026.4.23. Przepływ pracy Update Migration rozszerza go o baselines=all-since-2026.4.23, aby wykazać czyszczenie zależności skonfigurowanych Pluginów poza pełnym CI wydania. |
pnpm test:docker:plugins |
Test dymny instalacji/aktualizacji dla ścieżki lokalnej, file:, pakietów rejestru npm z wyniesionymi zależnościami, ruchomych odwołań git, zestawów danych ClawHub, aktualizacji katalogu oraz włączania i inspekcji pakietu Claude. |
Lokalna bramka PR
Aby lokalnie sprawdzić możliwość scalenia/bramkę PR, uruchom:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Jeśli pnpm test sporadycznie zawiedzie na obciążonym hoście, uruchom go ponownie raz, zanim uznasz to za regresję, a następnie wyizoluj problem za pomocą pnpm test <path/to/test>. W przypadku hostów z ograniczoną pamięcią:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Narzędzia do analizy wydajności testów
pnpm test:perf:imports: włącza raportowanie czasu trwania importów i ich szczegółowego podziału w Vitest, nadal używając trasowania w ramach odpowiednich ścieżek dla jawnie wskazanych plików lub katalogów.pnpm test:perf:imports:changedogranicza to samo profilowanie do plików zmienionych względemorigin/main.pnpm test:perf:changed:bench -- --ref <git-ref>porównuje wydajność trasowanej ścieżki trybu zmian z natywnym uruchomieniem projektu głównego dla tej samej zatwierdzonej różnicy Git;pnpm test:perf:changed:bench -- --worktreemierzy wydajność bieżącego zestawu zmian w drzewie roboczym bez ich wcześniejszego zatwierdzania.pnpm test:perf:profile:mainzapisuje profil CPU dla głównego wątku Vitest (.artifacts/vitest-main-profile);pnpm test:perf:profile:runnerzapisuje profile CPU i sterty dla procesu uruchamiającego testy jednostkowe (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: uruchamia kolejno każdą końcową konfigurację pełnego zestawu Vitest oraz zapisuje pogrupowane dane o czasie trwania wraz z artefaktami JSON i dziennikami dla poszczególnych konfiguracji. Raporty pełnego zestawu domyślnie izolują pliki, aby zachowane grafy modułów i wstrzymania spowodowane przez GC z wcześniejszych plików nie obciążały późniejszych asercji; przekaż-- --no-isolatetylko podczas celowego profilowania kumulacji we współdzielonym procesie roboczym. Agent wydajności testów używa tych danych jako punktu odniesienia przed próbą usprawnienia powolnych testów.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonporównuje pogrupowane raporty po zmianie ukierunkowanej na wydajność.- Uruchomienia pełne, rozszerzeń i fragmentów zgodnych ze wzorcem dołączania aktualizują lokalne dane czasowe w
.artifacts/vitest-shard-timings.json; późniejsze uruchomienia całych konfiguracji używają tych czasów do równoważenia wolnych i szybkich fragmentów. Fragmenty CI zgodne ze wzorcem dołączania dodają nazwę fragmentu do klucza czasu, dzięki czemu czasy filtrowanych fragmentów pozostają widoczne bez zastępowania danych czasowych całej konfiguracji. UstawOPENCLAW_TEST_PROJECTS_TIMINGS=0, aby ignorować lokalny artefakt z danymi czasowymi.
Testy wydajnościowe
Opóźnienie modelu (scripts/bench-model.ts)
pnpm tsx scripts/bench-model.ts --runs 10Opcjonalne zmienne środowiskowe: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Domyślny monit: „Odpowiedz jednym słowem: ok. Bez interpunkcji ani dodatkowego tekstu.”
Uruchamianie 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 allUstawienia wstępne:
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: oba ustawienia wstępne łącznie
Dane wyjściowe obejmują sampleCount, średnią, p50, p95, minimum/maksimum, rozkład kodów wyjścia i sygnałów oraz maksymalne RSS dla każdego polecenia. --cpu-prof-dir / --heap-prof-dir zapisują profile V8 dla każdego uruchomienia.
Zapisane dane wyjściowe: pnpm test:startup:bench:smoke zapisuje .artifacts/cli-startup-bench-smoke.json; pnpm test:startup:bench:save zapisuje .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). Wzorzec zapisany w repozytorium: test/fixtures/cli-startup-bench.json, odświeżany przez pnpm test:startup:bench:update i porównywany przez pnpm test:startup:bench:check.
Uruchamianie Gateway (scripts/bench-gateway-startup.ts)
Domyślnie używa zbudowanego punktu wejścia CLI w dist/entry.js; najpierw uruchom pnpm build. Przekaż --entry scripts/run-node.mjs, aby zamiast tego wykonać pomiar źródłowego procesu uruchamiającego, i przechowuj te wyniki oddzielnie od wartości bazowych zbudowanego punktu wejścia.
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.jsonIdentyfikatory przypadków: default, skipChannels (pominięte uruchamianie kanałów), oneInternalHook, allInternalHooks, fiftyPlugins (50 Pluginów manifestu), fiftyStartupLazyPlugins (50 leniwie uruchamianych Pluginów manifestu).
Dane wyjściowe obejmują pierwsze dane wyjściowe procesu, /healthz, /readyz, czas wpisu dziennika o rozpoczęciu nasłuchiwania HTTP, czas wpisu dziennika o gotowości Gateway, czas CPU, współczynnik wykorzystania rdzenia CPU, maksymalne RSS, stertę, metryki śledzenia uruchamiania, opóźnienie pętli zdarzeń oraz szczegółowe metryki tabeli wyszukiwania Pluginów. Skrypt ustawia OPENCLAW_GATEWAY_STARTUP_TRACE=1 w środowisku podrzędnego Gateway.
/healthz wskazuje aktywność (serwer HTTP może odpowiadać). /readyz wskazuje gotowość do użycia (procesy pomocnicze Pluginów uruchamiania, kanały i krytyczne dla gotowości zadania po dołączeniu osiągnęły stan stabilny). Hooki uruchamiania są wywoływane asynchronicznie i nie są objęte gwarancją gotowości. Czas wpisu dziennika o gotowości jest wewnętrznym znacznikiem czasu Gateway, przydatnym do przypisywania czasu po stronie procesu, ale nie zastępuje zewnętrznego sprawdzania /readyz.
Podczas porównywania zmian używaj danych wyjściowych JSON lub --output. Użyj --cpu-prof-dir dopiero wtedy, gdy dane śledzenia wskazują na importowanie, kompilowanie lub operacje ograniczone mocą CPU, których nie można wyjaśnić samymi czasami poszczególnych faz.
Ponowne uruchamianie Gateway (scripts/bench-gateway-restart.ts)
Tylko macOS i Linux (używa SIGUSR1 do ponownych uruchomień wewnątrz procesu; w systemie Windows natychmiast kończy się niepowodzeniem). Obowiązuje ten sam domyślny zbudowany punkt wejścia i możliwość zastąpienia go przez --entry scripts/run-node.mjs, co podczas uruchamiania Gateway opisanego powyżej.
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1Identyfikatory przypadków: skipChannels, skipChannelsAcpxProbe (sonda uruchamiania ACPX włączona), skipChannelsNoAcpxProbe (sonda wyłączona), default, fiftyPlugins.
Dane wyjściowe obejmują kolejne /healthz, kolejne /readyz, czas przestoju, czas osiągnięcia gotowości po ponownym uruchomieniu, CPU, RSS, metryki śledzenia uruchamiania dla procesu zastępczego oraz metryki śledzenia ponownego uruchamiania dotyczące obsługi sygnału, oczekiwania na zakończenie aktywnych zadań, faz zamykania, kolejnego uruchomienia, czasu osiągnięcia gotowości i migawek pamięci. Skrypt ustawia OPENCLAW_GATEWAY_STARTUP_TRACE=1 i OPENCLAW_GATEWAY_RESTART_TRACE=1.
Użyj tego testu wydajnościowego, gdy zmiana dotyczy sygnalizowania ponownego uruchamiania, procedur obsługi zamykania, uruchamiania po ponownym uruchomieniu, zamykania procesów pomocniczych, przekazywania usługi lub gotowości po ponownym uruchomieniu. Zacznij od skipChannels, aby odizolować mechanikę Gateway od uruchamiania kanałów; użyj default lub przypadków z dużą liczbą Pluginów dopiero wtedy, gdy wąski przypadek wyjaśnia ścieżkę ponownego uruchamiania. Metryki śledzenia są wskazówkami pomagającymi przypisać przyczyny, a nie rozstrzygnięciami — zmianę dotyczącą ponownego uruchamiania oceniaj na podstawie wielu próbek, odpowiadającego jej zakresu właściciela, zachowania /healthz//readyz oraz widocznej dla użytkownika umowy ponownego uruchamiania.
Kompleksowy test wdrażania (Docker)
Opcjonalny; potrzebny tylko do uproszczonych testów wdrażania w kontenerze. Pełny przebieg zimnego startu w czystym kontenerze Linux:
scripts/e2e/onboard-docker.shSteruje interaktywnym kreatorem przez pseudoterminal, weryfikuje pliki konfiguracji, obszaru roboczego i sesji, a następnie uruchamia Gateway i wykonuje openclaw health.
Uproszczony test importowania QR (Docker)
Zapewnia, że utrzymywana funkcja pomocnicza środowiska wykonawczego QR ładuje się w obsługiwanych środowiskach Docker Node (domyślnie Node 24, zgodność z Node 22):
pnpm test:docker:qr