编写自定义 Node
自定义 Node 将业务操作封装为用例作者可以在 YAML 中调用的步骤。本文介绍输入定义与校验、跨 Node 数据共享,以及执行与清理。
尚未创建测试项目时,请先阅读创建和使用测试项目。平台环境、Agent 接入和运行参数见配置测试项目。
- 注册 Node:定义操作、在 YAML 中调用,并通过生成 Markdown 说明书验证注册。
- Node 执行参数:区分业务参数与框架的步骤配置。
- 跨 Node 共享上下文:创建、读取和重置共享测试数据。
- 进阶用法:返回结果、处理错误与取消,以及清理资源。
注册自定义业务 Node
自定义 Node 从 YAML 接收参数并执行操作。下面以创建测试用户数据为例,将用户信息写入 JSON 文件,供测试服务或数据导入步骤加载。
1. 定义并注册 Node
创建 midscene.config.ts:
name 是 YAML 中使用的操作名称。inputSchema 定义参数,execute({ input }) 接收校验后的参数值。将 Node 加入 nodes 数组后,用例就可以调用它。扩展已有项目时,将它追加到原有的 nodes 数组即可。
inputSchema 是可选字段,但定义后,Midscene Test 会在调用 execute() 前校验参数。示例中的 z.string().min(1) 要求姓名非空,.email() 校验邮箱格式,z.strictObject() 拒绝未知字段。输入不符合要求时,会抛出 NodeInputValidationError。
TypeScript 根据 schema 推导 input 的类型。.describe() 中的字段说明会出现在生成的 Node 说明书中。
2. 在 YAML 中调用
创建 cases/user.yaml:
Midscene Test 读取 YAML,找到名为 user.create 的 Node,并调用它的 execute()。此时 input 为 { name: "Alice", email: "alice@example.com" },Node 无需自行解析 YAML 文件。
示例使用 async execute({ input }) 和 await 等待文件写入。写入失败时会抛出错误,使 Node 执行失败。这里创建的是本地测试数据文件;需要在业务系统中创建用户时,将文件写入替换为测试数据接口或数据库调用即可。
3. 生成 Markdown 说明书,验证注册
保存配置后,生成 Markdown 格式的 Node 说明书:
命令加载项目配置,并在当前目录生成 midscene-node-reference.md。检查说明书是否包含:
- 可用 Node 列表中的
user.create。 - “创建测试用户数据文件。”这一操作说明。
name、email两个输入字段及其描述。
这一步验证 Node 是否已注册、输入 schema 是否可以导出,不会执行 Node 或创建用户数据。修改 Node 定义或注册配置后,可以重新生成说明书,供用例作者和 AI Agent 查阅。
Node 执行参数
Midscene Test 调用 execute() 时,会传入包含本次执行参数和运行信息的对象。可以通过 execute({ input, $, context }) 这样的解构写法,直接取出需要的字段。
业务参数与步骤配置
input 包含 Node 的 inputSchema 定义的业务参数。$ 包含框架处理的步骤配置,例如超时时间和发生错误后是否继续执行。
例如,为前面的 user.create 调用添加步骤配置:

