DimOS测试实战从pytest并行化到E2E端到端测试完全指南【免费下载链接】dimosDimensional is the agentic operating system for physical space. Command humanoids, quadrupeds, drones, and other hardware platforms in natural language and build multi-agent systems that work seamlessly with physical input (cameras, lidar, actuators).项目地址: https://gitcode.com/GitHub_Trending/dimo/dimosDimOS 是面向物理空间的 Agentic 操作系统DimOS / Dimensional可用自然语言指挥人形机器人、四足机器人与无人机。它的测试体系同样出色基于pytest 并行化pytest-xdist的默认快速测试套件以及一套真实拉起 CLI、驱动仿真机器狗的E2E 端到端测试。本文带你完整跑通这两条线。一、为什么 DimOS 的测试值得学 DimOS 把机器人软件拆成模块化的蓝图blueprint感知、导航、控制、记忆、Web 界面各自独立。这意味着测试也分层清晰官方在 docs/development/testing.md 中把测试划分为四类类型目标速度单元测试单个函数/类全部 mock极快集成测试多个模块协作中等功能测试某个期望功能中等端到端E2E用户视角的完整系统慢日常开发只跑“默认套件”保存文件即重跑反馈环路极短发 PR 前再跑需要重依赖的 self-hosted 套件。二、一键并行化3 分钟跑完默认测试套件 ⚡1. 环境准备项目使用uv管理依赖uv run会按需同步依赖无需预先安装uv run pytest --numprocessesauto dimos--numprocessesauto会按 CPU 核心数自动开进程——这就是pytest 并行化的核心由 pytest-xdist 提供见 pyproject.toml 的依赖声明。项目还提供了现成脚本bin/pytest-fast效果完全相同。2. 读懂 pyproject.toml 里的 pytest 配置所有默认行为都集中在 pyproject.toml 的[tool.pytest.ini_options]段几个关键项testpaths [dimos]只在 dimos 包内收集测试addopts中--distloadfile并行时同一文件的测试分给同一进程避免多个进程争抢端口/进程组-m not (self_hosted or mujoco or web_browser ...)用标记过滤把重型测试挡在默认套件之外--timeout600单测 10 分钟超时防止死锁卡死整个套件asyncio_mode auto全仓统一 pytest-asyncio 自动模式异步测试不用逐个加装饰器。 小贴士写测试时先跑pytest -sv dimos/core/test_my_code.py只验证自己正在写的文件用-k、--lf、--pdb等选项快速迭代详见官方文档 docs/development/testing.md。3. 测试组织规范测试文件与被测代码放在一起dimos/core/pubsub.py对应dimos/core/test_pubsub.py需要清理的资源连接、临时文件一律用fixture yieldteardown 即使失败也会执行绝不泄漏到下一个测试mock 优先用mockerfixturepytest-mock测试结束自动撤销 patch需要人工交互、不做断言的脚本命名为tool_*.pypytest 不会收集它们。三、E2E 端到端测试让机器狗真的“走”起来 默认套件之外dimos/e2e_tests/ 目录是真正的重头戏它不 mock 任何东西而是启动真实的 dimos CLI 进程在仿真环境里验证整条链路。1. E2E 测试的四大件工具作用dimos_cli_call.pyDimosCliCall封装以子进程拉起dimos run 蓝图等待 HTTP 就绪测试结束后对整个进程组发 SIGTERM/SIGKILL30 秒不退出就强制清理lcm_spy.pyLcmSpy消息探针向/goal_request等主题发消息并阻塞等待/goal_reached的应答用真实的消息流验证行为dim_sim_client.pyDimSimClient连接 DimSim 浏览器仿真器设定机器人初始位姿、动态加墙等场景元素conftest.py全套 fixturestart_blueprint、wait_for_system_ready、human_input、start_person_track等把 E2E 测试写成“讲故事”的几行代码2. 一次完整的 E2E 用例长什么样看 test_dimsim_walk_forward.py一个“向前走 3 米”用例的完整逻辑只有几步start_blueprint(run, ..., unitree-go2-agentic, simulatordimsim)—— 拉起 go2 四足蓝图wait_for_system_ready()—— 通过 Coordinator RPC 阻塞等待所有模块就绪dim_sim.set_agent_position(1, 2)—— 设定起始位姿human_input(move forward 3 meter)——用一句自然语言下达指令这正是 DimOS 的核心能力lcm_spy.wait_until_odom_position(4, 2, threshold0.4)—— 订阅里程计验证机器狗真的走到了 (4, 2)。从“语音/文本指令”到“里程计位移”感知-决策-执行整条链路全被断言覆盖。同理test_person_follow.py 会发布一条行人轨迹验证导航系统能持续跟对人test_patrol_and_follow.py、test_spatial_memory.py 则覆盖巡逻与空间记忆。3. 前端也有 E2E真实浏览器验收 dimos/e2e_tests/test_cockpit_browser.py 用 Playwright 驱动 Chromium 和 Firefox对 Web 端 Cockpit 界面做验收实时里程计必须跳动、视频面板必须按帧率解码真实相机画面、杀掉并重启 dimos 进程后页面必须自动重连。它标记为web_browser单独通过pytest -m web_browser运行——这体现了 DimOS 测试分组的精髓慢而重的测试用 marker 隔离绝不拖慢日常开发。4. 如何运行 E2E 测试# 完整 E2E含 self-hosted不含最重的 mujoco / self_hosted_large ./bin/pytest-slow # 只跑某一个标记的 E2E 测试 pytest -m self_hosted dimos/e2e_tests/test_dimsim_walk_forward.py # 浏览器端 E2E uv run --group browser-tests pytest -m web_browser dimos/e2e_tests/test_cockpit_browser.py运行 self-hosted 套件前先执行uv sync --all-groups同步重依赖LFS 数据、仿真、硬件 SDK 等。四、进阶全新 Ubuntu 虚拟机回归 CI 用预构建镜像跑测试可能漏掉“新手照着文档装机却装不上”的问题。为此项目在 misc/fresh-ubuntu-tests/ 内置了一套虚拟机回归测试vmtest.sh build下载官方 Ubuntu 24.04 ISO 并制作黄金快照vmtest.sh run在全新虚拟机里重放文档中的安装测试流程报告 PASS/FAIL。这是把“新手体验”本身当作被测对象的做法非常值得借鉴。五、快速上手清单 ✅uv run pytest --numprocessesauto dimos—— 日常开发秒级反馈新测试写到被测代码旁边资源清理用 fixture yield重型依赖CUDA、LFS、仿真用pytest.mark.self_hosted隔离发 PR 前跑./bin/pytest-slow必要时再跑 E2E 与浏览器验收慢测试定位瓶颈用--durations10调试用--pdb。从 pytest 并行化到端到端仿真验收DimOS 的测试体系把“快速反馈环路”与“真实系统验证”做到了很好的平衡。如果你想深入官方文档推荐阅读 docs/development/testing.md想动手改造 E2E 用例dimos/e2e_tests/ 下的conftest.py就是最好的模板。【免费下载链接】dimosDimensional is the agentic operating system for physical space. Command humanoids, quadrupeds, drones, and other hardware platforms in natural language and build multi-agent systems that work seamlessly with physical input (cameras, lidar, actuators).项目地址: https://gitcode.com/GitHub_Trending/dimo/dimos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
