# 系统架构与设计模式
## 核心架构:模型-上下文-协议 (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 构成,体现了微服务的思想,极大地提高了系统的灵活性和可维护性。