Testing and CI

परीक्षण

एजेंट डिफ़ॉल्ट

एजेंट सत्र केवल विश्वसनीय स्रोत के लिए और मौजूदा निर्भरता इंस्टॉलेशन तैयार होने पर स्थानीय रूप से एक/कुछ केंद्रित परीक्षण और कम लागत वाली स्थिर जाँच चलाते हैं। अविश्वसनीय रिपॉज़िटरी टूलिंग को कभी भी स्थानीय रूप से निष्पादित न करें। बड़े सूट, typecheck/lint फ़ैन-आउट वाले परिवर्तित गेट, बिल्ड, Docker, पैकेज लेन, E2E, लाइव प्रमाण और क्रॉस-प्लेटफ़ॉर्म सत्यापन Crabbox के माध्यम से दूरस्थ रूप से चलते हैं। विश्वसनीय मेंटेनर के भारी प्रमाण के लिए डिफ़ॉल्ट Blacksmith Testbox है। कॉन्फ़िगर किया गया Testbox वर्कफ़्लो क्रेडेंशियल हाइड्रेट करता है, इसलिए अविश्वसनीय योगदानकर्ता या फ़ोर्क कोड को इसके बजाय सीक्रेट-रहित फ़ोर्क CI या सैनिटाइज़ किया हुआ प्रत्यक्ष AWS Crabbox उपयोग करना चाहिए।

अनुमानित कार्य के लिए पहले से वार्म-अप न करें। जब पहला भारी कमांड तैयार हो, तब बैकएंड को लेज़ी रूप से प्राप्त करें, बाद के भारी कमांड के लिए लौटाई गई tbx_... आईडी का पुनः उपयोग करें, प्रत्येक रन पर वर्तमान चेकआउट सिंक करें और हैंडऑफ़ से पहले उसे रोकें।

पहले सफल पुनः उपयोग के बाद, रैपर लीज़ के बेस, निर्भरता और Testbox वर्कफ़्लो फ़िंगरप्रिंट को .crabbox/testbox-leases/ के अंतर्गत रिकॉर्ड करता है। केवल स्रोत में किए गए संपादन वार्म किए गए बॉक्स का पुनः उपयोग जारी रखते हैं। परिवर्तित मर्ज बेस, लॉकफ़ाइल, पैकेज-मैनेजर इनपुट, रैपर या Testbox वर्कफ़्लो बंद स्थिति में विफल होता है और इसके लिए नई लीज़ आवश्यक होती है। प्रत्येक रन फिर भी वर्तमान चेकआउट को सिंक करता है। OPENCLAW_TESTBOX_ALLOW_STALE=1 केवल जानबूझकर किए जाने वाले निदान के लिए है, रिलीज़ प्रमाण के लिए नहीं।

नीचे दिए गए स्थानीय परीक्षण कमांड मानवीय वर्कफ़्लो और सीमित एजेंट प्रमाण के लिए हैं। दूरस्थ प्रदाता की अनुपलब्धता की रिपोर्ट करना आवश्यक है; यह व्यापक स्थानीय गेट को चुपचाप चलाने की अनुमति नहीं है।

अविश्वसनीय भारी प्रमाण के लिए, --provider aws के साथ लेज़ी रूप से वार्म करें। प्रत्येक रन को CRABBOX_ENV_ALLOW=CI सेट करना, --provider aws --no-hydrate पास करना और निर्भरताएँ इंस्टॉल करने या परीक्षण चलाने से पहले एक नए अस्थायी दूरस्थ HOME का उपयोग करना आवश्यक है। उस अविश्वसनीय स्रोत के लिए समर्पित नई वार्म की गई लीज़ का उपयोग करें; किसी विश्वसनीय या पहले हाइड्रेट की गई लीज़ का कभी पुनः उपयोग न करें। स्वच्छ विश्वसनीय main चेकआउट से इंस्टॉल किया गया विश्वसनीय Crabbox बाइनरी लॉन्च करें और केवल दूरस्थ PR को --fresh-pr के साथ फ़ेच करें; अविश्वसनीय चेकआउट के रैपर या कॉन्फ़िग को कभी स्थानीय रूप से निष्पादित न करें। CRABBOX_AWS_INSTANCE_PROFILE को अनसेट करें और तब तक बंद स्थिति में विफल हों, जब तक समाधान किया गया aws.instanceProfile खाली न हो। किसी भी इंस्टॉल/परीक्षण से पहले, IMDSv2 टोकन आवश्यक बनाने, IAM क्रेडेंशियल एंडपॉइंट द्वारा 404 लौटाना प्रमाणित करने और यह सत्यापित करने के लिए विश्वसनीय निरपेक्ष-पथ टूल का उपयोग करें कि दूरस्थ git rev-parse HEAD पूर्ण समीक्षित PR हेड SHA के बराबर है। लीज़ को उस SHA से बाँधें और हेड बदलने पर उसे रोककर फिर से वार्म करें। स्वच्छ main से विश्वसनीय scripts/crabbox-untrusted-bootstrap.sh को --fresh-pr के साथ अपलोड करें; यह पिन किए गए Node/pnpm को इंस्टॉल करता है, SHA और पैकेज-मैनेजर पिन को सत्यापित करता है, HOME को पृथक करता है, निर्भरताएँ इंस्टॉल करता है और फिर अनुरोधित परीक्षण निष्पादित करता है। यदि ब्रोकर कोई भूमिका न होना प्रमाणित नहीं कर सकता या कोई दूरस्थ PR मौजूद नहीं है, तो सीक्रेट-रहित फ़ोर्क CI का उपयोग करें। hydrate-github, --no-sync या क्रेडेंशियल-हाइड्रेटेड Testbox वर्कफ़्लो का उपयोग न करें। सभी CRABBOX_TAILSCALE* ओवरराइड अनसेट करें, --network public --tailscale=false बाध्य करें, एग्ज़िट-नोड/LAN फ़्लैग साफ़ करें और कोई स्क्रिप्ट अपलोड करने से पहले crabbox inspect से बिना किसी Tailscale स्थिति वाली सार्वजनिक नेटवर्किंग की रिपोर्ट करना आवश्यक बनाएँ।

