16 KiB
| read_when | summary | title | x-i18n | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Як запускати тести локально (`vitest`) і коли використовувати режими force/coverage | Тести |
|
-
Повний набір для тестування (набори, live, Docker): Testing
-
pnpm test:force: завершує будь-який завислий процес gateway, що утримує типовий control port, а потім запускає повний набір Vitest з ізольованим портом gateway, щоб тести сервера не конфліктували із запущеним екземпляром. Використовуйте це, коли попередній запуск gateway залишив зайнятим порт 18789. -
pnpm test:coverage: запускає unit-набір із V8 coverage (черезvitest.unit.config.ts). Це перевірка unit coverage для завантажених файлів, а не coverage всіх файлів у всьому репозиторії. Пороги становлять 70% для lines/functions/statements і 55% для branches. Оскількиcoverage.allмає значення false, перевірка вимірює файли, завантажені набором unit coverage, замість того щоб вважати непокритими всі файли вихідного коду з розділених lane-ів. -
pnpm test:coverage:changed: запускає unit coverage лише для файлів, змінених відносноorigin/main. -
pnpm test:changed: розгортає змінені git-шляхи у scoped Vitest lane-и, коли diff зачіпає лише routable файли вихідного коду/тестів. Зміни config/setup, як і раніше, повертаються до нативного запуску root projects, щоб зміни в wiring за потреби повторно запускали ширший набір. -
pnpm changed:lanes: показує архітектурні lane-и, активовані diff-ом відносноorigin/main. -
pnpm check:changed: запускає розумну перевірку changed gate для diff-а відносноorigin/main. Вона запускає core-роботи з core test lane-ами, роботу extensions — з extension test lane-ами, зміни лише в тестах — тільки з test typecheck/tests, розширює зміни в публічному SDK Plugin-ів або plugin-contract до одного проходу валідації extensions і залишає version bumps лише в release metadata на цільових перевірках version/config/root-dependency. -
pnpm test: маршрутизує явні цілі file/directory через scoped Vitest lane-и. Запуски без цілі використовують фіксовані shard-групи та розгортаються до leaf config-ів для локального паралельного виконання; група extensions завжди розгортається до shard config-ів для кожного extension/plugin, а не до одного великого процесу root-project. -
Повні запуски та shard-запуски extensions оновлюють локальні дані таймінгів у
.artifacts/vitest-shard-timings.json; наступні запуски використовують ці таймінги для балансування повільних і швидких shard-ів. УстановітьOPENCLAW_TEST_PROJECTS_TIMINGS=0, щоб ігнорувати локальний артефакт таймінгів. -
Вибрані тестові файли
plugin-sdkіcommandsтепер маршрутизуються через окремі легкі lane-и, які зберігають лишеtest/setup.ts, залишаючи runtime-важкі випадки на їхніх наявних lane-ах. -
Вибрані файли вихідного коду helper-ів
plugin-sdkіcommandsтакож зіставляютьpnpm test:changedз явними сусідніми тестами в цих легких lane-ах, тож невеликі правки helper-ів не спричиняють повторного запуску важких наборів із підтримкою runtime. -
auto-replyтепер також розділено на три окремі config-и (core,top-level,reply), тож harness reply не домінує над легшими тестами top-level status/token/helper. -
Базовий config Vitest тепер типово використовує
pool: "threads"іisolate: false, а спільний non-isolated runner увімкнено в config-ах репозиторію. -
pnpm test:channelsзапускаєvitest.channels.config.ts. -
pnpm test:extensionsіpnpm test extensionsзапускають усі shard-и extensions/Plugin-ів. Важкі channel Plugin-и, browser Plugin і OpenAI запускаються як окремі shard-и; інші групи Plugin-ів залишаються пакетованими. Використовуйтеpnpm test extensions/<id>для одного lane вбудованого Plugin-а. -
pnpm test:perf:imports: вмикає звітність Vitest про import-duration + import-breakdown, водночас зберігаючи scoped lane routing для явних цілей file/directory. -
pnpm test:perf:imports:changed: те саме профілювання import-ів, але лише для файлів, змінених відносноorigin/main. -
pnpm test:perf:changed:bench -- --ref <git-ref>виконує benchmark маршрутизованого шляху в режимі changed проти нативного запуску root-project для того самого закоміченого git diff-а. -
pnpm test:perf:changed:bench -- --worktreeвиконує benchmark поточного набору змін у worktree без попереднього коміту. -
pnpm test:perf:profile:main: записує CPU profile для головного потоку Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: записує CPU + heap profiles для unit runner-а (.artifacts/vitest-runner-profile). -
pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: послідовно запускає кожен leaf config Vitest повного набору й записує згруповані дані тривалості разом з JSON/log артефактами для кожного config-а. Агент продуктивності тестів використовує це як базову лінію перед спробами виправити повільні тести. -
pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json: порівнює згруповані звіти після зміни, зосередженої на продуктивності. -
Інтеграція Gateway: opt-in через
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testабоpnpm test:gateway. -
pnpm test:e2e: запускає smoke-тести gateway end-to-end (multi-instance WS/HTTP/node pairing). Типово використовуєthreads+isolate: falseз адаптивними worker-ами уvitest.e2e.config.ts; налаштовуйте черезOPENCLAW_E2E_WORKERS=<n>і встановлюйтеOPENCLAW_E2E_VERBOSE=1для докладних логів. -
pnpm test:live: запускає live-тести провайдерів (minimax/zai). Потребує API-ключів іLIVE=1(або специфічного для провайдера*_LIVE_TEST=1) для зняття пропуску. -
pnpm test:docker:all: один раз збирає спільний image для live-тестів і Docker E2E image, а потім запускає Docker smoke lane-и зOPENCLAW_SKIP_DOCKER_BUILD=1через weighted scheduler.OPENCLAW_DOCKER_ALL_PARALLELISM=<n>керує слотами процесів і типово дорівнює 10;OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM=<n>керує tail pool, чутливим до провайдерів, і також типово дорівнює 10. Обмеження важких lane-ів типово становлятьOPENCLAW_DOCKER_ALL_LIVE_LIMIT=4,OPENCLAW_DOCKER_ALL_NPM_LIMIT=4іOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=5; для потужніших хостів використовуйтеOPENCLAW_DOCKER_ALL_WEIGHT_LIMITабоOPENCLAW_DOCKER_ALL_DOCKER_LIMIT. Запуски lane-ів за замовчуванням зсуваються на 2 секунди, щоб уникнути локальних піків створення в Docker daemon; перевизначайте черезOPENCLAW_DOCKER_ALL_START_STAGGER_MS=<ms>. Runner припиняє планувати нові pooled lane-и після першої помилки, якщо не встановленоOPENCLAW_DOCKER_ALL_FAIL_FAST=0, а кожен lane має тайм-аут 120 хвилин, який можна перевизначити черезOPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS. Логи для кожного lane-а записуються в.artifacts/docker-tests/<run-id>/. -
pnpm test:docker:openwebui: запускає Dockerized OpenClaw + Open WebUI, входить через Open WebUI, перевіряє/api/models, а потім виконує реальний проксійований чат через/api/chat/completions. Потребує придатного ключа live model (наприклад, OpenAI у~/.profile), завантажує зовнішній image Open WebUI і не очікується як CI-стабільний, на відміну від звичайних unit/e2e наборів. -
pnpm test:docker:mcp-channels: запускає контейнер Gateway із початковим наповненням і другий контейнер клієнта, який запускаєopenclaw mcp serve, а потім перевіряє виявлення маршрутованих розмов, читання транскриптів, метадані вкладень, поведінку черги live events, маршрутизацію вихідних надсилань і сповіщення про канал + дозволи в стилі Claude через реальний міст stdio. Перевірка сповіщень Claude читає сирі stdio MCP-кадри напряму, щоб smoke-тест відображав те, що міст реально надсилає.
Локальний PR gate
Для локальних перевірок перед приземленням PR/gate запускайте:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Якщо pnpm test дає flaky-результат на навантаженому хості, перезапустіть його один раз, перш ніж вважати це регресією, а потім ізолюйте через pnpm test <path/to/test>. Для хостів з обмеженою пам’яттю використовуйте:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark затримки моделей (локальні ключі)
Скрипт: scripts/bench-model.ts
Використання:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- Необов’язкові env:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Типова підказка: “Reply with a single word: ok. No punctuation or extra text.”
Останній запуск (2025-12-31, 20 запусків):
- minimax median 1279ms (min 1114, max 2431)
- opus median 2454ms (min 1224, max 3170)
Benchmark запуску 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.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
Preset-и:
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: обидва preset-и
Вивід містить sampleCount, avg, p50, p95, min/max, розподіл exit-code/signal і зведення max RSS для кожної команди. Необов’язкові --cpu-prof-dir / --heap-prof-dir записують V8 profiles для кожного запуску, тому захоплення таймінгів і profiles використовує той самий harness.
Угоди щодо збереженого виводу:
pnpm test:startup:bench:smokeзаписує цільовий smoke-артефакт у.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:saveзаписує артефакт повного набору в.artifacts/cli-startup-bench-all.jsonз використаннямruns=5іwarmup=1pnpm test:startup:bench:updateоновлює fixture baseline, що зберігається в репозиторії, уtest/fixtures/cli-startup-bench.json, використовуючиruns=5іwarmup=1
Fixture, що зберігається в репозиторії:
test/fixtures/cli-startup-bench.json- Оновлення через
pnpm test:startup:bench:update - Порівняння поточних результатів із fixture через
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker необов’язковий; це потрібно лише для containerized smoke-тестів onboarding.
Повний cold-start flow у чистому Linux-контейнері:
scripts/e2e/onboard-docker.sh
Цей скрипт керує інтерактивним майстром через pseudo-tty, перевіряє файли config/workspace/session, а потім запускає gateway і виконує openclaw health.
Smoke-тест імпорту QR (Docker)
Гарантує, що підтримуваний runtime helper для QR завантажується в підтримуваних Docker Node runtime-ах (Node 24 за замовчуванням, Node 22 сумісний):
pnpm test:docker:qr