2.2 KiB
2.2 KiB
DataTest 架构
设计原则
- 需求是聚合根,文档、Metadata、案例、结果、指标和报告都绑定需求版本。
- 必须先获取真实 Metadata,再生成和校验测试案例。
- AI 只生成结构化草稿,确定性引擎负责安全校验、执行和断言。
- SwiftUI、CLI 和 MCP 共用同一个核心服务,避免行为分叉。
- 数据源、SQL 方言、指标采集器和断言均采用可替换边界。
组件
SwiftUI ─┐
CLI ─────┼→ DataTestService → Storage
MCP ─────┘ │ → SQLiteDataSource
├──────────→ DeterministicExecutor
└──────────→ CodexCLIAdapter
Storage
app.sqlite 保存需求版本、ETL 任务、Metadata 快照、案例版本、运行结果、结构化失败分析、指标和 Agent 调用审计。原始文档以及报告作为 artifact 保存,数据库记录路径和哈希。
Data source adapter
当前 SQLiteDataSource 将 source.sqlite 和 target.sqlite 分别附加为 ods 与 dwd。连接启用 query_only,Metadata 查询封装在适配器内部。
Case validation
执行前必须同时通过:案例名称、表字段存在性、只读 SQL、断言完整性以及审核状态校验。Agent 不能向运行工具提交临时 SQL。
AI adapter
Codex CLI 使用 JSON Schema 输出结构化结果。内部调用使用临时会话、不加载用户配置,并启用只读沙箱,避免继承 DataTest MCP 后递归调用。失败分析绑定具体运行结果、需求版本和同版本 Metadata;Agent 只提供调查结论,确定性执行器仍然独占测试状态判定。
MCP
MCP Server 使用 STDIO JSON-RPC。只读工具带有只读标记;运行、AI 生成和报告生成属于非破坏性写操作。
扩展路径
后续数据源适配器至少需要实现:
- Metadata 获取
- 方言和标识符规则
- 只读会话
- SQL 执行与取消
- 查询超时
- 查询计划与性能指标
- 分区、批次及数据新鲜度指标
Hive、Impala 和 Spark 专属能力不在 SQLite 中模拟,未实现的能力必须明确返回 UNSUPPORTED。