mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-07 05:42:46 +08:00
docs: add architecture
This commit is contained in:
259
docs/architecture.md
Normal file
259
docs/architecture.md
Normal file
@@ -0,0 +1,259 @@
|
||||
# HttpRunner v5 项目模块功能及依赖关系分析
|
||||
|
||||
## 项目概述
|
||||
|
||||
HttpRunner v5 是一个开源的通用测试框架,采用 Go 语言编写,支持 API 接口测试、性能测试和 UI 自动化测试。项目融入了大模型技术,支持 Android/iOS/Harmony/Browser 多种系统平台的 UI 自动化测试。
|
||||
|
||||
## 核心架构
|
||||
|
||||
### 1. 主要模块结构
|
||||
|
||||
```
|
||||
httprunner/
|
||||
├── cmd/ # 命令行工具入口
|
||||
├── internal/ # 内部模块
|
||||
├── pkg/ # 公共包
|
||||
├── uixt/ # UI 测试扩展模块
|
||||
├── server/ # HTTP 服务器模块
|
||||
├── mcphost/ # MCP (Model Context Protocol) 主机模块
|
||||
├── examples/ # 示例代码
|
||||
├── tests/ # 测试用例
|
||||
└── docs/ # 文档
|
||||
```
|
||||
|
||||
## 详细模块分析
|
||||
|
||||
### 1. 命令行模块 (cmd/)
|
||||
|
||||
**功能**: 提供 `hrp` 命令行工具的各种子命令
|
||||
|
||||
**主要文件**:
|
||||
- `root.go` - 根命令定义和全局配置
|
||||
- `run.go` - 执行测试用例命令
|
||||
- `server.go` - 启动 HTTP 服务器命令
|
||||
- `convert.go` - 格式转换命令
|
||||
- `build.go` - 插件构建命令
|
||||
- `pytest.go` - Python pytest 集成命令
|
||||
- `mcphost.go` - MCP 主机命令
|
||||
- `scaffold.go` - 脚手架项目创建命令
|
||||
- `wiki.go` - 文档访问命令
|
||||
- `adb/` - Android 设备管理工具
|
||||
- `ios/` - iOS 设备管理工具
|
||||
|
||||
**依赖关系**:
|
||||
- 依赖 `github.com/spf13/cobra` 构建命令行界面
|
||||
- 调用各个核心模块的功能
|
||||
|
||||
### 2. 核心运行器模块
|
||||
|
||||
**主要文件**:
|
||||
- `runner.go` - 核心测试运行器,包含 HRPRunner、CaseRunner、SessionRunner
|
||||
- `testcase.go` - 测试用例定义和加载
|
||||
- `step.go` - 测试步骤接口定义
|
||||
- `step_*.go` - 各种类型的测试步骤实现
|
||||
|
||||
**功能**:
|
||||
- **HRPRunner**: 全局运行器,管理 HTTP 客户端、配置等
|
||||
- **CaseRunner**: 单个测试用例运行器,处理参数化和解析
|
||||
- **SessionRunner**: 会话运行器,执行具体的测试步骤
|
||||
|
||||
**支持的步骤类型**:
|
||||
- `step_request.go` - HTTP 请求步骤
|
||||
- `step_api.go` - API 调用步骤
|
||||
- `step_testcase.go` - 嵌套测试用例步骤
|
||||
- `step_websocket.go` - WebSocket 通信步骤
|
||||
- `step_ui.go` - UI 自动化步骤
|
||||
- `step_transaction.go` - 事务步骤
|
||||
- `step_rendezvous.go` - 集合点步骤
|
||||
- `step_thinktime.go` - 思考时间步骤
|
||||
- `step_shell.go` - Shell 命令步骤
|
||||
- `step_function.go` - 自定义函数步骤
|
||||
|
||||
### 3. 内部模块 (internal/)
|
||||
|
||||
**功能**: 提供内部工具和辅助功能
|
||||
|
||||
**主要子模块**:
|
||||
- `builtin/` - 内置函数和工具
|
||||
- `config/` - 配置管理
|
||||
- `json/` - JSON 处理工具
|
||||
- `sdk/` - SDK 相关功能
|
||||
- `version/` - 版本信息
|
||||
- `wiki/` - 文档相关
|
||||
- `scaffold/` - 脚手架模板
|
||||
- `httpstat/` - HTTP 统计
|
||||
- `utf7/` - UTF-7 编码处理
|
||||
|
||||
### 4. UI 测试扩展模块 (uixt/)
|
||||
|
||||
**功能**: 提供跨平台 UI 自动化测试能力
|
||||
|
||||
**核心文件**:
|
||||
- `driver.go` - 驱动器接口定义
|
||||
- `device.go` - 设备抽象接口
|
||||
- `android_*.go` - Android 平台实现
|
||||
- `ios_*.go` - iOS 平台实现
|
||||
- `harmony_*.go` - Harmony 平台实现
|
||||
- `browser_*.go` - 浏览器平台实现
|
||||
- `mcp_server.go` - MCP 服务器实现
|
||||
- `cache.go` - 缓存管理
|
||||
|
||||
**平台支持**:
|
||||
- **Android**: 基于 ADB 和 UIAutomator2
|
||||
- **iOS**: 基于 WebDriverAgent (WDA)
|
||||
- **Harmony**: 基于 HDC (Harmony Device Connector)
|
||||
- **Browser**: 基于 WebDriver 协议
|
||||
|
||||
**AI 集成**:
|
||||
- `driver_ext_ai.go` - AI 功能扩展
|
||||
- `ai/` - AI 相关模块
|
||||
|
||||
### 5. 公共包模块 (pkg/)
|
||||
|
||||
**功能**: 提供可复用的公共组件
|
||||
|
||||
**主要子模块**:
|
||||
- `gadb/` - Android ADB 工具包装
|
||||
- `go-ios/` - iOS 设备管理工具
|
||||
- `ghdc/` - Harmony HDC 工具包装
|
||||
|
||||
### 6. HTTP 服务器模块 (server/)
|
||||
|
||||
**功能**: 提供 Web 界面和 API 服务
|
||||
|
||||
**主要文件**:
|
||||
- `main.go` - 服务器主入口
|
||||
- `app.go` - 应用路由和中间件
|
||||
- `ui.go` - Web UI 处理
|
||||
- `device.go` - 设备管理 API
|
||||
- `uixt.go` - UI 测试 API
|
||||
- `context.go` - 上下文管理
|
||||
- `model.go` - 数据模型
|
||||
|
||||
### 7. MCP 主机模块 (mcphost/)
|
||||
|
||||
**功能**: 实现 Model Context Protocol 主机功能,支持大模型集成
|
||||
|
||||
**特点**:
|
||||
- 独立的 Git 仓库子模块
|
||||
- 提供与大模型的通信接口
|
||||
- 支持自然语言驱动的测试场景
|
||||
|
||||
### 8. 配置和解析模块
|
||||
|
||||
**主要文件**:
|
||||
- `config.go` - 全局配置管理
|
||||
- `parser.go` - 表达式解析器
|
||||
- `parameters.go` - 参数化处理
|
||||
- `loader.go` - 文件加载器
|
||||
|
||||
**功能**:
|
||||
- 支持 YAML/JSON 格式的测试用例
|
||||
- 变量替换和表达式计算
|
||||
- 参数化测试支持
|
||||
|
||||
### 9. 插件系统
|
||||
|
||||
**主要文件**:
|
||||
- `plugin.go` - 插件管理
|
||||
- `build.go` - 插件构建
|
||||
|
||||
**功能**:
|
||||
- 支持 Go 插件和 HashiCorp 插件
|
||||
- 自定义函数扩展
|
||||
- 动态加载插件
|
||||
|
||||
## 依赖关系图
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[cmd/] --> B[runner.go]
|
||||
A --> C[server/]
|
||||
A --> D[uixt/]
|
||||
|
||||
B --> E[testcase.go]
|
||||
B --> F[step_*.go]
|
||||
B --> G[parser.go]
|
||||
B --> H[config.go]
|
||||
|
||||
F --> D
|
||||
F --> I[plugin.go]
|
||||
|
||||
D --> J[pkg/gadb]
|
||||
D --> K[pkg/go-ios]
|
||||
D --> L[pkg/ghdc]
|
||||
|
||||
C --> B
|
||||
C --> D
|
||||
|
||||
M[mcphost/] --> N[AI Models]
|
||||
D --> M
|
||||
|
||||
O[internal/] --> B
|
||||
O --> C
|
||||
O --> D
|
||||
```
|
||||
|
||||
## 核心依赖库
|
||||
|
||||
### 外部依赖
|
||||
- **Web 框架**: `github.com/gin-gonic/gin`
|
||||
- **命令行**: `github.com/spf13/cobra`
|
||||
- **日志**: `github.com/rs/zerolog`
|
||||
- **WebSocket**: `github.com/gorilla/websocket`
|
||||
- **JSON 处理**: `github.com/bytedance/sonic`
|
||||
- **YAML 处理**: `gopkg.in/yaml.v3`
|
||||
- **插件系统**: `github.com/hashicorp/go-plugin`
|
||||
- **设备管理**: `github.com/danielpaulus/go-ios`
|
||||
- **AI 集成**: `github.com/cloudwego/eino`
|
||||
- **MCP 协议**: `github.com/mark3labs/mcp-go`
|
||||
|
||||
### 内部依赖
|
||||
- **函数插件**: `github.com/httprunner/funplugin`
|
||||
|
||||
## 数据流
|
||||
|
||||
1. **测试执行流程**:
|
||||
```
|
||||
hrp run → HRPRunner → CaseRunner → SessionRunner → Step执行
|
||||
```
|
||||
|
||||
2. **UI 测试流程**:
|
||||
```
|
||||
UI Step → uixt.Driver → 平台特定驱动 → 设备操作
|
||||
```
|
||||
|
||||
3. **配置解析流程**:
|
||||
```
|
||||
配置文件 → Loader → Parser → 变量替换 → 执行上下文
|
||||
```
|
||||
|
||||
## 扩展性设计
|
||||
|
||||
### 1. 插件系统
|
||||
- 支持 Go 原生插件和 HashiCorp 插件
|
||||
- 可扩展自定义函数和验证器
|
||||
- 动态加载和热更新
|
||||
|
||||
### 2. 平台扩展
|
||||
- 统一的 Driver 接口
|
||||
- 平台特定的实现
|
||||
- 易于添加新平台支持
|
||||
|
||||
### 3. 步骤类型扩展
|
||||
- IStep 接口设计
|
||||
- 可插拔的步骤类型
|
||||
- 支持自定义步骤实现
|
||||
|
||||
## 总结
|
||||
|
||||
HttpRunner v5 采用模块化设计,具有以下特点:
|
||||
|
||||
1. **高度模块化**: 清晰的模块边界和职责分离
|
||||
2. **跨平台支持**: 统一 API 支持多种平台
|
||||
3. **可扩展性**: 插件系统和接口设计支持功能扩展
|
||||
4. **AI 集成**: 通过 MCP 协议集成大模型能力
|
||||
5. **丰富的测试类型**: 支持 API、UI、性能等多种测试
|
||||
6. **现代化技术栈**: 使用 Go 语言和现代化的依赖库
|
||||
|
||||
该架构设计使得 HttpRunner 既能满足当前的测试需求,又具备良好的扩展性和维护性。
|
||||
@@ -1 +1 @@
|
||||
v5.0.0-beta-2505271342
|
||||
v5.0.0-beta-2505271528
|
||||
|
||||
Reference in New Issue
Block a user