创建和使用测试项目
本文从创建项目开始,介绍如何运行示例、了解可用的测试操作、编写 YAML 用例和查看运行结果。已有原生 Test 项目的读者可以直接从了解可用的测试操作开始。
整体设计见 Midscene Test 概览。业务操作的实现方式见编写自定义 Node,运行环境和执行参数见配置测试项目。
这里的“旧版 YAML”特指由 midscene 执行的 tasks/flow 用例及 YAML 批配置,不包括原生 cases/steps Test 文件。旧链路只做兼容维护和必要修复,不再新增能力;现有项目可以继续运行,新项目和新增用例推荐使用 Midscene Test。两条链路共用执行内核和新的报告页面,具体命令边界与字段转换见迁移到 Midscene Test。
创建项目
1. 生成项目文件并安装依赖
准备 Node.js ^20.19.0 || ^22.12.0 || >=24.0.0 和 pnpm。需要交互式引导时,运行:
命令会依次提示选择项目目录、平台、包管理器,以及是否安装依赖。也可以直接传入参数,例如使用 pnpm 创建 Web 测试项目:
可用参数如下:
每个平台目前提供一个起步模板,通过 --platform 选择,均使用原生 cases/steps Test 文件。在 CI 等非交互式环境中,必须提供目录和 --platform;未设置 --skip-install 时会安装依赖。
常用示例:
按提示安装依赖。命令会生成平台配置和示例用例,安装依赖后还会生成 Node 说明书。Web 项目的主要文件如下:
其他平台模板在 midscene.config.ts 中定义 todo.setup,不包含 nodes/todo.ts,说明书文件名使用对应平台名称,例如 midscene-node-spec.ios.md。创建项目和生成说明书不会运行测试,因此这一步不需要模型 API Key、浏览器或设备。生成项目中的 README 会说明平台准备和示例运行方式。
如果跳过安装或安装失败,可以进入项目目录执行 pnpm install。需要重新生成 Node 说明书时,执行 pnpm run nodes。
2. 配置模型与运行环境
将 .env.example 复制为 .env,按照模型配置填写模型名称、服务地址和 API Key。
运行测试前,检查模型连接和 Midscene 兼容性:
命令会读取当前工作目录下的 .env,并覆盖已有的 Shell 环境变量,无需浏览器或设备。详见模型调试与可观测性。
Web 项目还需要安装 Chromium:
其他平台在创建时修改 --platform,并完成对应准备:
3. 运行生成的示例
五个平台的模板都使用在线 React TodoMVC,演示添加、删除和完成任务。运行测试的浏览器或设备需要能访问该网站。
Web 模板在每条用例前通过 todo.setup 打开 All 视图、清空页面存储并重新加载,使用 DOM 确认列表为空,再由 todo.seed 添加三个任务,第一条用例校验初始状态,第二条用 AI 删除和完成任务后校验结果;每条用例后由 todo.captureState 记录页面状态。Android、iOS、HarmonyOS 和桌面端模板使用 AI 添加三个任务、删除一个、完成另一个、切换到已完成筛选,并校验结果。修改任务前,这些模板先通过 todo.setup 打开 All 视图并等待输入框,再由 aiAssert 检查列表为空(包含已完成任务)且没有遮挡弹窗。已有任务会保留;检查失败时,请切换到 All 删除全部任务,或仅清除 TodoMVC 网站的数据,关闭遮挡弹窗后重新运行。模型或连接异常应先按报告中的原因排查。AI 检查可能误判,失败时请结合报告确认页面状态。所有模板均串行运行,首次用例失败即停止后续用例(test.bail: 1),同时正常保存报告、释放资源。
运行结束后,可以在 midscene_run/report/ 查看报告,了解各用例及步骤的执行结果。随后修改 cases/todo.yaml 编写自己的用例,可用操作及其参数以生成的 Node 说明书为准。
了解可用的测试操作
官方操作与按需扩展
Midscene Test 将每一种可在 YAML 中调用的能力称为 Node(节点)。
Node 既可以在用例的 steps 中调用,也可以在 beforeEach、afterEach 等生命周期钩子中调用,写法相同。
所有平台都提供以下常用能力:aiAct 根据自然语言操作界面,aiAssert 检查预期结果,aiWaitFor 等待可观察条件成立,wait 等待指定时长。
在这些通用能力之外,Midscene 还为各个平台预置了专用操作。例如:
- Web:
gotoUrl打开网页、setCookies设置 Cookie、setViewportSize调整浏览器视口大小。 - Android:
launch启动应用、back返回上一页、home返回主屏幕、runAdbShell执行 ADB 命令。
创建项目时,脚手架会根据选择的平台显式注册相应的官方 Node。手写 midscene.config.ts 时不会隐式注册任何 Node,需要自行配置。开发者也可以按需 扩展,例如通过业务接口准备测试订单,详见注册自定义业务 Node。
生成当前项目的 Node 说明书
不同平台、执行项目和项目版本实际注册的 Node 可能不同。不要根据其他项目的示例推测当前项目的可用能力;midscene-test nodes 根据最终生效的注册结果生成 Node 说明书,它是当前项目可用 Node 名称、输入字段和字符串简写方式的事实来源。人类和 AI Agent 都应根据这份 Node 说明书编写 YAML 用例。
脚手架会在安装依赖后自动生成。修改 agentClass、顶层 nodes、projects[].nodes、Node schema,或者升级相关 Midscene 包后,应重新生成:
也可以直接运行命令,并指定测试目录、配置文件或执行项目:
配置了 projects 时,midscene-test nodes 默认按执行项目分别生成说明书,即使各项目的 Node 定义完全相同。文件名为 midscene-node-spec.<project-name>.md。使用 --project <name> 只生成指定项目的说明书,文件名保持一致。未显式配置 projects 时,文件名仍为 midscene-node-spec.md。文件写入指定目录;省略目录时写入当前目录。在 package.json 所在目录运行命令即可将说明书保存在该目录。Project name 重复,或转换后的文件名冲突(包括大小写差异),都会在写入任何文件之前抛错。
生成命令只加载项目配置和 Node 定义,不执行 setup、用例或 getAgent,因此不需要启动浏览器、连接设备或调用模型。说明书是生成文件,不要手动编辑;配置变化后重新执行命令。
说明书包含两个部分:Available Nodes 列出可用 Node,Node Details 展示每个 Node 的 description、字符串简写规则和输入结构。输入结构由 Zod inputSchema 转换为标准 JSON Schema。说明书和终端输出均优先列出 aiAct、aiAssert,其余 Node 按名称排序。
说明书还会列出用例文件的匹配规则(Case files)和配置文件路径(Config file),方便用例编写者定位文件。Case files 对应各执行项目的 files.include 和 files.exclude。这两类路径均相对于说明书所在目录。
编写 YAML 测试用例
一个典型的 YAML 文件
一个 YAML 文件可以包含多个测试用例,以及用例执行前后的准备和清理步骤。下面以商城搜索为例:每次运行用例前打开首页,再搜索商品并检查结果。请将网址和商品名称替换为你的业务内容。