नियमित स्थानीय क्रम

  1. परिवर्तित-स्कोप Vitest प्रमाण के लिए pnpm test:changed
  2. एक फ़ाइल, डायरेक्टरी या स्पष्ट लक्ष्य के लिए pnpm test <path-or-filter>
  3. केवल तभी pnpm test, जब आपको जानबूझकर पूर्ण स्थानीय Vitest सूट की आवश्यकता हो।

Codex वर्कट्री या लिंक किए गए/स्पार्स चेकआउट में, एजेंट प्रत्यक्ष स्थानीय pnpm test* / pnpm check* / pnpm crabbox:run से बचते हैं:

  • तैयार निर्भरताओं के साथ सीमित केंद्रित प्रमाण: node scripts/run-vitest.mjs <path-or-filter>
  • पहले वर्गीकृत करने वाली परिवर्तित जाँच: node scripts/check-changed.mjs; केवल दस्तावेज़, कोई परिवर्तन नहीं और छोटी मेटाडेटा योजनाएँ निर्भरताएँ तैयार होने पर स्थानीय रहती हैं, जबकि भारी या निर्भरता-रहित योजनाएँ Testbox को सौंप दी जाती हैं।
  • स्पष्ट रखी गई लीज़ का व्यापक प्रमाण: 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, ताकि pnpm Testbox के भीतर चले।
  • रैपर का अंतिम exitCode और टाइमिंग JSON कमांड का परिणाम हैं। सफल SSH कमांड के बाद सौंपा गया Blacksmith GitHub Actions रन cancelled दिखा सकता है, क्योंकि Testbox को कीपअलाइव एक्शन के बाहर से रोका जाता है; इसे विफलता मानने से पहले रैपर सारांश और कमांड आउटपुट जाँचें।
  • OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: pnpm check:changed और लक्षित pnpm test ... जैसे कमांड के लिए भारी-जाँच क्रमबद्धता को Git कॉमन डायरेक्टरी के बजाय वर्तमान वर्कट्री के भीतर रखता है। इसका उपयोग केवल उच्च-क्षमता वाले स्थानीय होस्ट पर करें, जब आप जानबूझकर लिंक की गई वर्कट्री में स्वतंत्र जाँच चलाते हैं।

मुख्य कमांड

परीक्षण रैपर रन एक संक्षिप्त [test] passed|failed|skipped ... in ... सारांश के साथ समाप्त होते हैं; Vitest की अपनी अवधि पंक्ति प्रति-शार्ड विवरण बनी रहती है।

