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

2.0 KiB
Raw Blame History

Why

当前 expect 规则仅有 statusbodyContainsmaxLatencyMs 三条,无法满足 API 网关拨测中对 JSON 返回值字段校验、HTML 页面内容校验、响应头校验等常见需求。body 校验能力单薄(仅子串匹配),需要增强为多种可组合的校验方法,覆盖主流响应格式。

What Changes

  • 新增 headers 规则,支持按响应头键值对校验
  • 重构 body 校验:将独立的 bodyContains 移至 body 分组下,新增五种 body 校验方法:
    • contains:子串匹配(从原 bodyContains 迁移)
    • regex:正则表达式全文匹配
    • jsonJSONPath 提取值后比较
    • cssCSS 选择器提取 HTML 元素文本/属性后比较
    • xpathXPath 提取 XML/HTML 节点后比较
  • body 五种方法可任意组合AND 串联
  • 新增操作符系统:equals(默认)、containsmatch(正则)、emptyexistsgteltegtlt
  • 新增依赖:cheerioCSS 选择器)、xpath + @xmldom/xmldomXPath 引擎)
  • BREAKINGexpect.bodyContains 迁移至 expect.body.contains

Capabilities

New Capabilities

  • expect-body-checkersbody 响应校验方法集contains/regex/json/css/xpath及操作符系统

Modified Capabilities

  • probe-configexpect 配置 schema 变更,新增 headers/body 分组bodyContains 迁移
  • probe-enginecheckExpect 函数扩展,支持新的 body 校验方法和操作符

Impact

  • 类型定义:src/server/checker/types.tsExpectConfig/BodyExpectConfig/ExpectOperator
  • 配置加载:src/server/checker/config-loader.ts(解析新的 expect 结构)
  • 拨测执行:src/server/checker/fetcher.tscheckExpect 扩展)
  • 数据存储:src/server/checker/store.tsexpect JSON 序列化兼容)
  • 前端展示状态判定逻辑不变matched 字段语义不变)
  • 配置文件:probes.example.yaml(更新示例)
  • README.md更新配置文档
  • 依赖:package.json 新增 cheerio、xpath、@xmldom/xmldom