- 新增 body 分组校验:contains、regex、json(JSONPath)、css(CSS选择器)、xpath - 新增操作符系统:equals、contains、match、empty、exists、gte、lte、gt、lt - 新增 headers 响应头校验 - 引入 cheerio、xpath、@xmldom/xmldom 依赖 - BREAKING: expect.bodyContains 迁移至 expect.body.contains
3.6 KiB
3.6 KiB
Purpose
定义 HTTP 拨测工具的 YAML 配置文件格式、解析校验规则和 CLI 启动流程。
Requirements
Requirement: YAML 配置文件格式
系统 SHALL 支持通过 YAML 配置文件定义全部运行参数,包括 server 配置、数据目录、拨测默认值和拨测目标列表。
Scenario: 完整配置文件解析
- WHEN 系统启动并读取包含 server、defaults、targets 的 YAML 配置文件
- THEN 系统 SHALL 正确解析所有字段并用于初始化服务
Scenario: 最简配置文件解析
- WHEN 系统读取只包含 targets 列表的 YAML 配置文件(省略 server 和 defaults)
- THEN 系统 SHALL 使用内置默认值填充未指定的字段(host=127.0.0.1, port=3000, dir=./data, interval=30s, timeout=10s, method=GET)
Scenario: per-target 配置覆盖全局默认值
- WHEN 某个 target 指定了 interval、timeout 或 method
- THEN 该 target SHALL 使用其自身的值,不受 defaults 影响
Requirement: CLI 参数
系统 SHALL 通过单一命令行参数接受 YAML 配置文件路径。
Scenario: 指定配置文件启动
- WHEN 用户执行
./gateway-checker ./probes.yaml - THEN 系统 SHALL 读取并解析指定路径的 YAML 文件作为配置
Scenario: 未提供配置文件路径
- WHEN 用户启动程序时未提供任何命令行参数
- THEN 系统 SHALL 以错误退出并提示需要指定配置文件路径
Scenario: 配置文件不存在
- WHEN 用户指定的配置文件路径不存在
- THEN 系统 SHALL 以错误退出并提示文件不存在
Requirement: 配置校验
系统 SHALL 在启动时对 YAML 配置进行完整校验,校验失败时以非零状态退出并输出清晰的错误信息。
Scenario: target 缺少必填字段
- WHEN YAML 中某个 target 缺少 name 或 url 字段
- THEN 系统 SHALL 以错误退出,提示哪个 target 缺少哪个字段
Scenario: target name 重复
- WHEN YAML 中存在两个 name 相同的 target
- THEN 系统 SHALL 以错误退出,提示重复的 name
Scenario: interval 格式非法
- WHEN interval 或 timeout 值不是有效的时长格式(如
30s、5m) - THEN 系统 SHALL 以错误退出并提示格式错误
Requirement: YAML 配置使用 Bun 内置解析
系统 SHALL 使用 Bun 内置的 Bun.YAML.parse() 解析配置文件,不引入外部 YAML 解析库。
Scenario: 解析 YAML 内容
- WHEN 系统读取 YAML 文件内容
- THEN 系统 SHALL 调用
Bun.YAML.parse()将内容解析为配置对象
Requirement: expect 配置增强
系统 SHALL 支持增强的 expect 配置格式,包括 headers 响应头校验和 body 分组下的多种校验方法(contains、regex、json、css、xpath)。
Scenario: 解析增强的 expect 配置
- WHEN YAML 配置文件中 target 的 expect 包含 headers、body 分组及内部方法
- THEN 系统 SHALL 正确解析并存储为 ResolvedTarget 的 expect 字段
Scenario: 解析仅含 body.contains 的最简配置
- WHEN YAML 中 target 配置
expect.body.contains: "healthy" - THEN 系统 SHALL 正确解析,功能等价于旧版
expect.bodyContains
Scenario: 不配置 expect
- WHEN target 未配置任何 expect 规则
- THEN 系统 SHALL 正常处理,expect 字段为 undefined
Scenario: 旧版 bodyContains 字段不再支持
- WHEN YAML 中使用
expect.bodyContains: "xxx"格式 - THEN 该字段 SHALL 被忽略(系统仅识别
expect.body.contains) - Migration: 将配置文件中
expect.bodyContains: "xxx"改为expect.body.contains: "xxx"