कमांड यह क्या करता है
pnpm test स्पष्ट फ़ाइल/डायरेक्टरी लक्ष्य स्कोप किए गए Vitest लेन से होकर जाते हैं। लक्ष्य-रहित रन पूर्ण-सूट प्रमाण हैं: स्थानीय समानांतर निष्पादन के लिए निश्चित शार्ड समूह लीफ़ कॉन्फ़िग में विस्तृत होते हैं और शुरू होने से पहले अपेक्षित शार्ड फ़ैन-आउट प्रिंट होता है। एक्सटेंशन समूह हमेशा एक विशाल रूट-प्रोजेक्ट प्रक्रिया के बजाय प्रति-एक्सटेंशन शार्ड कॉन्फ़िग में विस्तृत होता है।
pnpm test:changed कम लागत वाला स्मार्ट परिवर्तित-परीक्षण रन: प्रत्यक्ष परीक्षण संपादनों, सिबलिंग *.test.ts फ़ाइलों, स्पष्ट स्रोत मैपिंग और स्थानीय इंपोर्ट ग्राफ़ से सटीक लक्ष्य। व्यापक/कॉन्फ़िग/पैकेज परिवर्तन तब तक छोड़ दिए जाते हैं, जब तक वे सटीक परीक्षणों से मैप न हों।
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed स्पष्ट व्यापक परिवर्तित-परीक्षण रन; इसका उपयोग तब करें, जब किसी परीक्षण हार्नेस/कॉन्फ़िग/पैकेज संपादन को Vitest के व्यापक परिवर्तित-परीक्षण व्यवहार पर वापस जाना चाहिए।
pnpm test:force कॉन्फ़िगर किया गया OpenClaw Gateway पोर्ट (डिफ़ॉल्ट 18789) मुक्त करता है, फिर पृथक Gateway पोर्ट के साथ पूर्ण सूट चलाता है, ताकि सर्वर परीक्षण किसी चल रहे इंस्टेंस से न टकराएँ।
pnpm test:coverage डिफ़ॉल्ट यूनिट लेन (vitest.unit.config.ts) के लिए सूचनात्मक V8 कवरेज रिपोर्ट उत्सर्जित करता है; कोई कवरेज सीमा लागू नहीं की जाती।
pnpm test:coverage:changed origin/main के बाद से परिवर्तित फ़ाइलों के लिए केवल यूनिट कवरेज।
pnpm changed:lanes origin/main के विरुद्ध डिफ़ द्वारा ट्रिगर किए गए आर्किटेक्चरल लेन दिखाता है।
pnpm check:changed निष्पादन चुनने से पहले परिवर्तित लेन को वर्गीकृत करता है। केवल दस्तावेज़, कोई परिवर्तन नहीं और छोटी मेटाडेटा योजनाएँ निर्भरताएँ तैयार होने पर स्थानीय रहती हैं; typecheck/lint फ़ैन-आउट, अन्य भारी लेन या अनुपलब्ध स्थानीय निर्भरताओं वाली योजनाएँ CI के बाहर Crabbox/Testbox को सौंप दी जाती हैं। Vitest नहीं चलाता; परीक्षण प्रमाण के लिए pnpm test:changed या pnpm test <target> का उपयोग करें।

साझा परीक्षण स्थिति और प्रक्रिया सहायक

  • src/test-utils/openclaw-test-state.ts: Vitest से इसका उपयोग तब करें, जब किसी परीक्षण को पृथक HOME, OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, कॉन्फ़िग फ़िक्स्चर, वर्कस्पेस, एजेंट डायरेक्टरी या ऑथ-प्रोफ़ाइल स्टोर की आवश्यकता हो।
  • pnpm test:env-mutations:report: ऐसे परीक्षणों/हार्नेस की नॉन-ब्लॉकिंग रिपोर्ट, जो HOME, OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, OPENCLAW_WORKSPACE_DIR या संबंधित env कुंजियों को सीधे बदलते हैं। साझा परीक्षण-स्थिति सहायक के लिए माइग्रेशन उम्मीदवार खोजने हेतु इसका उपयोग करें।
  • test/helpers/openclaw-test-instance.ts: एक ही स्थान पर चल रहे Gateway, CLI env, लॉग कैप्चर और क्लीनअप की आवश्यकता वाले प्रक्रिया-स्तरीय E2E परीक्षण।
  • scripts/lib/docker-e2e-image.sh को सोर्स करने वाले Docker/Bash E2E लेन कंटेनर में docker_e2e_test_state_shell_b64 <label> <scenario> पास कर सकते हैं और उसे scripts/lib/openclaw-e2e-instance.sh से डीकोड कर सकते हैं; मल्टी-होम स्क्रिप्ट docker_e2e_test_state_function_b64 पास कर सकती हैं और प्रत्येक प्रवाह में openclaw_test_state_create <label> <scenario> को कॉल कर सकती हैं। node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --json सोर्स की जा सकने वाली होस्ट env फ़ाइल लिखता है (create से पहले का -- नए Node रनटाइम को --env-file को Node फ़्लैग मानने से रोकता है)। Gateway लॉन्च करने वाले लेन एंट्रीपॉइंट रिज़ॉल्यूशन, मॉक OpenAI स्टार्टअप, फ़ोरग्राउंड/बैकग्राउंड लॉन्च, तत्परता जाँच, स्थिति env एक्सपोर्ट, लॉग डंप और प्रक्रिया क्लीनअप के लिए scripts/lib/openclaw-e2e-instance.sh को सोर्स कर सकते हैं।

Control UI, TUI और एक्सटेंशन लेन

  • मॉक किया गया Control UI E2E: pnpm test:ui:e2e Vitest + Playwright लेन चलाता है, जो Vite Control UI शुरू करता है और मॉक किए गए Gateway WebSocket के विरुद्ध वास्तविक Chromium पेज संचालित करता है। परीक्षण ui/src/**/*.e2e.test.ts में हैं; साझा मॉक/नियंत्रण ui/src/test-helpers/control-ui-e2e.ts में हैं। pnpm test:e2e में यह लेन शामिल है। लक्षित प्रमाण सहित, एजेंट रन डिफ़ॉल्ट रूप से Testbox/Crabbox का उपयोग करते हैं; केवल स्पष्ट स्थानीय फ़ॉलबैक के लिए 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 का उपयोग करें।
  • TUI PTY परीक्षण: node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.ts तेज़ नकली-बैकएंड PTY लेन चलाता है। OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1 या pnpm tui:pty:test:watch --mode local धीमा tui --local स्मोक चलाता है, जो केवल बाहरी मॉडल एंडपॉइंट को मॉक करता है। अपरिष्कृत ANSI स्नैपशॉट के बजाय स्थिर दृश्यमान टेक्स्ट या फ़िक्स्चर कॉल का अभिकथन करें।
  • pnpm test:extensions और pnpm test extensions सभी एक्सटेंशन/Plugin शार्ड चलाते हैं। भारी चैनल Plugin, ब्राउज़र Plugin और OpenAI समर्पित शार्ड के रूप में चलते हैं; अन्य Plugin समूह बैच में रहते हैं। pnpm test extensions/<id> एक बंडल किया गया Plugin लेन चलाता है।
  • सिबलिंग परीक्षणों वाली स्रोत फ़ाइलें, व्यापक डायरेक्टरी ग्लॉब पर फ़ॉलबैक करने से पहले, उस सिबलिंग से मैप होती हैं। src/channels/plugins/contracts/test-helpers, src/plugin-sdk/test-helpers, और src/plugins/contracts के अंतर्गत हेल्पर संपादन, निर्भरता पथ सटीक होने पर हर शार्ड को व्यापक रूप से चलाने के बजाय आयात करने वाले परीक्षणों को चलाने के लिए स्थानीय आयात ग्राफ़ का उपयोग करते हैं।
  • कॉन्ट्रैक्ट डायरेक्टरी लक्ष्य अपनी कॉन्ट्रैक्ट लेन में विभाजित होते हैं: pnpm test src/channels/plugins/contracts चार चैनल कॉन्ट्रैक्ट कॉन्फ़िग चलाता है और pnpm test src/plugins/contracts Plugin कॉन्ट्रैक्ट कॉन्फ़िग चलाता है, क्योंकि सामान्य channels/plugins प्रोजेक्ट contracts/** को बाहर रखते हैं।
  • auto-reply तीन समर्पित कॉन्फ़िग (core, top-level, reply) में विभाजित होता है, ताकि रिप्लाई हार्नेस हल्के शीर्ष-स्तरीय स्टेटस/टोकन/हेल्पर परीक्षणों पर हावी न हो।
  • चयनित plugin-sdk और commands परीक्षण फ़ाइलें समर्पित हल्की लेन से रूट होती हैं, जो केवल test/setup.ts को रखती हैं और रनटाइम-भारी मामलों को उनकी मौजूदा लेन पर छोड़ती हैं।
  • बेस Vitest कॉन्फ़िग डिफ़ॉल्ट रूप से pool: "threads" और isolate: false का उपयोग करता है, और साझा गैर-पृथक रनर सभी रिपॉज़िटरी कॉन्फ़िग में सक्षम रहता है।
  • pnpm test:channels vitest.channels.config.ts चलाता है।

Gateway और E2E

  • Gateway इंटीग्रेशन वैकल्पिक रूप से सक्षम होता है: OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm test या pnpm test:gateway
  • pnpm test:e2e: रिपॉज़िटरी E2E समुच्चय = pnpm test:e2e:gateway && pnpm test:ui:e2e
  • pnpm test:e2e:gateway: Gateway एंड-टू-एंड स्मोक परीक्षण (मल्टी-इंस्टेंस WS/HTTP/Node पेयरिंग)। vitest.e2e.config.ts में अनुकूली वर्करों के साथ डिफ़ॉल्ट रूप से threads + isolate: false; OPENCLAW_E2E_WORKERS=<n> से समायोजित करें, और OPENCLAW_E2E_VERBOSE=1 से विस्तृत लॉग सक्षम करें।
  • pnpm test:live: प्रोवाइडर लाइव परीक्षण (Claude/Minimax/DeepSeek/z.ai/आदि, *.live.test.ts द्वारा नियंत्रित)। स्किप हटाने के लिए API कुंजियाँ और LIVE=1 (या OPENCLAW_LIVE_TEST=1) आवश्यक हैं; OPENCLAW_LIVE_TEST_QUIET=0 से विस्तृत आउटपुट सक्षम करें।

पूर्ण Docker सुइट (pnpm test:docker:all)

साझा लाइव-परीक्षण इमेज बनाता है, OpenClaw को एक बार npm टारबॉल के रूप में पैक करता है, एक न्यूनतम Node/Git रनर इमेज और उस टारबॉल को /app में इंस्टॉल करने वाली कार्यात्मक इमेज बनाता/पुनः उपयोग करता है, फिर भारित शेड्यूलर के माध्यम से Docker स्मोक लेन चलाता है। scripts/package-openclaw-for-docker.mjs एकमात्र स्थानीय/CI पैकेज पैकर है और Docker द्वारा उपयोग किए जाने से पहले टारबॉल तथा dist/postinstall-inventory.json को सत्यापित करता है।

  • न्यूनतम इमेज (OPENCLAW_DOCKER_E2E_BARE_IMAGE): इंस्टॉलर/अपडेट/Plugin-निर्भरता लेन; कॉपी किए गए रिपॉज़िटरी स्रोतों के बजाय पहले से बने टारबॉल को माउंट करती है।
  • कार्यात्मक इमेज (OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): सामान्य निर्मित-ऐप कार्यक्षमता लेन।
  • लेन परिभाषाएँ: scripts/lib/docker-e2e-scenarios.mjs। प्लानर: scripts/lib/docker-e2e-plan.mjs। एक्ज़ीक्यूटर: scripts/test-docker-all.mjs
  • node scripts/test-docker-all.mjs --plan-json Docker बनाए या चलाए बिना शेड्यूलर-स्वामित्व वाली CI योजना (लेन, इमेज प्रकार, पैकेज/लाइव-इमेज आवश्यकताएँ, स्टेट परिदृश्य, क्रेडेंशियल जाँच) उत्सर्जित करता है।

शेड्यूलिंग नियंत्रण (पर्यावरण चर, कोष्ठकों में डिफ़ॉल्ट):

पर्यावरण चर डिफ़ॉल्ट उद्देश्य
OPENCLAW_DOCKER_ALL_PARALLELISM 10 प्रोसेस स्लॉट।
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM 10 प्रोवाइडर-संवेदी टेल पूल।
OPENCLAW_DOCKER_ALL_LIVE_LIMIT 9 भारी लाइव-प्रोवाइडर लेन सीमा।
OPENCLAW_DOCKER_ALL_NPM_LIMIT 5 npm-संसाधन लेन सीमा।
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT 7 सेवा-संसाधन लेन सीमा।
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT 4 प्रत्येक प्रोवाइडर की भारी-लेन सीमाएँ।
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT 1 प्रत्येक प्रोवाइडर के लिए अधिक संकीर्ण सीमाएँ।
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT - बड़े होस्ट के लिए ओवरराइड।
OPENCLAW_DOCKER_ALL_START_STAGGER_MS 2000 लेन प्रारंभ होने के बीच विलंब, स्थानीय Docker डेमन निर्माण-तूफ़ानों से बचाता है।
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS 7,200,000 (120 मिनट) प्रति-लेन फ़ॉलबैक टाइमआउट; चयनित लाइव/टेल लेन अधिक कड़ी सीमाओं का उपयोग करती हैं।
OPENCLAW_DOCKER_ALL_LIVE_RETRIES 1 अस्थायी लाइव-प्रोवाइडर विफलताओं के लिए पुनः प्रयास।
OPENCLAW_DOCKER_ALL_DRY_RUN बंद Docker चलाए बिना लेन मैनिफ़ेस्ट प्रिंट करें।
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS 30000 सक्रिय-लेन स्टेटस प्रिंट अंतराल।
OPENCLAW_DOCKER_ALL_TIMINGS चालू सबसे-लंबी-पहले क्रमबद्धता के लिए .artifacts/docker-tests/lane-timings.json का पुनः उपयोग करें; अक्षम करने के लिए 0 पर सेट करें।
OPENCLAW_DOCKER_ALL_LIVE_MODE - केवल निर्धारक/स्थानीय लेन के लिए skip, केवल लाइव-प्रोवाइडर लेन के लिए only। उपनाम: pnpm test:docker:local:all, pnpm test:docker:live:all। केवल-लाइव मोड मुख्य और टेल लाइव लेन को एक सबसे-लंबी-पहले पूल में मिलाता है, ताकि प्रोवाइडर बकेट Claude/Codex/Gemini कार्य को साथ में पैक करें।
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS 180 CLI बैकएंड Docker सेटअप टाइमआउट।

संसाधन सीमाओं के लिए पर्यावरण चर पैटर्न OPENCLAW_DOCKER_ALL_&lt;RESOURCE&gt;_LIMIT है (संसाधन नाम अपरकेस में, गैर-अल्फ़ान्यूमेरिक वर्ण _ में संकुचित)।

अन्य व्यवहार: रनर डिफ़ॉल्ट रूप से Docker की प्रीफ़्लाइट जाँच करता है, पुराने OpenClaw E2E कंटेनर साफ़ करता है, संगत लेन के बीच प्रोवाइडर CLI टूल कैश साझा करता है, और पहली विफलता के बाद नई पूल की गई लेन शेड्यूल करना बंद कर देता है, जब तक OPENCLAW_DOCKER_ALL_FAIL_FAST=0 सेट न हो। यदि कम-समानांतरता वाले होस्ट पर कोई लेन प्रभावी भार/संसाधन सीमा से अधिक हो जाती है, तो भी वह खाली पूल से शुरू होकर क्षमता जारी करने तक अकेले चल सकती है। प्रति-लेन लॉग, summary.json, failures.json, और चरण समय-निर्धारण .artifacts/docker-tests/<run-id>/ के अंतर्गत लिखे जाते हैं; धीमी लेन की जाँच के लिए pnpm test:docker:timings <summary.json> और कम लागत वाले लक्षित पुनः-रन कमांड प्रिंट करने के लिए pnpm test:docker:rerun <run-id|summary.json|failures.json> का उपयोग करें।

उल्लेखनीय Docker लेन

कमांड सत्यापित करता है
pnpm test:docker:browser-cdp-snapshot रॉ CDP + पृथक Gateway वाला Chromium-समर्थित स्रोत E2E कंटेनर; browser doctor --deep CDP भूमिका स्नैपशॉट में लिंक URL, कर्सर द्वारा क्लिक-योग्य बनाए गए तत्व, iframe संदर्भ और फ़्रेम मेटाडेटा शामिल होते हैं।
pnpm test:docker:skill-install skills.install.allowUploadedArchives: false वाले न्यूनतम Docker रनर में पैक किया गया tarball इंस्टॉल करता है, लाइव ClawHub खोज से वर्तमान skill slug का समाधान करता है, openclaw skills install के माध्यम से इंस्टॉल करता है, और SKILL.md, .clawhub/origin.json, .clawhub/lock.json, तथा skills info --json सत्यापित करता है।
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp केंद्रित CLI बैकएंड लाइव जाँच; Gemini के लिए समतुल्य :resume और :mcp उपनाम उपलब्ध हैं।
pnpm test:docker:openwebui Docker में चलने वाला OpenClaw + Open WebUI: साइन इन करें, /api/models जाँचें, और /api/chat/completions के माध्यम से वास्तविक प्रॉक्सी चैट चलाएँ। इसके लिए उपयोग योग्य लाइव मॉडल कुंजी आवश्यक है और यह एक बाहरी इमेज खींचता है; इसके यूनिट/e2e सुइट की तरह CI में स्थिर रहने की अपेक्षा नहीं है।
pnpm test:docker:mcp-channels पहले से डेटा वाले Gateway कंटेनर के साथ openclaw mcp serve प्रारंभ करने वाला क्लाइंट कंटेनर: रूट की गई बातचीत की खोज, ट्रांसक्रिप्ट पठन, अटैचमेंट मेटाडेटा, लाइव इवेंट कतार व्यवहार, आउटबाउंड प्रेषण रूटिंग, और वास्तविक stdio ब्रिज पर Claude-शैली के चैनल + अनुमति नोटिफ़िकेशन (अभिकथन सीधे रॉ stdio MCP फ़्रेम पढ़ता है)।
pnpm test:docker:upgrade-survivor पुराने उपयोगकर्ता के अव्यवस्थित फ़िक्स्चर पर पैक किया गया tarball इंस्टॉल करता है, लाइव प्रोवाइडर/चैनल कुंजियों के बिना पैकेज अपडेट और गैर-संवादात्मक doctor चलाता है, लूपबैक Gateway प्रारंभ करता है, और जाँचता है कि एजेंट/चैनल कॉन्फ़िगरेशन/Plugin अनुमति-सूचियाँ/वर्कस्पेस/सत्र फ़ाइलें/पुरानी विरासत Plugin निर्भरता स्थिति/स्टार्टअप/RPC स्थिति सुरक्षित रहती हैं।
pnpm test:docker:published-upgrade-survivor डिफ़ॉल्ट रूप से openclaw@latest इंस्टॉल करता है, वास्तविक मौजूदा-उपयोगकर्ता फ़ाइलें पहले से भरता है, अंतर्निहित openclaw config set विधि से कॉन्फ़िगर करता है, पैक किए गए tarball पर अपडेट करता है, गैर-संवादात्मक doctor चलाता है, .artifacts/upgrade-survivor/summary.json लिखता है, और /healthz, /readyz, RPC स्थिति जाँचता है। OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC से ओवरराइड करें, OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS से मैट्रिक्स विस्तृत करें, या OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues से परिदृश्य फ़िक्स्चर जोड़ें (इसमें configured-plugin-installs और stale-source-plugin-shadow शामिल हैं)। Package Acceptance इन्हें published_upgrade_survivor_baseline(s) / _scenarios के रूप में उपलब्ध कराता है और last-stable-4 या all-since-2026.4.23 जैसे मेटा टोकन का समाधान करता है।
pnpm test:docker:update-migration plugin-deps-cleanup परिदृश्य में प्रकाशित-अपग्रेड उत्तरजीविता हार्नेस, जो डिफ़ॉल्ट रूप से openclaw@2026.4.23 से शुरू होता है। Update Migration कार्यप्रवाह इसे baselines=all-since-2026.4.23 से विस्तृत करके Full Release CI के बाहर कॉन्फ़िगर किए गए Plugin की निर्भरता सफ़ाई प्रमाणित करता है।
pnpm test:docker:plugins स्थानीय पथ, file:, ऊपर उठाई गई निर्भरताओं वाले npm रजिस्ट्री पैकेज, गतिशील git संदर्भ, ClawHub फ़िक्स्चर, मार्केटप्लेस अपडेट, और Claude-बंडल सक्षम करने/जाँचने के लिए इंस्टॉल/अपडेट स्मोक परीक्षण।

स्थानीय PR गेट

स्थानीय PR लैंडिंग/गेट जाँच के लिए चलाएँ:

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

यदि अधिक भार वाले होस्ट पर pnpm test कभी-कभार विफल हो, तो उसे प्रतिगमन मानने से पहले एक बार पुनः चलाएँ, फिर pnpm test <path/to/test> से पृथक करें। सीमित मेमोरी वाले होस्ट के लिए:

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

परीक्षण प्रदर्शन टूलिंग

  • pnpm test:perf:imports: स्पष्ट फ़ाइल/डायरेक्टरी लक्ष्यों के लिए सीमित लेन रूटिंग का उपयोग जारी रखते हुए Vitest आयात-अवधि + आयात-विवरण रिपोर्टिंग सक्षम करता है। pnpm test:perf:imports:changed उसी प्रोफ़ाइलिंग को origin/main के बाद बदली गई फ़ाइलों तक सीमित करता है।
  • pnpm test:perf:changed:bench -- --ref <git-ref> समान कमिट किए गए git अंतर के लिए रूट किए गए changed-mode पथ का नेटिव रूट-प्रोजेक्ट रन से बेंचमार्क करता है; pnpm test:perf:changed:bench -- --worktree पहले कमिट किए बिना वर्तमान वर्कट्री परिवर्तन सेट का बेंचमार्क करता है।
  • pnpm test:perf:profile:main Vitest मुख्य थ्रेड के लिए CPU प्रोफ़ाइल लिखता है (.artifacts/vitest-main-profile); pnpm test:perf:profile:runner यूनिट रनर के लिए CPU + हीप प्रोफ़ाइल लिखता है (.artifacts/vitest-runner-profile)।
  • pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: प्रत्येक पूर्ण-सुइट Vitest लीफ़ कॉन्फ़िगरेशन को क्रमिक रूप से चलाता है और समूहबद्ध अवधि डेटा के साथ प्रति-कॉन्फ़िगरेशन JSON/लॉग आर्टिफ़ैक्ट लिखता है। पूर्ण-सुइट रिपोर्ट डिफ़ॉल्ट रूप से फ़ाइलों को पृथक करती हैं, ताकि पिछली फ़ाइलों से बने रहे मॉड्यूल ग्राफ़ और GC विराम बाद के अभिकथनों में न जोड़े जाएँ; साझा-वर्कर संचय की जानबूझकर प्रोफ़ाइलिंग करते समय ही -- --no-isolate पास करें। Test Performance Agent धीमे परीक्षणों को ठीक करने का प्रयास करने से पहले इसे अपनी आधाररेखा के रूप में उपयोग करता है। pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json प्रदर्शन-केंद्रित परिवर्तन के बाद समूहबद्ध रिपोर्ट की तुलना करता है।
  • पूर्ण, एक्सटेंशन और include-pattern शार्ड रन .artifacts/vitest-shard-timings.json में स्थानीय समय डेटा अपडेट करते हैं; बाद के संपूर्ण-कॉन्फ़िगरेशन रन धीमे और तेज़ शार्ड संतुलित करने के लिए इन समयों का उपयोग करते हैं। Include-pattern CI शार्ड समय कुंजी में शार्ड का नाम जोड़ते हैं, जिससे फ़िल्टर किए गए शार्ड के समय संपूर्ण-कॉन्फ़िगरेशन समय डेटा को प्रतिस्थापित किए बिना दिखाई देते रहते हैं। स्थानीय समय आर्टिफ़ैक्ट को अनदेखा करने के लिए OPENCLAW_TEST_PROJECTS_TIMINGS=0 सेट करें।

बेंचमार्क

मॉडल विलंबता (scripts/bench-model.ts)
bash
pnpm tsx scripts/bench-model.ts --runs 10

वैकल्पिक env: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY। डिफ़ॉल्ट प्रॉम्प्ट: "केवल एक शब्द में उत्तर दें: ok. कोई विराम-चिह्न या अतिरिक्त टेक्स्ट नहीं।"

CLI स्टार्टअप (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

प्रीसेट:

  • 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: दोनों प्रीसेट संयुक्त रूप से

आउटपुट में प्रत्येक कमांड के लिए sampleCount, औसत, p50, p95, न्यूनतम/अधिकतम, निकास-कोड/सिग्नल वितरण और अधिकतम RSS शामिल होते हैं। --cpu-prof-dir / --heap-prof-dir प्रत्येक रन के लिए V8 प्रोफ़ाइल लिखते हैं।

सहेजा गया आउटपुट: pnpm test:startup:bench:smoke, .artifacts/cli-startup-bench-smoke.json लिखता है; pnpm test:startup:bench:save, .artifacts/cli-startup-bench-all.json (runs=5 warmup=1) लिखता है। चेक-इन किया गया फ़िक्स्चर: test/fixtures/cli-startup-bench.json, जिसे pnpm test:startup:bench:update द्वारा रीफ़्रेश और pnpm test:startup:bench:check द्वारा तुलना किया जाता है।

Gateway स्टार्टअप (scripts/bench-gateway-startup.ts)

डिफ़ॉल्ट रूप से dist/entry.js पर निर्मित CLI एंट्री का उपयोग होता है; पहले pnpm build चलाएँ। इसके बजाय स्रोत रनर को मापने के लिए --entry scripts/run-node.mjs पास करें और उन परिणामों को निर्मित-एंट्री बेसलाइन से अलग रखें।

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

केस आईडी: default, skipChannels (चैनल स्टार्टअप छोड़ा गया), oneInternalHook, allInternalHooks, fiftyPlugins (50 मैनिफ़ेस्ट Plugin), fiftyStartupLazyPlugins (50 स्टार्टअप-लेज़ी मैनिफ़ेस्ट Plugin)।

आउटपुट में पहला प्रोसेस आउटपुट, /healthz, /readyz, HTTP लिसन लॉग समय, Gateway तैयार लॉग समय, CPU समय, CPU कोर अनुपात, अधिकतम RSS, हीप, स्टार्टअप ट्रेस मेट्रिक्स, इवेंट-लूप विलंब और Plugin लुकअप-टेबल के विस्तृत मेट्रिक्स शामिल होते हैं। स्क्रिप्ट चाइल्ड Gateway परिवेश में OPENCLAW_GATEWAY_STARTUP_TRACE=1 सेट करती है।

/healthz लाइवनेस है (HTTP सर्वर उत्तर दे सकता है)। /readyz उपयोग योग्य तत्परता है (स्टार्टअप Plugin साइडकार, चैनल और रेडी-क्रिटिकल पोस्ट-अटैच कार्य स्थिर हो चुके हैं)। स्टार्टअप हुक असिंक्रोनस रूप से डिस्पैच होते हैं और तत्परता की गारंटी का हिस्सा नहीं हैं। तैयार लॉग समय Gateway का आंतरिक टाइमस्टैम्प है, जो प्रोसेस-पक्षीय एट्रिब्यूशन के लिए उपयोगी है, लेकिन बाहरी /readyz प्रोब का विकल्प नहीं है।

परिवर्तनों की तुलना करते समय JSON आउटपुट या --output का उपयोग करें। --cpu-prof-dir का उपयोग केवल तब करें, जब ट्रेस आउटपुट इंपोर्ट, कंपाइल या CPU-बाउंड कार्य की ओर संकेत करे जिसे केवल चरण समय से समझाया नहीं जा सकता।

Gateway रीस्टार्ट (scripts/bench-gateway-restart.ts)

केवल macOS और Linux (इन-प्रोसेस रीस्टार्ट के लिए SIGUSR1 का उपयोग करता है; Windows पर तुरंत विफल होता है)। ऊपर दिए गए Gateway स्टार्टअप के समान निर्मित-एंट्री डिफ़ॉल्ट और --entry scripts/run-node.mjs ओवरराइड।

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

केस आईडी: skipChannels, skipChannelsAcpxProbe (ACPX स्टार्टअप प्रोब चालू), skipChannelsNoAcpxProbe (प्रोब बंद), default, fiftyPlugins

आउटपुट में अगला /healthz, अगला /readyz, डाउनटाइम, रीस्टार्ट तत्परता समय, CPU, RSS, प्रतिस्थापन प्रोसेस के स्टार्टअप ट्रेस मेट्रिक्स और सिग्नल प्रबंधन, सक्रिय-कार्य निकासी, बंद करने के चरणों, अगले स्टार्ट, तत्परता समय तथा मेमोरी स्नैपशॉट के रीस्टार्ट ट्रेस मेट्रिक्स शामिल होते हैं। स्क्रिप्ट OPENCLAW_GATEWAY_STARTUP_TRACE=1 और OPENCLAW_GATEWAY_RESTART_TRACE=1 सेट करती है।

जब कोई परिवर्तन रीस्टार्ट सिग्नलिंग, क्लोज़ हैंडलर, रीस्टार्ट के बाद स्टार्टअप, साइडकार शटडाउन, सेवा हैंडऑफ़ या रीस्टार्ट के बाद तत्परता को प्रभावित करता हो, तब इस बेंचमार्क का उपयोग करें। Gateway यांत्रिकी को चैनल स्टार्टअप से अलग करने के लिए skipChannels से शुरू करें; default या Plugin-बहुल केसों का उपयोग केवल तब करें, जब संकीर्ण केस रीस्टार्ट पथ को स्पष्ट कर दे। ट्रेस मेट्रिक्स एट्रिब्यूशन संकेत हैं, निर्णय नहीं — रीस्टार्ट परिवर्तन का मूल्यांकन कई नमूनों, मेल खाते स्वामी स्पैन, /healthz//readyz व्यवहार और उपयोगकर्ता को दिखाई देने वाले रीस्टार्ट अनुबंध के आधार पर करें।

ऑनबोर्डिंग E2E (Docker)

वैकल्पिक; केवल कंटेनरीकृत ऑनबोर्डिंग स्मोक परीक्षणों के लिए आवश्यक। स्वच्छ Linux कंटेनर में पूर्ण कोल्ड-स्टार्ट प्रवाह:

bash
scripts/e2e/onboard-docker.sh

छद्म-TTY के माध्यम से इंटरैक्टिव विज़ार्ड चलाता है, कॉन्फ़िगरेशन/वर्कस्पेस/सेशन फ़ाइलों को सत्यापित करता है, फिर Gateway प्रारंभ करके openclaw health चलाता है।

QR इंपोर्ट स्मोक (Docker)

यह सुनिश्चित करता है कि अनुरक्षित QR रनटाइम हेल्पर समर्थित Docker Node रनटाइम (Node 24 डिफ़ॉल्ट, Node 22 संगत) के अंतर्गत लोड हो:

bash
pnpm test:docker:qr

संबंधित

Was this useful?
On this page

On this page