跳转至

Docker 测试套件

完整 Docker 套件(pnpm test:docker:all)

构建共享的实时测试镜像,将 OpenClaw 一次性打包为 npm tar 包,构建/复用一个裸 Node/Git 运行器镜像,以及一个将该 tar 包安装到 /app 的功能镜像,然后通过加权调度器运行 Docker 冒烟测试泳道。scripts/package-openclaw-for-docker.mjs 是稳定的本地/CI 打包器入口,并会在 Docker 使用之前验证 tar 包以及 dist/postinstall-inventory.json。

  • 裸镜像(OPENCLAW_DOCKER_E2E_BARE_IMAGE):安装器/更新/插件依赖泳道;挂载预构建的 tar 包,而不是复制的仓库源码。
  • 功能镜像(OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE):常规已构建应用功能泳道。
  • 泳道定义:scripts/lib/docker-e2e-scenarios.mts。规划器:scripts/lib/docker-e2e-plan.mts。执行器:scripts/test-docker-all.mjs。
  • node scripts/test-docker-all.mjs --plan-json 会输出由调度器拥有的 CI 计划(泳道、镜像类型、包/实时镜像需求、状态场景、凭据检查),而不会构建或运行 Docker。

调度参数(环境变量,默认值在括号中):

环境变量 默认值 用途
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 min) 每个泳道的回退超时;选定的实时/尾部泳道使用更严格的上限。
环境变量 默认值 用途
OPENCLAW_DOCKER_ALL_DRY_RUN off 打印泳道清单而不运行 Docker。
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS 30000 活动泳道状态打印间隔。
OPENCLAW_DOCKER_ALL_TIMINGS on 复用 .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_<RESOURCE>_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 基于 Chromium 的源码 E2E 容器,使用原始 CDP + 隔离 Gateway;browser doctor --deep 的 CDP 角色快照包含链接 URL、由光标提升的可点击元素、iframe 引用和 frame 元数据。
pnpm test:docker:skill-install 在带有 skills.install.allowUploadedArchives: false 的裸 Docker runner 中安装打包好的 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:cache, :claude:mcp 聚焦的 CLI 后端实时探测;:claude:cache 确定无工具 prompt 的形状,随后要求在下一次脏工作区 resume 以及 thinking-level 变更后的稳定 resume 中,prompt-cache 复用率至少为 90%。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 在脏的旧用户 fixture 上安装打包的 tarball,运行包更新以及非交互式 doctor(不使用实时 provider/channel 密钥),启动 loopback Gateway,检查 agents/channel 配置/plugin 允许列表/workspace/session 状态/过时的旧版插件依赖状态/启动/RPC 状态是否保留。
pnpm test:docker:published-upgrade-survivor 默认安装 openclaw@latest,生成逼真的现有用户文件,通过内置的 openclaw config set 配方进行配置,更新到打包的 tarball,运行非交互式 doctor,写入 .artifacts/upgrade-survivor/summary.json,并检查 /healthz、/readyz 和 RPC 状态。该配方使用环境变量键引用配置 Anthropic、Google Gemini 和 OpenAI。设置 OPENCLAW_UPGRADE_SURVIVOR_LIVE_MODELS="openai/gpt-5.5 anthropic/claude-opus-5 google/gemini-3.1-pro-preview" 可进行逐模型标记轮次和摘要结果;为所选提供商导出 OPENAI_API_KEY、ANTHROPIC_API_KEY 和 GEMINI_API_KEY。此设置优先于遗留的 OPENCLAW_UPGRADE_SURVIVOR_LIVE_OPENAI=1 单模型形式。可通过 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.6.1 之类的元标记。
pnpm test:docker:update-migration 发布升级幸存者测试装置,运行于 plugin-deps-cleanup 场景,默认从最新的稳定版本开始。Update Migration 工作流在扇出前固定该基线;传入 baselines=all-since-2026.6.1 可进行显式的历史清理重放。
pnpm test:docker:plugins 针对本地路径、file:、带提升依赖的 npm registry 包、git 移动引用、ClawHub 夹具、市场更新以及 Claude-bundle 的 enable/inspect 进行安装/更新冒烟测试。

Anthropic 运行时上下文缓存回归

使用 ANTHROPIC_API_KEY 运行 pnpm test:docker:live-anthropic-cache,以验证通过包安装的 Anthropic 提供程序及受管传输与 claude-sonnet-4-6 的兼容性。功能镜像使用预先准备的候选包;OPENCLAW_SKIP_DOCKER_BUILD=1 可复用现有镜像。首先运行 pnpm test:docker:live-anthropic-cache --mock,通过相同的已安装构建器进行无密钥 HTTP/SSE 验证。模拟输出会标注其合成用法;只有默认的实时模式才能证明提供程序缓存的读取与写入。

每个构建器发出四个请求:初始对话、两次真实的工具结果续接,以及下一轮用户对话。测试框架将合成临时运行时上下文载体移动到请求尾部,并检查它绝不会成为缓存断点或缓存前缀的一部分。初始对话必须写入至少 4,096 个缓存令牌;后续读取必须达到该写入量的 90%,并在每次续接后增长,而新写入量保持在初始写入量的 25% 以下。简短的系统提示可防止仅系统级缓存命中满足对话下限要求。每个请求有 90 秒的截止时间,且不进行重试。

此阻塞通道运行于 stable/full 完整发布验证 Docker core 分块中。日志包含令牌使用情况和断点位置,合成提示内容不会出现在输出中。网关会话生命周期和保留的运行时上下文仍由其所属测试覆盖。

沙箱兼容性通道

命令 验证内容
pnpm test:e2e:openshell 真实的 OpenShell 网关、隔离的控制平面工作区、自定义镜像、远程与镜像文件系统、八路混合执行/文件压力测试、精确的主机/远程清单、故障恢复、SSH 清理、受保护的主机元数据,以及拒绝/允许网络策略。
pnpm test:docker:package-install 将打包的 OpenClaw npm 制品安装到干净的全局前缀中,然后从已安装的包中验证 CLI 版本及帮助命令的启动。
pnpm test:docker:openai-web-search-minimal 使用私有测试 CA 的模拟 TLS 端点、隔离的网关启动,以及通过配置的证书信任路径处理 Web 搜索请求。
pnpm test:docker:browser-cdp-snapshot Chromium 启动、原始 CDP 连接、隔离的网关浏览器命令、doctor 输出以及无障碍快照角色。
pnpm test:docker:kitchen-sink-rpc 已安装的插件命令与目录工具、只读网关 RPC 遍历、认证边界、通道生命周期以及资源上限。
命令 验证内容
pnpm test:docker:kitchen-sink-plugin 打包和注册表插件安装流程、插件执行、预期中的不支持版本失败、ClawHub 回退,以及从 npm 到 ClawHub 的迁移。

入门 E2E(Docker)

可选;仅在需要容器化入门冒烟测试时使用。在干净的 Linux 容器中执行完整的冷启动流程:

scripts/e2e/onboard-docker.sh

通过伪终端驱动交互式向导,验证配置/工作区/会话状态,然后启动网关并运行 openclaw health。

QR 导入冒烟测试(Docker)

确保受维护的 QR 运行时辅助模块能够在默认 Docker Node 24 运行时中加载:

pnpm test:docker:qr

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw