创建和使用测试项目
本文从创建项目开始,介绍如何运行示例、了解可用的测试操作、编写 YAML 用例和查看运行结果。已有项目的读者可以直接从了解可用的测试操作开始。
整体设计见 Midscene Test 概览。业务操作的实现方式见编写自定义 Node,运行环境和执行参数见配置测试项目。
创建项目
1. 生成项目文件并安装依赖
准备 Node.js ^20.19.0 || ^22.12.0 || >=24.0.0 和 pnpm,然后创建 Web 测试项目:
按提示安装依赖。命令会生成平台配置、示例用例和 Node 说明书,主要文件如下:
创建项目和生成说明书不会运行测试,因此这一步不需要模型 API Key、浏览器或设备。完整参数可通过 pnpm dlx @midscene/test create --help 查看。
如果跳过安装或安装失败,可以进入项目目录执行 pnpm install。需要重新生成 Node 说明书时,执行 pnpm run nodes。
2. 配置模型与运行环境
将 .env.example 复制为 .env,按照模型配置填写模型名称、服务地址和 API Key。
Web 项目还需要安装 Chromium:
其他平台在创建时修改 --platform,并完成对应准备:
3. 运行生成的示例
Web 示例打开 example.com 并检查页面标题。桌面端示例通过 aiAsk 查看当前屏幕;移动端示例先执行 home,再执行 aiAsk。
运行结束后,可以查看用例运行报告,了解各用例及步骤的执行结果。随后可以修改 cases/example.yaml,编写自己的用例。
了解可用的测试操作
内置操作与按需扩展
Midscene Test 将每一种可在 YAML 中调用的能力称为 Node(节点)。
Node 既可以在用例的 steps 中调用,也可以在 beforeEach、afterEach 等生命周期钩子中调用,写法相同。
所有平台都提供以下常用能力:aiAct 根据自然语言操作界面,aiAssert 检查预期结果,wait 等待指定时长。
在这些通用能力之外,Midscene 还为各个平台预置了专用操作。例如:
- Web:
gotoUrl打开网页、setCookies设置 Cookie、setViewportSize调整浏览器视口大小。 - Android:
launch启动应用、back返回上一页、home返回主屏幕、runAdbShell执行 ADB 命令。
创建项目时,脚手架会根据选择的平台注册相应的 Node。开发者也可以按需扩展,例如通 过业务接口准备测试订单,详见注册自定义业务 Node。
查看项目的操作说明书
打开项目中的 midscene-node-reference.md,可以查看当前可用的 Node、各自的用途和参数写法。这份说明书在安装时自动生成,人类和 AI Agent 都可以根据它编写 YAML 用例。
修改 Node 注册配置后,重新生成说明书:
编写 YAML 测试用例
一个典型的 YAML 文件
一个 YAML 文件可以包含多个测试用例,以及用例执行前后的准备和清理步骤。下面以商城搜索为例:每次运行用例前打开首页,再搜索商品并检查结果。请将网址和商品名称替换为你的业务内容。
文件中各部分的含义如下:
beforeEach:每个用例执行前运行的步骤。它是可选的,适合打开页面、重置状态等准备操作。其他钩子见执行生命周期。cases:测试用例列表,至少包含一个用例。需要增加用例时,在列表中添加新的name和steps。name:用例名称,用于在运行结果中识别这个用例。steps:按顺序执行的步骤,至少包含一个步骤。每个步骤只能调用一个 Node,冒号后填写调用参数。
文档中把整个 YAML 文件称为 Workflow Document(工作流文档),把一个用例称为 Case,把一次 Node 调用称为 Step(步骤)。
示例使用字符串简写:gotoUrl 后的文本作为 url,aiAct 和 aiAssert 后的文本作为 prompt。需要传入更多参数时,可以使用下文的对象写法。是否支持简写,以项目的 Node 说明书为准。
关 键 Node:操作与断言
日常用例主要通过 aiAct 描述操作,通过 aiAssert 检查结果:
操作完成不代表测试通过,应使用 aiAssert 明确检查预期结果。需要自定义断言失败信息时,可以展开参数:
其他 Node 的调用模式
平台操作和自定义业务 Node 使用相同的调用结构:Node 名称下面填写参数。下面展示多参数和无参数两种常见形式,这些片段可以放入用例的 steps 中:
setViewportSize 接收一个参数对象;clearCookies 无需参数,使用 {}。这两个 Node 由 Web 项目提供。移动端、桌面端以及团队自定义 Node 的可用范围和参数,以当前项目的说明书为准。
例如,如果团队注册了创建订单的 order.create,就可以这样调用。该 Node 是业务扩展示例,使用前需要在项目中实现和注册:
参数还可以包含嵌套对象或数组。比如给 aiAct 传入参考图时,文字和图片共同组成 prompt;options 则单独填写:
设置超时和错误处理
$ 用于设置由 Midscene Test 控制的 Step 参数。Midscene Test 不会将这些参数传入 Node 的 input。
支持以下两个字段:
timeout:Step 的超时时间,单位为毫秒。continue-on-error:设为true后,即使 Step 失败,Midscene Test 也会继续执行当前阶段的后续 Step。默认值为false。
continue-on-error 只控制 Midscene Test 是否继续执行。只要有 Step 失败,Case 的最终状态就是 failed。
使用 Project 变量与环境变量
Midscene Test 会在执行前递归解析 Node input:

