OpenClaw Mission Control测试体系揭秘:pytest、Vitest与Cypress如何守住100%关键覆盖率
OpenClaw Mission Control测试体系揭秘pytest、Vitest与Cypress如何守住100%关键覆盖率【免费下载链接】openclaw-mission-controlAI Agent Orchestration Dashboard - Manage AI agents, assign tasks, and coordinate multi-agent collaboration via OpenClaw Gateway.项目地址: https://gitcode.com/gh_mirrors/op/openclaw-mission-controlOpenClaw Mission Control 是一个 AI Agent 编排仪表盘AI Agent Orchestration Dashboard用于管理 AI 智能体、分配任务并通过 OpenClaw Gateway 协调多智能体协作。它的测试体系由三层组成后端用pytest做单元与 API 测试前端用Vitest做组件级单测再用Cypress跑端到端E2E验证——并对指定的关键模块强制100% 语句分支覆盖率。本文带你完整拆解这套关键覆盖率 100%是如何落地执行的。一张图看懂测试金字塔 ️这个项目的质量保障不是一把梭跑所有测试而是分层设防每一层都有明确职责层级工具覆盖对象位置单元测试pytest 9.0.2 pytest-covFastAPI 核心逻辑、服务层backend/tests/组件测试Vitest 4 jsdomReact 组件、纯工具函数frontend/src/端到端测试Cypress 14真实浏览器中的完整用户流程frontend/cypress/e2e/后端目前已有74 个 pytest 测试文件见 backend/tests/前端有25 个*.test.tsx文件外加9 个 Cypress E2E 用例。后端pytest 单元测试如何组织 确定性环境conftest 是关键所有后端测试共享一个 conftest.py它在测试启动前强制设置环境变量保证每次运行环境完全一致AUTH_MODElocal使用本地认证模式LOCAL_AUTH_TOKEN固定测试令牌BASE_URLhttp://localhost:8000这样测试不需要真实的外部认证服务就能快速失败——一旦认证接线逻辑被改坏测试会立刻报错。测试风格聚焦行为而非实现以 test_error_handling.py 为例测试直接构造一个 FastAPI 应用、安装错误处理中间件然后验证422 响应里必须带 request_id这类用户可感知的行为而不是内部调用次数。类似地测试还覆盖了认证与安全test_agent_auth_security.py、test_rate_limit.py业务边界test_tasks_blocked_lead_transitions.py任务状态流转集成边界test_openclaw_import_boundaries.py防止模块间依赖失控覆盖率门槛只对关键模块强制 100% 这是整套体系最有意思的地方不是全仓 100% 覆盖而是精准圈定关键模块对其强制 100% 语句分支覆盖。后端作用域化的 coverage 门禁在根目录 Makefile 中backend-coverage目标只对两个明确圈定的模块执行门禁app.core.error_handling—— 全局错误处理出 bug 会直接影响所有 APIapp.services.mentions—— 提及解析服务uv run pytest \ --covapp.core.error_handling \ --covapp.services.mentions \ --cov-branch \ --cov-fail-under100--cov-branch开启分支覆盖意味着 if/else 的每个走向都必须被执行到。同时pyproject.toml 里还有一个诚实的全局基线当前fail_under 0项目方公开承认整体覆盖率仍低随测试扩展逐步收紧。前端Vitest 的 100% 阈值前端在 vitest.config.ts 中采用同样的圈定门禁策略门禁范围src/lib/backoff.ts重试退避算法和 src/components/activity/ActivityFeed.tsx活动流组件阈值lines / statements / functions / branches全部 100%覆盖率引擎V8vitest/coverage-v8输出 text lcov 报告另外还有一份 vitest.full-coverage.config.ts阈值全部为 0专门用来做全量覆盖率差距分析——知道哪里还差多少而不是假装已经 100%。端到端Cypress 守护真实用户路径 E2E 层位于 frontend/cypress/e2e/9 个用例覆盖了核心用户旅程local_auth_login.cy.ts—— 本地认证登录boards_list.cy.ts/board_tasks.cy.ts—— 看板浏览与任务操作global_approvals.cy.ts—— 全局审批流organizations.cy.ts—— 组织管理mobile_sidebar.cy.ts—— 移动端侧边栏cypress.config.ts 中有两处工程细节值得注意retries.runMode: 2CI 模式自动重试 2 次过滤偶发抖动减少绿了又红的噪音defaultCommandTimeout: 20_00020 秒超时给慢接口留足余量运行方式两个终端# 终端 1启动完整栈 docker compose -f compose.yml --env-file .env up -d --build # 终端 2跑 E2E cd frontend npm run e2e详细说明见 docs/testing/README.md。一条命令对齐 CImake check ✅所有检查被收敛到一个入口。Makefile 中的check目标等价于 CI 的完整流水线make setup # 安装依赖 make check # lint typecheck 后端覆盖率门禁 前端测试 生产构建它依次执行步骤内容lintisort/black后端、ESLint前端、markdownlint文档typecheckmypy --strict后端、tsc --noEmit前端backend-coveragepytest 100% 分支覆盖门禁frontend-testVitest 圈定模块 100% 阈值buildNext.js 生产构建为什么这套体系值得学习 诚实的覆盖率策略不追求全仓 100% 的虚假繁荣而是对错误处理这类一旦出事就是全局事故的模块设 100% 硬门禁策略说明见 docs/coverage-policy.md三层互不重叠pytest 管行为、Vitest 管组件、Cypress 管真实浏览器路径每层只测试自己该测的东西确定性优先conftest 固定环境变量、Cypress 自动重试把环境噪音排除在失败原因之外门禁与观测分离Vitest 用两套配置分别承担卡合并和看差距两个职责对新手来说这套体系给出了一个可复制的模板先圈定关键模块写满 100%再逐步扩圈而不是一上来就被全量覆盖率指标劝退。【免费下载链接】openclaw-mission-controlAI Agent Orchestration Dashboard - Manage AI agents, assign tasks, and coordinate multi-agent collaboration via OpenClaw Gateway.项目地址: https://gitcode.com/gh_mirrors/op/openclaw-mission-control创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考