Testing
測試:更新與外掛
更新與外掛驗證檢查清單:證明可安裝的套件能夠
更新真實使用者狀態、透過 doctor 修復過時的舊版狀態,並且仍能
從每個支援的來源安裝、載入、更新及解除安裝外掛。
如需更完整的測試執行器對照,請參閱測試。如需即時供應商 金鑰及會存取網路的測試套件,請參閱即時測試。
我們保護的項目
- 套件 tarball 內容完整、具有有效的
dist/postinstall-inventory.json, 且不依賴未封裝的儲存庫檔案。 - 使用者可以從較舊的已發布套件移轉至候選套件, 且不會遺失設定、代理程式、工作階段、工作區、外掛允許清單或 頻道設定。
openclaw doctor --fix --non-interactive負責舊版清理與修復 路徑。啟動流程不應為過時的外掛狀態增加隱藏的相容性遷移。- 外掛安裝支援本機目錄、git 儲存庫、npm 套件及 ClawHub 登錄檔路徑。
- 外掛 npm 相依套件會在每個外掛各自的一個受管理 npm 專案中安裝、
在信任前接受掃描,並在解除安裝外掛時透過
npm uninstall移除,避免提升至上層的相依套件殘留。 - 未發生任何變更時,外掛更新不會執行任何操作:安裝記錄、解析後的 來源、已安裝的相依套件配置及啟用狀態均維持不變。
開發期間的本機驗證
先從小範圍開始:
pnpm changed:lanes --jsonpnpm check:changedpnpm test:changed若變更涉及外掛安裝、解除安裝、相依套件或套件清單,也請 執行涵蓋所編輯接合面的聚焦測試:
pnpm test src/plugins/uninstall.test.ts src/infra/package-dist-inventory.test.ts test/scripts/package-acceptance-workflow.test.ts在任何套件 Docker 執行路徑使用 tarball 前,先驗證套件成品:
pnpm release:checkrelease:check 會執行設定/文件/API 差異檢查(設定結構描述、設定文件
基準、外掛 SDK API 合約資訊清單與匯出項目、外掛版本/清單)、
寫入套件發行清單、執行 npm pack --dry-run、拒絕禁止
封裝的檔案、將 tarball 安裝至暫存前置目錄、執行安裝後處理,並
對內建頻道進入點執行冒煙測試。
Docker 執行路徑
Docker 執行路徑是產品層級的驗證。它們會在 Linux 容器內安裝或更新真實 套件,並透過命令列介面命令、閘道啟動、HTTP 探測、RPC 狀態及檔案系統狀態 驗證行為。
反覆開發時使用聚焦的執行路徑:
pnpm test:docker:pluginspnpm test:docker:plugin-lifecycle-matrixpnpm test:docker:plugin-updatepnpm test:docker:upgrade-survivorpnpm test:docker:published-upgrade-survivorpnpm test:docker:update-restart-authpnpm test:docker:update-migration重要執行路徑:
test:docker:plugins涵蓋外掛安裝冒煙測試、本機資料夾安裝、 本機資料夾更新略過行為、含預先安裝相依套件的本機資料夾、file:套件安裝、可執行命令列介面命令的 git 安裝、git 移動參照更新、含提升至上層之遞移相依套件的 npm 登錄檔安裝、 npm 更新無操作、拒絕格式錯誤的 npm 套件中繼資料、 本機 ClawHub 固定裝置安裝與更新無操作、市集更新行為, 以及 Claude 套件組合啟用/檢查。設定OPENCLAW_PLUGINS_E2E_CLAWHUB=0可讓 ClawHub 區塊維持封閉/離線。test:docker:plugin-lifecycle-matrix會在空白 容器中安裝候選套件,讓 npm 外掛依序執行安裝、檢查、停用、啟用、 明確升級、明確降級,以及刪除外掛 程式碼後解除安裝。它會記錄每個階段的 RSS 與 CPU 指標。test:docker:plugin-update驗證未變更的已安裝外掛 不會在openclaw plugins update期間重新安裝或遺失安裝中繼資料。test:docker:upgrade-survivor會將候選 tarball 安裝到包含未清理狀態的 舊使用者固定裝置上,執行套件更新與非互動式 doctor,然後啟動 回送閘道並檢查狀態是否保留。test:docker:published-upgrade-survivor會先安裝已發布的基準版本, 透過內建的openclaw config set配方進行設定,接著更新至 候選 tarball、執行 doctor、檢查舊版清理、啟動閘道,並 探測/healthz、/readyz及 RPC 狀態。test:docker:update-restart-auth會安裝候選套件、啟動 受管理且使用權杖驗證的閘道、為openclaw update --yes --json取消設定呼叫端的閘道驗證環境變數,並要求候選更新命令 在一般探測前重新啟動閘道。test:docker:update-migration是著重清理的已發布版本更新執行路徑。它 從已設定的 Discord/Telegram 類型使用者狀態開始,執行基準版本的 doctor,讓已設定的外掛相依套件有機會實體化,為已設定的封裝外掛植入 舊版外掛相依套件殘留,更新至 候選 tarball,並要求更新後的 doctor 移除舊版 相依套件根目錄。
實用的已發布版本升級存續測試變體:
OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=openclaw@2026.4.23 \OPENCLAW_UPGRADE_SURVIVOR_SCENARIO=versioned-runtime-deps \pnpm test:docker:published-upgrade-survivor OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=openclaw@latest \OPENCLAW_UPGRADE_SURVIVOR_SCENARIO=bootstrap-persona \pnpm test:docker:published-upgrade-survivor可用情境:base、acpx-openclaw-tools-bridge、feishu-channel、
bootstrap-persona、channel-post-core-restore、plugin-deps-cleanup、
configured-plugin-installs、stale-source-plugin-shadow、tilde-log-path
及 versioned-runtime-deps。在彙總執行中,OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues
(別名 far-reaching)會展開為所有情境,包括
已設定外掛的安裝遷移。
完整更新遷移刻意與完整發布 CI 分開。當發布問題是「從 2026.4.23
起的每個已發布穩定版本,是否都能更新至此候選版本並
清理外掛相依套件殘留?」時,請使用手動 Update Migration 工作流程:
gh workflow run update-migration.yml \ --ref main \ -f workflow_ref=main \ -f package_ref=main \ -f baselines=all-since-2026.4.23 \ -f scenarios=plugin-deps-cleanup套件驗收
套件驗收是 GitHub 原生的套件閘門。它會將一個候選
套件解析為 package-under-test tarball、記錄版本與 SHA-256,然後
針對該確切 tarball 執行可重複使用的 Docker 端對端執行路徑。工作流程測試框架
參照與套件來源參照彼此分離,因此目前的測試邏輯可以驗證
較舊的受信任版本。
候選來源:
source=npm:驗證openclaw@extended-stable、openclaw@beta、openclaw@latest或確切的已發布版本。source=ref:使用所選的目前 測試框架封裝受信任的分支、標籤或提交。source=url:使用必要的package_sha256驗證公開 HTTPS tarball。 此路徑會拒絕 URL 認證資訊、非預設 HTTPS 連接埠、私人/內部 主機名稱或 DNS/IP 結果、特殊用途 IP 空間及不安全的重新導向。source=trusted-url:使用必要的package_sha256與trusted_source_id,依照.github/package-trusted-sources.json中由維護者管理的原則驗證 HTTPS tarball。企業/私人 鏡像應使用此方式,而不是以輸入層級的允許私人 開關弱化source=url。若原則有設定 Bearer 驗證,則使用固定的OPENCLAW_TRUSTED_PACKAGE_TOKEN密鑰。source=artifact:重複使用另一個 Actions 執行所上傳的 tarball。
完整發布驗證預設使用 source=artifact,其由
解析後的發布 SHA 建置。若要進行發布後驗證,請傳入
package_acceptance_package_spec=openclaw@YYYY.M.PATCH,讓相同的升級矩陣
改為針對已發布的 npm 套件。
發布檢查會使用套件/更新/重新啟動/外掛組合呼叫套件驗收:
doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor root-managed-vps-upgrade update-restart-auth plugins-offline plugin-update plugin-binding-command-escape啟用發布浸泡測試時(release_profile=stable 與
full 強制啟用),也會傳入:
published_upgrade_survivor_baselines=last-stable-4 2026.4.23 2026.5.2 2026.4.15published_upgrade_survivor_scenarios=reported-issuestelegram_mode=mock-openai如此可讓套件遷移、更新頻道切換、損毀的受管理外掛 容錯、過時的外掛相依套件清理、離線外掛涵蓋範圍、外掛 更新行為及 Telegram 套件 QA 共用相同的解析後成品,而 不會讓預設發布套件閘門遍歷每個已發布版本。
last-stable-4 會解析為最新四個已發布至 npm 的穩定 OpenClaw
版本。發布套件驗收會將 2026.4.23 固定為第一個外掛更新
相容性邊界、將 2026.5.2 固定為外掛架構大幅變動邊界,並將
2026.4.15 固定為較舊的 2026.4.1x 已發布版本更新基準;解析器
會移除已包含在最新四個版本中的重複固定版本。如需完整的已發布版本
更新遷移涵蓋範圍,請在獨立的更新
遷移工作流程中使用 all-since-2026.4.23,而非完整發布 CI。若也需要
舊日期前的錨點,仍可使用 release-history
進行手動且更廣泛的抽樣。
選取多個已發布版本升級存續測試基準時,可重複使用的 Docker 工作流程會將每個基準分割至各自的目標執行器工作。每個 基準分片仍會執行所選情境組合,但記錄與成品會依 基準分開,而總耗時由最慢的分片決定,不再是一個大型 循序工作。
發布前驗證候選版本時,請手動執行套件設定檔:
gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=package \ -f published_upgrade_survivor_baselines="last-stable-4 2026.4.23 2026.5.2 2026.4.15" \ -f published_upgrade_survivor_scenarios=reported-issues \ -f telegram_mode=mock-openai若要測試已發布的延伸穩定版 Canary,請設定
package_spec=openclaw@extended-stable。套件驗收會在 Docker
執行路徑開始前,將該選擇器解析為確切的 tarball。
當發布問題涵蓋 MCP 頻道、
排程/子代理程式清理、OpenAI 網頁搜尋或 OpenWebUI 時,請使用 suite_profile=product。
僅在需要完整的 Docker 發布路徑涵蓋範圍時使用 suite_profile=full。
發布預設值
針對發布候選版本,預設驗證堆疊如下:
pnpm check:changed與pnpm test:changed用於來源層級迴歸。pnpm release:check用於套件成品完整性。- 套件驗收
package設定檔或發布檢查的自訂套件 執行路徑,用於安裝/更新/重新啟動/外掛合約。 - 跨作業系統發布檢查,用於特定作業系統的安裝程式、初始設定及平台 行為。
- 僅在變更的介面涉及供應商或託管服務 行為時執行即時測試套件。
在維護者機器上,廣泛的閘門與 Docker/套件產品驗證應在 Testbox 中執行,除非明確要進行本機驗證。
舊版相容性
相容性寬容範圍很窄,且有時間限制:
- 截至
2026.4.25的套件(包括2026.4.25-beta.*)可在 套件驗收中容許已發布套件的中繼資料缺漏。 - 已發布的
2026.4.26套件可針對已發布的本機建置中繼資料戳記 檔案發出警告。 - 後續套件必須符合現代合約。相同的缺漏將導致失敗,而非 警告或略過。
請勿為這些舊形態新增啟動遷移。請新增或擴充 doctor
修復,然後使用 upgrade-survivor、published-upgrade-survivor 或
update-restart-auth 進行驗證;若更新命令負責重新啟動,則使用後者。
新增涵蓋範圍
變更更新或外掛行為時,請在能基於正確原因失敗的最低層級新增測試涵蓋:
- 純路徑或中繼資料邏輯:在原始碼旁新增單元測試。
- 套件清單或封裝檔案行為:
package-dist-inventory或 tarball 檢查程式測試。 - 命令列介面的安裝/更新行為:Docker 測試通道斷言或測試資料。
- 已發布版本的遷移行為:
published-upgrade-survivor情境。 - 由更新機制負責的重新啟動行為:
update-restart-auth。 - 登錄檔/套件來源行為:
test:docker:plugins測試資料或 ClawHub 測試資料伺服器。 - 相依套件配置或清理行為:同時斷言執行階段的執行情形與
檔案系統邊界。npm 相依套件可能會提升至外掛所管理的 npm
專案中,因此測試應證明該專案會被掃描/清理,而不是假設只會處理
外掛套件本機的
node_modules樹狀結構。
預設應讓新的 Docker 測試資料維持封閉自足。除非測試目的在於驗證即時登錄檔行為, 否則請使用本機測試登錄檔與模擬套件。
失敗分類處理
從成品識別資訊開始:
- 套件驗收
resolve_package摘要:來源、版本、SHA-256,以及 成品名稱。 - Docker 成品:
.artifacts/docker-tests/**/summary.json、failures.json、測試通道日誌,以及重新執行命令。 - 升級後保留項目摘要:
.artifacts/upgrade-survivor/summary.json, 包括基準版本、候選版本、情境、階段耗時,以及設定配方涵蓋範圍。
相較於重新執行整個發布總體流程,應優先使用相同套件成品,重新執行確切失敗的測試通道。