1. 核心痛点与背景
- Context 膨胀与 Token 成本:在大型项目中,使 AI 编写或维护端到端(E2E)测试时,传统做法通常需要全量扫描源码或依赖高频的向量检索(RAG)。这导致 LLM 上下文(Context Window)急剧膨胀,Token 成本呈线性或指数级上升。
- 缺乏全局拓扑感知:传统的静态分析(如简单 Grep)无法有效建立 API 路由、数据库 Schema 与前端组件之间的深层依赖网络,导致 AI 生成的测试用例覆盖率不足,难以捕获跨模块的边界条件。
2. 方案架构:Graphify + Playwright MCP
本方案将测试流程解耦为上下文层(静态图谱分析)与执行层(动态代理驱动)。
- Graphify(上下文层):在本地利用 AST(抽象语法树)解析代码、SQL、文档等媒介,并通过 Leiden 社区检测算法进行聚类,在本地生成结构化的知识网络(
graph.json)。该过程不依赖 LLM API,仅在增量更新和概念提炼时低频调用。 - Playwright MCP(执行层):基于 Model Context Protocol (MCP),向大模型暴露标准的浏览器操纵工具(Tools)和自动化断言接口。
[本地源码] ──(AST/本地聚类)──> [graph.json] ──(注入)──> [Graphify MCP] ──┐├──> [LLM Client]
[浏览器/接口] <──────────────────(标准组件控制)───────────────── [Playwright MCP] ──┘
3. 核心应用场景与技术优势
3.1 基于拓扑依赖的精准用例生成
- 机制:LLM 优先通过
graphify-mcp读取轻量化的graph.json索引,快速定位特定接口(如/api/v1/order)对应的下游数据库字段(Schema)与上游调用组件。 - 优势:避免将所有源文件作为上下文喂给大模型。测试数据显示,由于减少了非必要代码的载入,单次会话的 Token 消耗最高可降低 70 倍以上。
3.2 智能流量拦截与 Mock(POM 优化)
- 机制:AI 获取图谱中前后端映射网络后,能够自动推导接口的强依赖项(如认证 Token 的传递路径、数据 Fixtures 的级联关系)。
- 优势:在编写 Playwright 脚本时,AI 能自主构建更精确的
page.route()拦截规则与单元测试桩(Mocks),提高 Page Object Model (POM) 的维护自动化度。
3.3 代码变更影响分析与精准回归(Change Impact Analysis)
- 机制:通过集成 Git Hook,在每次
git commit或merge时秒级增量更新graph.json。 - 优势:AI 通过图谱比对,仅需读取变更节点及其波及的邻居节点(Neighboring Nodes),即可精准指定 Playwright 执行受影响范围内的回归测试,杜绝全量测试带来的高额计算开销。
4. 环境配置与落地实现
4.1 生产图谱产物
在项目根目录下,使用Claude code执行,生成用于 AI 读取的结构化索引:
graphify .
# 产物:graphify-out/graph.json
4.2 MCP 客户端集成配置 (mcpServers.json)
{"mcpServers": {"graphify-context": {"command": "npx","args": ["-y", "@safishamsi/graphify-mcp", "--path", "./graphify-out/graph.json"]},"playwright-executor": {"command": "npx","args": ["-y", "playwright-mcp-server"]}}
}
4.3 提示词(Prompt)工程范例
System/User Prompt:
"1. 调用graphify-context工具,分析当前代码变更(基于最新graph.json)波及的 API 路由与前端组件。
2. 基于分析出的受影响路径,调用playwright-executor启动无头浏览器,对受影响页面执行端到端接口响应验证与回归断言。"
5. 结论
- 将项目全量上下文“图谱化(Graph化)”是解决 LLM 成本与精度瓶颈的必然趋势。Graphify 负责解决 AI 自动化测试中的大局观与 Token 开销问题,Playwright MCP 负责解决 环境落地与动态执行 问题。两者结合为生产环境提供了高可用、低成本的自主测试(Autonomous Testing)闭环。
- 当代码量超过百万生成的graph.json同样会超出LLM限制,需要多agent协助
6. 参考文献
https://github.com/safishamsi/graphify/blob/v8/docs/translations/README.zh-CN.md
