创建 Midscene Test E2E 项目
本指南将带你使用脚手架创建测试项目、运行内置的 TodoMVC 示例,并动手修改一条测试用例。下文以 Web 平台为例;如果你测试的是移动端或桌面端应用,只需在创建项目时选择对应的平台模板即可。
如果是第一次在某个平台上运行,可以使用开始使用。它会按你选择的平台和模型接入方式,依次列出设备、模型和项目的配置步骤,直到示例运行通过。
创建项目
1. 生成项目文件并安装依赖
请确保本地已安装 Node.js(^20.19.0 || ^22.12.0 || >=24.0.0)和 pnpm,然后在终端运行:
执行过程中按终端提示安装依赖即可。如果你想通过交互式菜单选择平台,可以直接运行 pnpm dlx @midscene/test create,创建完成后再进入项目目录。完整的命令行参数请参阅文末的创建命令参考。
生成的项目结构如下:
本步骤仅生成项目文件与说明书,不会实际运行测试,因此无需配置模型 API Key、浏览器或测试设备。生成的项目根目录下也包含 README.md(及 README.zh.md),其中提供了关于特定平台环境配置的详细说明。
2. 配置模型与运行环境
将 .env.example 复制为 .env,按照使用模型 API Key填写模型名称、服务地址和 API Key。如果使用 ChatGPT 订阅,请按使用 ChatGPT 订阅完成一次登录,然后设置 MIDSCENE_MODEL_AUTH_MODE、MIDSCENE_MODEL_NAME 和 MIDSCENE_MODEL_FAMILY,服务地址和 API Key 留空。
运行测试前,可以先验证模型连通性是否正常:
该命令会自动读取当前工作目录下的 .env 文件(优先级高于当前终端中已有的同名环境变量),验证过程无需启动浏览器或连接设备。详见高级配置与调试。
Web 项目还需要安装 Chromium 浏览器:
如果你在第一步创建的是非 Web 平台的项目,请在运行测试前完成相应的运行环境准备:
3. 运行示例并查看结果
示例用例会访问在线的 React TodoMVC 页面,请确保测试机或设备能够访问该网站。运行结束后,终端会输出测试结果以及 Report: 报告路径(默认保存在 midscene_run/report/ 目录下)。在浏览器中打 开该 HTML 报告,即可点击具体用例和步骤,查看界面截图、输入输出参数及错误信息。
如遇报错:依赖缺失可重新执行 pnpm install;模型校验失败请先参考前文排查模型配置;设备连接异常请查阅上表中的平台配置指南。关于测试运行参数与报告分享,请参阅运行测试。
修改一个用例
打开 cases/todo.yaml。Web 模板的 beforeEach 钩子会重置页面并预先创建三条待办事项。请保留文件中的 beforeEach 和 afterEach 钩子,将 cases 部分替换为以下内容:
再次运行 pnpm test,在报告中确认该用例执行通过。其中 aiAct 用于描述界面操作,aiAssert 用于验证预期结果。移动端和桌面端模板的数据准备方式与 Web 不同,修改用例时请先查看项目中的 README.zh.md,保留原有的初始化步骤。
从示例到自己的测试
YAML 用例中的每一种操作都对应一个 Node。安装依赖时自动生成的 midscene-node-spec.web.md(其他平台为对应后缀的文件)列出了当前项目所有可调用的 Node 及其参数说明。后续如果新增了自定义 Node 或修改了项目配置,可以运行 pnpm run nodes 重新生成这份说明书。
编写自己的业务用例时,你可以让 AI 编程助手先读取项目中的 Node 说明书和 cases/todo.yaml,再告诉它目标页面、操作流程和预期结果,让它基于已注册的 Node 编写 YAML 用例。如果现有 Node 无法满足业务需求,可以先用 TypeScript 实现并注册自定义 Node,重新生成说明书后再编写用例。
接下来可按需阅读:
- 编写 YAML 用例:了解调用参数、变量、标签、钩子与用例组织方式。
- 配置测试工程:管理运行环境、Node 注册、用例匹配与执行项目。
- 开发自定义 Node:封装业务接口与测试数据操作。
- 运行测试:指定运行目标、查看诊断输出与结果文件。
- 在 GitHub Actions 中运行:将测试项目接入 CI 流程。
创建命令参考
展开创建参数与更多示例
可用参数如下:
每个平台目前提供一个起步模板,通过 --platform 选择,生成的用例均采用 cases / steps 结构的 Midscene Test YAML 格式。在 CI 等非交互式环境中,必须显式传入项目目录和 --platform;除非指定 --skip-install,否则会自动安装依赖。
常用示例:

