Files
httprunner/docs/architecture.md
2025-05-27 15:28:03 +08:00

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、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 插件
  • 自定义函数扩展
  • 动态加载插件

依赖关系图

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 既能满足当前的测试需求,又具备良好的扩展性和维护性。