Testing and CI

Testler

Agent varsayılanı

Agent oturumları, yalnızca güvenilir kaynaklar için ve mevcut bağımlılık kurulumu hazır olduğunda birkaç odaklı testi ve düşük maliyetli statik denetimi yerel olarak çalıştırır. Güvenilmeyen depo araçlarını asla yerel olarak çalıştırmayın. Daha büyük paketler, tür denetimi/lint dağılımlı değişiklik kapıları, derlemeler, Docker, paket hatları, E2E, canlı kanıt ve platformlar arası doğrulama Crabbox aracılığıyla uzaktan çalıştırılır. Güvenilir bakım sorumlularının ağır kanıtları için varsayılan olarak Blacksmith Testbox kullanılır. Yapılandırılmış Testbox iş akışı kimlik bilgilerini yüklediğinden, güvenilmeyen katkıcı veya çatallama kodu bunun yerine gizli bilgisiz çatallama CI'ını ya da arındırılmış doğrudan AWS Crabbox'ı kullanmalıdır.

Öngörülen işler için önceden ısıtma yapmayın. İlk ağır komut hazır olduğunda arka ucu gecikmeli olarak edinin, döndürülen tbx_... kimliğini sonraki ağır komutlar için yeniden kullanın, her çalıştırmada mevcut çalışma kopyasını eşitleyin ve devretmeden önce durdurun.

İlk başarılı yeniden kullanımdan sonra sarmalayıcı, kiralamanın temel, bağımlılık ve Testbox iş akışı parmak izini .crabbox/testbox-leases/ altında kaydeder. Yalnızca kaynak düzenlemeleri, ısıtılmış kutuyu yeniden kullanmaya devam eder. Birleştirme temelinin, kilit dosyasının, paket yöneticisi girdisinin, sarmalayıcının veya Testbox iş akışının değişmesi kapalı hata verir ve yeni bir kiralama gerektirir. Her çalıştırma yine de mevcut çalışma kopyasını eşitler. OPENCLAW_TESTBOX_ALLOW_STALE=1 yalnızca kasıtlı tanılama içindir, sürüm kanıtı için değildir.

Aşağıdaki yerel test komutları, insan iş akışları ve sınırlı agent kanıtı içindir. Uzak sağlayıcının kullanılamadığı bildirilmelidir; bu durum, geniş bir yerel kapıyı sessizce çalıştırma izni değildir.

Güvenilmeyen ağır kanıt için --provider aws ile gecikmeli olarak ısıtın. Her çalıştırma CRABBOX_ENV_ALLOW=CI değerini ayarlamalı, --provider aws --no-hydrate seçeneğini geçirmeli ve bağımlılıkları kurmadan veya testleri çalıştırmadan önce yeni bir geçici uzak HOME kullanmalıdır. Bu güvenilmeyen kaynağa özel olarak yeni ısıtılmış bir kiralama kullanın; güvenilir veya daha önce kimlik bilgileri yüklenmiş bir kiralamayı asla yeniden kullanmayın. Temiz ve güvenilir bir main çalışma kopyasından kurulu güvenilir bir Crabbox ikili dosyası başlatın ve yalnızca uzak PR'ı --fresh-pr ile getirin; güvenilmeyen çalışma kopyasının sarmalayıcısını veya yapılandırmasını asla yerel olarak çalıştırmayın. CRABBOX_AWS_INSTANCE_PROFILE ayarını kaldırın ve çözümlenen aws.instanceProfile boş değilse kapalı hata verin. Herhangi bir kurulum/testten önce, IMDSv2 belirteci gerektirmek, IAM kimlik bilgileri uç noktasının 404 döndürdüğünü kanıtlamak ve uzak git rev-parse HEAD değerinin incelenmiş PR başlığının tam SHA değeriyle eşleştiğini doğrulamak için güvenilir mutlak yollu araçları kullanın. Kiralamayı bu SHA'ya bağlayın ve başlık değiştiğinde durdurup yeniden ısıtın. Temiz main üzerinden güvenilir scripts/crabbox-untrusted-bootstrap.sh dosyasını --fresh-pr ile birlikte yükleyin; sabitlenmiş Node/pnpm'i kurar, SHA'yı ve paket yöneticisi sabitlemesini doğrular, HOME ortamını yalıtır, bağımlılıkları kurar ve ardından istenen testi çalıştırır. Aracı, rol bulunmadığını veya uzak PR'ın mevcut olmadığını kanıtlayamazsa gizli bilgisiz çatallama CI'ını kullanın. hydrate-github, --no-sync veya kimlik bilgileri yüklenmiş bir Testbox iş akışı kullanmayın. Tüm CRABBOX_TAILSCALE* geçersiz kılmalarını kaldırın, --network public --tailscale=false değerini zorunlu kılın, çıkış düğümü/LAN bayraklarını temizleyin ve herhangi bir betiği yüklemeden önce crabbox inspect çıktısının Tailscale durumu olmadan genel ağ bağlantısı bildirmesini zorunlu kılın.

Rutin yerel sıra

  1. Değişen kapsamlı Vitest kanıtı için pnpm test:changed.
  2. Tek bir dosya, dizin veya açık hedef için pnpm test <path-or-filter>.
  3. Yalnızca tam yerel Vitest paketine kasıtlı olarak ihtiyaç duyduğunuzda pnpm test.

Bir Codex çalışma ağacında veya bağlantılı/seyrek çalışma kopyasında agentlar doğrudan yerel pnpm test* / pnpm check* / pnpm crabbox:run kullanımından kaçınır:

  • Hazır bağımlılıklarla sınırlı odaklı kanıt: node scripts/run-vitest.mjs <path-or-filter>.
  • Önce sınıflandırmalı değişiklik denetimi: node scripts/check-changed.mjs; yalnızca doküman, değişikliksiz ve küçük meta veri planları, bağımlılıklar hazır olduğunda yerel kalırken ağır veya bağımlılıkları eksik planlar Testbox'a devredilir.
  • Açıkça tutulan kiralamayla geniş kanıt: pnpm'in Testbox içinde çalışması için 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.
  • Sarmalayıcının son exitCode değeri ve zamanlama JSON'u komut sonucudur. Devredilmiş bir Blacksmith GitHub Actions çalıştırması, Testbox canlı tutma eyleminin dışından durdurulduğu için başarılı bir SSH komutundan sonra cancelled gösterebilir; bunu hata olarak değerlendirmeden önce sarmalayıcı özetini ve komut çıktısını kontrol edin.
  • OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: pnpm check:changed ve hedefli pnpm test ... gibi komutlar için ağır denetim serileştirmesini Git ortak dizini yerine mevcut çalışma ağacında tutar. Bunu yalnızca bağlantılı çalışma ağaçlarında bağımsız denetimleri kasıtlı olarak çalıştırdığınız yüksek kapasiteli yerel ana makinelerde kullanın.

Temel komutlar

Test sarmalayıcı çalıştırmaları kısa bir [test] passed|failed|skipped ... in ... özetiyle sona erer; Vitest'in kendi süre satırı parça başına ayrıntı olarak kalır.

Komut Yaptığı işlem
pnpm test Açık dosya/dizin hedefleri, kapsamlı Vitest hatları üzerinden yönlendirilir. Hedefsiz çalıştırmalar tam paket kanıtıdır: sabit parça grupları yerel paralel çalıştırma için yaprak yapılandırmalara genişletilir ve beklenen parça dağılımı başlamadan önce yazdırılır. Uzantı grubu, tek bir dev kök proje işlemi yerine her zaman uzantı başına parça yapılandırmalarına genişletilir.
pnpm test:changed Düşük maliyetli akıllı değiştirilmiş test çalıştırması: doğrudan test düzenlemelerinden, kardeş *.test.ts dosyalarından, açık kaynak eşlemelerinden ve yerel içe aktarma grafiğinden kesin hedefler. Geniş/yapılandırma/paket değişiklikleri, kesin testlerle eşlenmedikçe atlanır.
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed Açık geniş değiştirilmiş test çalıştırması; bir test düzeneği/yapılandırması/paket düzenlemesinin Vitest'in daha geniş değiştirilmiş test davranışına geri dönmesi gerektiğinde kullanın.
pnpm test:force Yapılandırılmış OpenClaw gateway bağlantı noktasını (varsayılan 18789) boşaltır, ardından sunucu testlerinin çalışan bir örnekle çakışmaması için tam paketi yalıtılmış bir gateway bağlantı noktasıyla çalıştırır.
pnpm test:coverage Varsayılan birim hattı (vitest.unit.config.ts) için bilgilendirici bir V8 kapsam raporu üretir; hiçbir kapsam eşiği zorunlu tutulmaz.
pnpm test:coverage:changed Yalnızca origin/main tarihinden beri değişen dosyalar için birim kapsamı.
pnpm changed:lanes origin/main ile karşılaştırılan farkın tetiklediği mimari hatları gösterir.
pnpm check:changed Çalıştırmayı seçmeden önce değişen hatları sınıflandırır. Yalnızca doküman, değişikliksiz ve küçük meta veri planları, bağımlılıklar hazır olduğunda yerel kalır; tür denetimi/lint dağılımlı, diğer ağır hatlı veya yerel bağımlılıkları eksik planlar CI dışında Crabbox/Testbox'a devredilir. Vitest'i çalıştırmaz; test kanıtı için pnpm test:changed veya pnpm test <target> kullanın.

