1
0
Files
DiAL/openspec/changes/archive/2026-05-10-enhance-expect-rules/proposal.md

40 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
当前 expect 规则仅有 `status``bodyContains``maxLatencyMs` 三条,无法满足 API 网关拨测中对 JSON 返回值字段校验、HTML 页面内容校验、响应头校验等常见需求。body 校验能力单薄(仅子串匹配),需要增强为多种可组合的校验方法,覆盖主流响应格式。
## What Changes
- 新增 `headers` 规则,支持按响应头键值对校验
- 重构 body 校验:将独立的 `bodyContains` 移至 `body` 分组下,新增五种 body 校验方法:
- `contains`:子串匹配(从原 `bodyContains` 迁移)
- `regex`:正则表达式全文匹配
- `json`JSONPath 提取值后比较
- `css`CSS 选择器提取 HTML 元素文本/属性后比较
- `xpath`XPath 提取 XML/HTML 节点后比较
- body 五种方法可任意组合AND 串联
- 新增操作符系统:`equals`(默认)、`contains``match`(正则)、`empty``exists``gte``lte``gt``lt`
- 新增依赖:`cheerio`CSS 选择器)、`xpath` + `@xmldom/xmldom`XPath 引擎)
- **BREAKING**`expect.bodyContains` 迁移至 `expect.body.contains`
## Capabilities
### New Capabilities
- `expect-body-checkers`body 响应校验方法集contains/regex/json/css/xpath及操作符系统
### Modified Capabilities
- `probe-config`expect 配置 schema 变更,新增 headers/body 分组bodyContains 迁移
- `probe-engine`checkExpect 函数扩展,支持新的 body 校验方法和操作符
## Impact
- 类型定义:`src/server/checker/types.ts`ExpectConfig/BodyExpectConfig/ExpectOperator
- 配置加载:`src/server/checker/config-loader.ts`(解析新的 expect 结构)
- 拨测执行:`src/server/checker/fetcher.ts`checkExpect 扩展)
- 数据存储:`src/server/checker/store.ts`expect JSON 序列化兼容)
- 前端展示状态判定逻辑不变matched 字段语义不变)
- 配置文件:`probes.example.yaml`(更新示例)
- README.md更新配置文档
- 依赖:`package.json` 新增 cheerio、xpath、@xmldom/xmldom