1
0
Files
DiAL/openspec/changes/archive/2026-05-10-enhance-expect-rules/specs/probe-engine/spec.md

3.0 KiB
Raw Blame History

MODIFIED Requirements

Requirement: expect 校验

系统 SHALL 在拨测完成后根据目标的 expect 配置校验响应,校验结果记入 check result。

Scenario: 校验状态码

  • WHEN 目标配置了 expect.status: [200, 201]
  • THEN 系统 SHALL 检查响应状态码是否在列表中,将匹配结果记录到 matched 字段

Scenario: 校验响应头

  • WHEN 目标配置了 expect.headers: {"Content-Type": "application/json"}
  • THEN 系统 SHALL 检查响应头是否包含指定键值对,全部匹配时将 matched 设为 true

Scenario: 校验响应体包含

  • WHEN 目标配置了 expect.body.contains: "healthy"
  • THEN 系统 SHALL 检查响应体是否包含该文本,将匹配结果记录到 matched 字段

Scenario: 校验响应体正则

  • WHEN 目标配置了 expect.body.regex: '"status"\\s*:\\s*"ok"'
  • THEN 系统 SHALL 检查响应体是否匹配该正则,将匹配结果记录到 matched 字段

Scenario: 校验 JSON 响应

  • WHEN 目标配置了 expect.body.json: {"$.status": "ok"}
  • THEN 系统 SHALL 解析 JSON 并检查 JSONPath 对应值是否符合期望,将匹配结果记录到 matched 字段

Scenario: 校验 HTML 响应CSS 选择器)

  • WHEN 目标配置了 expect.body.css: {"div#health": "OK"}
  • THEN 系统 SHALL 解析 HTML 并用 CSS 选择器提取元素文本进行比较,将匹配结果记录到 matched 字段

Scenario: 校验 HTML/XML 响应XPath

  • WHEN 目标配置了 expect.body.xpath: {"/root/status/text()": "ok"}
  • THEN 系统 SHALL 解析文档并用 XPath 提取节点文本进行比较,将匹配结果记录到 matched 字段

Scenario: 校验延迟阈值

  • WHEN 目标配置了 expect.maxLatencyMs: 3000
  • THEN 系统 SHALL 检查实际延迟是否超过阈值,将匹配结果记录到 matched 字段

Scenario: 无 expect 配置

  • WHEN 目标未配置任何 expect 规则
  • THEN 系统 SHALL 将 matched 字段设为 true

Scenario: 多条 expect 规则

  • WHEN 目标同时配置了 status、headers、body.contains、body.json 和 maxLatencyMs
  • THEN 系统 SHALL 所有规则全部通过时 matched 为 true任一不通过则为 false

Scenario: 多种 body 方法 AND 组合

  • WHEN 目标在 body 分组下配置了 contains、json、css 多种方法
  • THEN 系统 SHALL 按 contains → regex → json → css → xpath 顺序执行,任一失败立即返回 false

ADDED Requirements

Requirement: Body 校验按需解析

系统 SHALL 仅在配置了对应 body 校验方法时才解析响应体为对应格式,避免不必要的解析开销。

Scenario: 仅配置 contains 时不解析 JSON

  • WHEN 目标仅配置 expect.body.contains 而未配置 json/css/xpath
  • THEN 系统 SHALL 不执行 JSON.parse 或 HTML/XML 解析

Scenario: 配置 json 时解析 JSON 失败

  • WHEN 目标配置了 expect.body.json 但响应体不是合法 JSON
  • THEN 系统 SHALL 判定 matched 为 false