Paylaşılan test durumu ve işlem yardımcıları

  • src/test-utils/openclaw-test-state.ts: bir test yalıtılmış bir HOME, OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, yapılandırma fikstürü, çalışma alanı, agent dizini veya kimlik doğrulama profili deposu gerektirdiğinde Vitest'ten kullanın.
  • pnpm test:env-mutations:report: HOME, OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, OPENCLAW_WORKSPACE_DIR veya ilgili ortam anahtarlarını doğrudan değiştiren testlerin/düzeneklerin engellemesiz raporu. Paylaşılan test durumu yardımcısı için geçiş adaylarını bulmak üzere kullanın.
  • test/helpers/openclaw-test-instance.ts: çalışan bir Gateway, CLI ortamı, günlük yakalama ve temizliği tek bir yerde gerektiren işlem düzeyinde E2E testleri.
  • scripts/lib/docker-e2e-image.sh kaynağını kullanan Docker/Bash E2E hatları, docker_e2e_test_state_shell_b64 <label> <scenario> değerini konteynere geçirebilir ve scripts/lib/openclaw-e2e-instance.sh ile kodunu çözebilir; çoklu ana dizin betikleri docker_e2e_test_state_function_b64 değerini geçirebilir ve her akışta openclaw_test_state_create <label> <scenario> çağrısı yapabilir. node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --json, kaynak olarak kullanılabilir bir ana makine ortam dosyası yazar (create öncesindeki --, daha yeni Node çalışma zamanlarının --env-file değerini bir Node bayrağı olarak değerlendirmesini önler). Gateway başlatan hatlar; giriş noktası çözümlemesi, sahte OpenAI başlatması, ön plan/arka plan başlatması, hazır olma yoklamaları, durum ortamı dışa aktarımı, günlük dökümleri ve işlem temizliği için scripts/lib/openclaw-e2e-instance.sh kaynağını kullanabilir.

Control UI, TUI ve uzantı hatları

  • Sahte Control UI E2E: pnpm test:ui:e2e, Vite Control UI'ını başlatan ve sahte bir Gateway WebSocket'e karşı gerçek bir Chromium sayfasını yönlendiren Vitest + Playwright hattını çalıştırır. Testler ui/src/**/*.e2e.test.ts içinde; paylaşılan sahte nesneler/denetimler ui/src/test-helpers/control-ui-e2e.ts içinde bulunur. pnpm test:e2e bu hattı içerir. Hedefli kanıt dâhil olmak üzere ajan çalıştırmaları varsayılan olarak Testbox/Crabbox kullanır; node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.ts yalnızca açıkça belirtilmiş bir yerel geri dönüş için kullanılmalıdır.
  • TUI PTY testleri: node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.ts, hızlı sahte arka uç PTY hattını çalıştırır. OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1 veya pnpm tui:pty:test:watch --mode local, yalnızca harici model uç noktasını taklit eden daha yavaş tui --local duman testini çalıştırır. Ham ANSI anlık görüntülerini değil, kararlı görünür metni veya fikstür çağrılarını doğrulayın.
  • pnpm test:extensions ve pnpm test extensions, tüm uzantı/Plugin parçalarını çalıştırır. Ağır kanal Pluginleri, tarayıcı Plugini ve OpenAI özel parçalar olarak çalışır; diğer Plugin grupları toplu kalır. pnpm test extensions/<id>, tek bir paketlenmiş Plugin hattını çalıştırır.
  • Kardeş testlere sahip kaynak dosyalar, daha geniş dizin globlarına geri dönmeden önce ilgili kardeş teste eşlenir. src/channels/plugins/contracts/test-helpers, src/plugin-sdk/test-helpers ve src/plugins/contracts altındaki yardımcı düzenlemeleri, bağımlılık yolu kesin olduğunda her parçayı geniş kapsamda çalıştırmak yerine içe aktaran testleri çalıştırmak için yerel bir içe aktarma grafiği kullanır.
  • Sözleşme dizini hedefleri kendi sözleşme hatlarına dağıtılır: genel channels/plugins projeleri contracts/** öğesini hariç tuttuğundan, pnpm test src/channels/plugins/contracts dört kanal sözleşmesi yapılandırmasını ve pnpm test src/plugins/contracts Plugin sözleşmeleri yapılandırmasını çalıştırır.
  • auto-reply, yanıt test düzeneğinin daha hafif üst düzey durum/token/yardımcı testlerine baskın gelmemesi için üç özel yapılandırmaya (core, top-level, reply) ayrılır.
  • Seçilen plugin-sdk ve commands test dosyaları, yalnızca test/setup.ts öğesini tutan özel hafif hatlar üzerinden yönlendirilir; çalışma zamanı açısından ağır durumlar mevcut hatlarında bırakılır.
  • Temel Vitest yapılandırması, repo yapılandırmalarının tamamında paylaşılan yalıtılmamış çalıştırıcı etkin olacak şekilde varsayılan olarak pool: "threads" ve isolate: false değerlerini kullanır.
  • pnpm test:channels, vitest.channels.config.ts öğesini çalıştırır.

Gateway ve E2E

  • Gateway entegrasyonu isteğe bağlıdır: OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm test veya pnpm test:gateway.
  • pnpm test:e2e: repo E2E toplamı = pnpm test:e2e:gateway && pnpm test:ui:e2e.
  • pnpm test:e2e:gateway: Gateway uçtan uca duman testleri (çoklu örnek WS/HTTP/Node eşleştirmesi). vitest.e2e.config.ts içindeki uyarlanabilir işçilerle varsayılan olarak threads + isolate: false kullanılır; OPENCLAW_E2E_WORKERS=<n> ile ayarlayın, ayrıntılı günlükler için OPENCLAW_E2E_VERBOSE=1 kullanın.
  • pnpm test:live: sağlayıcı canlı testleri (Claude/Minimax/DeepSeek/z.ai/vb., *.live.test.ts tarafından denetlenir). Atlamayı kaldırmak için API anahtarları ve LIVE=1 (veya OPENCLAW_LIVE_TEST=1) gerekir; ayrıntılı çıktı için OPENCLAW_LIVE_TEST_QUIET=0 kullanın.

Tam Docker paketi (pnpm test:docker:all)

Paylaşılan canlı test imajını oluşturur, OpenClaw'ı bir npm tarball'ı olarak bir kez paketler, temel bir Node/Git çalıştırıcı imajı ile bu tarball'ı /app içine yükleyen işlevsel bir imajı oluşturur/yeniden kullanır ve ardından Docker duman testi hatlarını ağırlıklı bir zamanlayıcı üzerinden çalıştırır. scripts/package-openclaw-for-docker.mjs, tek yerel/CI paketleyicisidir ve Docker tarball'ı kullanmadan önce tarball'ı ve dist/postinstall-inventory.json öğesini doğrular.

  • Temel imaj (OPENCLAW_DOCKER_E2E_BARE_IMAGE): yükleyici/güncelleme/Plugin bağımlılığı hatları; kopyalanmış repo kaynakları yerine önceden oluşturulmuş tarball'ı bağlar.
  • İşlevsel imaj (OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): normal, derlenmiş uygulama işlevselliği hatları.
  • Hat tanımları: scripts/lib/docker-e2e-scenarios.mjs. Planlayıcı: scripts/lib/docker-e2e-plan.mjs. Yürütücü: scripts/test-docker-all.mjs.
  • node scripts/test-docker-all.mjs --plan-json, Docker'ı oluşturmadan veya çalıştırmadan zamanlayıcının sahip olduğu CI planını (hatlar, imaj türleri, paket/canlı imaj gereksinimleri, durum senaryoları, kimlik bilgisi denetimleri) üretir.

Zamanlama ayarları (ortam değişkenleri, varsayılanlar parantez içinde):

Ortam değişkeni Varsayılan Amaç
OPENCLAW_DOCKER_ALL_PARALLELISM 10 İşlem yuvaları.
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM 10 Sağlayıcıya duyarlı kuyruk havuzu.
OPENCLAW_DOCKER_ALL_LIVE_LIMIT 9 Ağır canlı sağlayıcı hattı sınırı.
OPENCLAW_DOCKER_ALL_NPM_LIMIT 5 npm kaynağı hattı sınırı.
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT 7 Hizmet kaynağı hattı sınırı.
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT 4 Sağlayıcı başına ağır hat sınırları.
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT 1 Sağlayıcı başına daha dar sınırlar.
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT - Daha büyük ana makineler için geçersiz kılma.
OPENCLAW_DOCKER_ALL_START_STAGGER_MS 2000 Hat başlangıçları arasındaki gecikme; yerel Docker daemon oluşturma fırtınalarını önler.
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS 7,200,000 (120 dk) Hat başına geri dönüş zaman aşımı; seçili canlı/kuyruk hatları daha sıkı sınırlar kullanır.
OPENCLAW_DOCKER_ALL_LIVE_RETRIES 1 Geçici canlı sağlayıcı hataları için yeniden denemeler.
OPENCLAW_DOCKER_ALL_DRY_RUN kapalı Docker'ı çalıştırmadan hat manifestini yazdırır.
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS 30000 Etkin hat durumu yazdırma aralığı.
OPENCLAW_DOCKER_ALL_TIMINGS açık En uzundan ilk sıralama için .artifacts/docker-tests/lane-timings.json öğesini yeniden kullanır; devre dışı bırakmak için 0 olarak ayarlayın.
OPENCLAW_DOCKER_ALL_LIVE_MODE - Yalnızca deterministik/yerel hatlar için skip, yalnızca canlı sağlayıcı hatları için only. Diğer adlar: pnpm test:docker:local:all, pnpm test:docker:live:all. Yalnızca canlı modu, ana ve kuyruk canlı hatlarını tek bir en uzundan ilk havuzda birleştirir; böylece sağlayıcı kovaları Claude/Codex/Gemini işlerini birlikte paketler.
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS 180 CLI arka ucu Docker kurulum zaman aşımı.

Kaynak sınırları için ortam değişkeni kalıbı OPENCLAW_DOCKER_ALL_&lt;RESOURCE&gt;_LIMIT şeklindedir (kaynak adı büyük harfe dönüştürülür, alfasayısal olmayan karakterler _ biçiminde daraltılır).

Diğer davranışlar: çalıştırıcı varsayılan olarak Docker ön kontrollerini yapar, eski OpenClaw E2E konteynerlerini temizler, uyumlu hatlar arasında sağlayıcı CLI araç önbelleklerini paylaşır ve OPENCLAW_DOCKER_ALL_FAIL_FAST=0 ayarlanmadığı sürece ilk hatadan sonra yeni havuzlanmış hatları zamanlamayı durdurur. Düşük paralellikli bir ana bilgisayarda bir hat etkin ağırlık/kaynak sınırını aşarsa yine de boş bir havuzdan başlayabilir ve kapasiteyi serbest bırakana kadar tek başına çalışabilir. Hat başına günlükler, summary.json, failures.json ve aşama zamanlamaları .artifacts/docker-tests/<run-id>/ altında yazılır; yavaş hatları incelemek için pnpm test:docker:timings <summary.json>, düşük maliyetli hedefli yeniden çalıştırma komutlarını yazdırmak için pnpm test:docker:rerun <run-id|summary.json|failures.json> kullanın.

Dikkate değer Docker hatları

Komut Doğruladıkları
pnpm test:docker:browser-cdp-snapshot Ham CDP + yalıtılmış Gateway içeren Chromium destekli kaynak E2E konteyneri; browser doctor --deep CDP rol anlık görüntüleri bağlantı URL'lerini, imleçle tıklanabilir hâle getirilen öğeleri, iframe referanslarını ve çerçeve meta verilerini içerir.
pnpm test:docker:skill-install Paketlenmiş tarball'u skills.install.allowUploadedArchives: false ile yalın bir Docker çalıştırıcısına kurar, canlı ClawHub aramasından güncel bir skill slug'ı çözümler, openclaw skills install aracılığıyla kurar ve SKILL.md, .clawhub/origin.json, .clawhub/lock.json ile skills info --json öğelerini doğrular.
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp Odaklı CLI arka uç canlı yoklamaları; Gemini için eşleşen :resume ve :mcp takma adları vardır.
pnpm test:docker:openwebui Docker ortamındaki OpenClaw + Open WebUI: oturum açar, /api/models öğesini denetler, /api/chat/completions üzerinden gerçekten proxy'lenen bir sohbet çalıştırır. Kullanılabilir bir canlı model anahtarı gerektirir ve harici bir imaj çeker; birim/e2e paketleri gibi CI açısından kararlı olması beklenmez.
pnpm test:docker:mcp-channels Önceden verilerle doldurulmuş Gateway konteyneri ve openclaw mcp serve başlatan bir istemci konteyneri: yönlendirilmiş konuşma keşfi, transkript okumaları, ek meta verileri, canlı olay kuyruğu davranışı, giden gönderim yönlendirmesi ve gerçek stdio köprüsü üzerinden Claude tarzı kanal + izin bildirimleri (doğrulama ham stdio MCP çerçevelerini doğrudan okur).
pnpm test:docker:upgrade-survivor Paketlenmiş tarball'u eski bir kullanıcının değiştirilmiş fikstürü üzerine kurar; canlı sağlayıcı/kanal anahtarları olmadan paket güncellemesini ve etkileşimsiz doctor'ı çalıştırır; geri döngü Gateway'i başlatır; aracılar/kanal yapılandırması/Plugin izin listeleri/çalışma alanı/oturum dosyaları/eski Plugin bağımlılık durumu/başlangıç/RPC durumunun korunduğunu denetler.
pnpm test:docker:published-upgrade-survivor Varsayılan olarak openclaw@latest kurar, gerçekçi mevcut kullanıcı dosyaları oluşturur, yerleşik bir openclaw config set tarifiyle yapılandırır, paketlenmiş tarball'a günceller, etkileşimsiz doctor'ı çalıştırır, .artifacts/upgrade-survivor/summary.json yazar ve /healthz, /readyz ile RPC durumunu denetler. OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC ile geçersiz kılın, OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS ile bir matrisi genişletin veya OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues ile senaryo fikstürleri ekleyin (configured-plugin-installs ve stale-source-plugin-shadow dâhildir). Paket Kabulü bunları published_upgrade_survivor_baseline(s) / _scenarios olarak sunar ve last-stable-4 veya all-since-2026.4.23 gibi meta belirteçleri çözümler.
pnpm test:docker:update-migration Varsayılan olarak openclaw@2026.4.23 sürümünden başlayan, plugin-deps-cleanup senaryosundaki yayımlanmış yükseltmeden sağ çıkma düzeneği. Update Migration iş akışı, Tam Sürüm CI dışında yapılandırılmış Plugin bağımlılık temizliğini kanıtlamak için bunu baselines=all-since-2026.4.23 ile genişletir.
pnpm test:docker:plugins Yerel yol, file:, üst düzeye taşınmış bağımlılıklara sahip npm kayıt defteri paketleri, hareketli git referansları, ClawHub fikstürleri, pazar yeri güncellemeleri ve Claude paketini etkinleştirme/inceleme için kurulum/güncelleme temel kontrolü.

Yerel PR geçidi

Yerel PR birleştirme/geçit kontrolleri için şunları çalıştırın:

  • pnpm check:changed
  • pnpm check
  • pnpm check:test-types
  • pnpm build
  • pnpm test
  • pnpm check:docs

pnpm test yoğun bir ana bilgisayarda kararsızlık gösterirse bunu gerileme olarak değerlendirmeden önce bir kez yeniden çalıştırın, ardından pnpm test <path/to/test> ile yalıtın. Belleği kısıtlı ana bilgisayarlar için:

  • OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test
  • OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed

Test performansı araçları

  • pnpm test:perf:imports: Açık dosya/dizin hedefleri için kapsamlı hat yönlendirmesini kullanmaya devam ederken Vitest içe aktarma süresi + içe aktarma dökümü raporlamasını etkinleştirir. pnpm test:perf:imports:changed aynı profil oluşturmayı origin/main tarihinden beri değişen dosyalarla sınırlar.
  • pnpm test:perf:changed:bench -- --ref <git-ref>, aynı kaydedilmiş git farkı için yönlendirilmiş değişiklik modundaki yolu yerel kök proje çalıştırmasıyla karşılaştırmalı olarak ölçer; pnpm test:perf:changed:bench -- --worktree, önce kaydetmeden mevcut çalışma ağacındaki değişiklik kümesini karşılaştırmalı olarak ölçer.
  • pnpm test:perf:profile:main, Vitest ana iş parçacığı için bir CPU profili yazar (.artifacts/vitest-main-profile); pnpm test:perf:profile:runner, birim çalıştırıcısı için CPU + yığın profilleri yazar (.artifacts/vitest-runner-profile).
  • pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: Her tam paket Vitest yaprak yapılandırmasını seri olarak çalıştırır ve gruplandırılmış süre verilerinin yanı sıra yapılandırma başına JSON/günlük yapıtları yazar. Tam paket raporları, önceki dosyalardan kalan modül grafiklerinin ve GC duraklamalarının sonraki doğrulamalara yüklenmemesi için varsayılan olarak dosyaları yalıtır; -- --no-isolate seçeneğini yalnızca paylaşılan çalışan birikimini kasıtlı olarak profillerken geçirin. Test Performansı Aracısı, yavaş test düzeltmelerini denemeden önce bunu temel değer olarak kullanır. pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json, performans odaklı bir değişiklikten sonra gruplandırılmış raporları karşılaştırır.
  • Tam, uzantı ve içerme deseni parça çalıştırmaları, .artifacts/vitest-shard-timings.json içindeki yerel zamanlama verilerini günceller; sonraki tüm yapılandırma çalıştırmaları yavaş ve hızlı parçaları dengelemek için bu zamanlamaları kullanır. İçerme deseni CI parçaları, parça adını zamanlama anahtarına ekler; bu, filtrelenmiş parça zamanlamalarını tüm yapılandırmanın zamanlama verilerinin yerine geçirmeden görünür tutar. Yerel zamanlama yapıtını yok saymak için OPENCLAW_TEST_PROJECTS_TIMINGS=0 ayarlayın.

Karşılaştırmalı ölçümler

Model gecikmesi (scripts/bench-model.ts)
bash
pnpm tsx scripts/bench-model.ts --runs 10

İsteğe bağlı ortam değişkenleri: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Varsayılan istem: "Tek bir kelimeyle yanıt verin: ok. Noktalama işareti veya ek metin kullanmayın."

CLI başlangıcı (scripts/bench-cli-startup.ts)
bash
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 all

Ön ayarlar:

  • startup: --version, --help, health, health --json, status --json, status
  • real: 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.port
  • all: her iki ön ayarın birleşimi

Çıktı, komut başına sampleCount, ortalama, p50, p95, min/maks, çıkış kodu/sinyal dağılımı ve maksimum RSS'yi içerir. --cpu-prof-dir / --heap-prof-dir, her çalıştırma için V8 profilleri yazar.

Kaydedilen çıktı: pnpm test:startup:bench:smoke, .artifacts/cli-startup-bench-smoke.json dosyasını; pnpm test:startup:bench:save ise .artifacts/cli-startup-bench-all.json dosyasını (runs=5 warmup=1) yazar. Depoya eklenmiş sabit veri: test/fixtures/cli-startup-bench.json; pnpm test:startup:bench:update ile yenilenir ve pnpm test:startup:bench:check ile karşılaştırılır.

Gateway başlatma (scripts/bench-gateway-startup.ts)

Varsayılan olarak dist/entry.js konumundaki derlenmiş CLI girişini kullanır; önce pnpm build komutunu çalıştırın. Bunun yerine kaynak çalıştırıcısını ölçmek için --entry scripts/run-node.mjs iletin ve bu sonuçları derlenmiş giriş temel değerlerinden ayrı tutun.

bash
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.json

Durum kimlikleri: default, skipChannels (kanal başlatma atlanır), oneInternalHook, allInternalHooks, fiftyPlugins (50 manifest Plugin'i), fiftyStartupLazyPlugins (başlatma sırasında geç yüklenen 50 manifest Plugin'i).

Çıktı; ilk süreç çıktısını, /healthz, /readyz, HTTP dinleme günlüğü süresini, Gateway hazır günlüğü süresini, CPU süresini, CPU çekirdek oranını, maksimum RSS'yi, heap'i, başlatma izleme metriklerini, olay döngüsü gecikmesini ve Plugin arama tablosu ayrıntı metriklerini içerir. Betik, alt Gateway ortamında OPENCLAW_GATEWAY_STARTUP_TRACE=1 değerini ayarlar.

/healthz, canlılık durumudur (HTTP sunucusu yanıt verebilir). /readyz, kullanılabilir hazır olma durumudur (başlatma Plugin yardımcı süreçleri, kanallar ve bağlama sonrasında hazır olma açısından kritik işler tamamlanmıştır). Başlatma kancaları eşzamansız olarak dağıtılır ve hazır olma garantisinin parçası değildir. Hazır günlüğü süresi, Gateway'in dahili zaman damgasıdır; süreç tarafındaki ilişkilendirme için kullanışlıdır ancak harici /readyz yoklamasının yerini tutmaz.

Değişiklikleri karşılaştırırken JSON çıktısını veya --output kullanın. --cpu-prof-dir seçeneğini yalnızca izleme çıktısı, tek başına aşama zamanlamalarının açıklayamadığı içe aktarma, derleme veya CPU'ya bağlı bir işi gösterdikten sonra kullanın.

Gateway yeniden başlatma (scripts/bench-gateway-restart.ts)

Yalnızca macOS ve Linux'ta kullanılabilir (süreç içi yeniden başlatmalar için SIGUSR1 kullanır; Windows'ta hemen başarısız olur). Yukarıdaki Gateway başlatmayla aynı derlenmiş giriş varsayılanını ve --entry scripts/run-node.mjs geçersiz kılma seçeneğini kullanır.

bash
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1

Durum kimlikleri: skipChannels, skipChannelsAcpxProbe (ACPX başlatma yoklaması açık), skipChannelsNoAcpxProbe (yoklama kapalı), default, fiftyPlugins.

Çıktı; sonraki /healthz, sonraki /readyz, kesinti süresi, yeniden başlatma hazır olma zamanlaması, CPU, RSS, yeni süreç için başlatma izleme metrikleri ve sinyal işleme, etkin işlerin tamamlanmasını bekleme, kapatma aşamaları, sonraki başlatma, hazır olma zamanlaması ve bellek anlık görüntüleri için yeniden başlatma izleme metriklerini içerir. Betik, OPENCLAW_GATEWAY_STARTUP_TRACE=1 ve OPENCLAW_GATEWAY_RESTART_TRACE=1 değerlerini ayarlar.

Bir değişiklik yeniden başlatma sinyallemesini, kapatma işleyicilerini, yeniden başlatma sonrası başlatmayı, yardımcı süreç kapatmayı, hizmet devrini veya yeniden başlatma sonrası hazır olma durumunu etkiliyorsa bu karşılaştırmalı testi kullanın. Gateway mekaniklerini kanal başlatmadan ayırmak için skipChannels ile başlayın; default veya Plugin ağırlıklı durumları yalnızca dar kapsamlı durum yeniden başlatma yolunu açıkladıktan sonra kullanın. İzleme metrikleri ilişkilendirme ipuçlarıdır, kesin hükümler değildir — bir yeniden başlatma değişikliğini birden fazla örnek, eşleşen sahip kapsamı, /healthz//readyz davranışı ve kullanıcıya görünür yeniden başlatma sözleşmesine göre değerlendirin.

İlk kurulum E2E'si (Docker)

İsteğe bağlıdır; yalnızca kapsayıcı içinde çalışan ilk kurulum duman testleri için gereklidir. Temiz bir Linux kapsayıcısındaki tam soğuk başlatma akışı:

bash
scripts/e2e/onboard-docker.sh

Etkileşimli sihirbazı bir sözde tty üzerinden yönlendirir, yapılandırma/çalışma alanı/oturum dosyalarını doğrular, ardından Gateway'i başlatır ve openclaw health komutunu çalıştırır.

QR içe aktarma duman testi (Docker)

Bakımı yapılan QR çalışma zamanı yardımcısının desteklenen Docker Node çalışma zamanlarında (varsayılan Node 24, uyumlu Node 22) yüklendiğini doğrular:

bash
pnpm test:docker:qr

İlgili

Was this useful?
On this page

On this page