mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-07 06:22:43 +08:00
6.9 KiB
6.9 KiB
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、SessionRunnertestcase.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- 设备管理 APIuixt.go- UI 测试 APIcontext.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 插件
- 自定义函数扩展
- 动态加载插件
依赖关系图
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
数据流
-
测试执行流程:
hrp run → HRPRunner → CaseRunner → SessionRunner → Step执行 -
UI 测试流程:
UI Step → uixt.Driver → 平台特定驱动 → 设备操作 -
配置解析流程:
配置文件 → Loader → Parser → 变量替换 → 执行上下文
扩展性设计
1. 插件系统
- 支持 Go 原生插件和 HashiCorp 插件
- 可扩展自定义函数和验证器
- 动态加载和热更新
2. 平台扩展
- 统一的 Driver 接口
- 平台特定的实现
- 易于添加新平台支持
3. 步骤类型扩展
- IStep 接口设计
- 可插拔的步骤类型
- 支持自定义步骤实现
总结
HttpRunner v5 采用模块化设计,具有以下特点:
- 高度模块化: 清晰的模块边界和职责分离
- 跨平台支持: 统一 API 支持多种平台
- 可扩展性: 插件系统和接口设计支持功能扩展
- AI 集成: 通过 MCP 协议集成大模型能力
- 丰富的测试类型: 支持 API、UI、性能等多种测试
- 现代化技术栈: 使用 Go 语言和现代化的依赖库
该架构设计使得 HttpRunner 既能满足当前的测试需求,又具备良好的扩展性和维护性。