# 系统架构与设计模式 ## 核心架构:模型-上下文-协议 (MCP) 本系统严格遵循 MCP 定义的 **Host-Client-Server** 架构,旨在实现组件的终极解耦和高可扩展性。 ```mermaid graph TD subgraph TestRunnerApp [测试运行程序 (MCP Host)] style TestRunnerApp fill:#e6f2ff,stroke:#b3d9ff A[run_mcp_tests.py
(Host 实例)] A -- 1. 为每个测试任务
创建并管理Client会话 --> B A -- 4. 汇总所有Client的
结论,生成报告 --> E[最终测试报告] end subgraph AgentSession [独立的Agent会话 (MCP Client)] style AgentSession fill:#e6ffe6,stroke:#b3ffb3 B[Client 实例
(包含LLM的Agent核心)] B -- 2. 向Host请求
使用工具 --> D end subgraph Toolbelt [MCP工具集 (MCP Servers)] style Toolbelt fill:#fff0e6,stroke:#ffccb3 D[APICallerServer
DataGenServer
AssertionServer
...
] D -- 3. 执行操作
并将结果通过Host返回 --> B end ``` ## 组件职责详解 ### 1. MCP Host (测试运行程序) * **角色**: 整个测试流程的 **总控制器**、**安全边界** 和 **环境提供者**。它如同一个“办公室”环境,为 Agent 的工作提供场地、工具和规则。 * **职责**: * **流程编排**: 加载 API 规范和合规规则,生成测试任务列表,并为每个任务启动一个独立的、隔离的 Client 会话。 * **生命周期管理**: 负责创建、监督和销毁 Client 实例。如果某个 Agent 会话卡死或崩溃,Host 会终止它并继续下一个任务,确保整体流程的健壮性。 * **安全与路由**: 作为所有通信的中间人,它接收来自 Client 的工具调用请求,验证其权限,然后将其安全地路由到指定的 Server。它也负责将 Server 的结果返回给正确的 Client。**Client 和 Server 之间永不直接通信**。 ### 2. MCP Client (Agent 会话) * **角色**: 承载 **LLM(大语言模型)** 的执行实体,是 Agent 的“大脑”和“身体”的结合。 * **职责**: * **任务执行**: 从 Host 接收一个明确的测试目标。 * **推理规划**: 内部的 LLM 负责思考和规划,决定需要执行哪些步骤、调用哪些工具来达成测试目标。 * **与 Host 通信**: 将 LLM 的决策转化为对 Host 的标准 `call_tool` 请求。 * **状态保持**: 在会话内部维持短期的记忆和上下文,以完成连贯的、多步骤的测试逻辑。 ### 3. MCP Servers (工具集) * **角色**: 提供单一、原子化能力的 **功能模块**。每个 Server 都是一个独立的微服务。 * **职责**: * **提供能力**: 封装一种特定的能力,例如: * `APICallerServer`: 仅负责发起 HTTP 请求。 * `DataGeneratorServer`: 仅负责根据 Schema 生成数据。 * `AssertionServer`: 仅负责比较两个值是否相等。 * **无状态与隔离**: Server 本身是无状态的(或会话状态由 Host 管理),并且对其他 Server 和整个测试任务一无所知。这种设计确保了工具的高度可复用性和可独立测试性。 ## 设计模式应用 * **单一职责原则**: 每个组件(Host, Client, Server)和每个 Server 内部的工具都有单一、明确的职责。 * **策略模式**: 每个合规性规则可以被看作一种“策略”,Agent 根据不同的策略(规则目标)来组织其工具调用序列。 * **外观模式**: Host 为 Client 提供了一个统一的、简化的接口来访问背后复杂的工具集,Client 无需关心工具的具体位置和实现。 * **微服务架构**: 整个工具集由一系列独立的、可独立部署的 Server 构成,体现了微服务的思想,极大地提高了系统的灵活性和可维护性。