396 lines
11 KiB
Markdown
396 lines
11 KiB
Markdown
|
|
# 🚀 企业级UI测试工具
|
|||
|
|
|
|||
|
|
基于Appium的Android应用UI测试工具,采用模块化架构设计,支持实时截图、XML布局分析、视觉比对、性能监控、智能报告生成等企业级功能。
|
|||
|
|
|
|||
|
|
## ✨ 核心特性
|
|||
|
|
|
|||
|
|
### 🎯 主要功能
|
|||
|
|
- **🔄 零配置启动**: 自动创建目录结构,开箱即用
|
|||
|
|
- **📸 实时截图**: 快速捕获当前屏幕状态,支持批量操作
|
|||
|
|
- **🔍 智能分析**: XML布局深度解析,自动识别UI问题
|
|||
|
|
- **👁️ 视觉验证**: 纯图像像素级对比,检查UI外观效果
|
|||
|
|
- **📐 布局比对**: XML-SVG结构比对,验证布局逻辑一致性
|
|||
|
|
- **⚡ 性能优化**: 实时监控操作响应时间和设备状态
|
|||
|
|
- **📊 详细报告**: 生成JSON/HTML格式的专业测试报告
|
|||
|
|
|
|||
|
|
### 🏗️ 模块化架构
|
|||
|
|
|
|||
|
|
项目采用清晰的模块化设计,便于维护和扩展:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
📁 项目结构
|
|||
|
|
├── 📄 ui_test.py # 主程序入口和交互界面
|
|||
|
|
├── ⚙️ config.py # 统一配置管理
|
|||
|
|
├── 🔍 xml_analyzer.py # XML布局分析模块
|
|||
|
|
├── 👁️ visual_comparator.py # 视觉比对分析模块
|
|||
|
|
├── 📊 test_reporter.py # 测试报告生成模块
|
|||
|
|
├── 📋 requirements.txt # 项目依赖
|
|||
|
|
├── 📖 README.md # 项目文档
|
|||
|
|
├── 📁 screenshots/ # 截图保存目录
|
|||
|
|
├── 📁 xml_layouts/ # XML布局保存目录
|
|||
|
|
├── 📁 design_references/ # 设计参考图目录 (SVG格式)
|
|||
|
|
├── 📁 visual_comparisons/ # 视觉对比结果目录
|
|||
|
|
└── 📁 reports/ # 测试报告目录
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 🔧 模块功能详解
|
|||
|
|
|
|||
|
|
#### 📋 Config (config.py)
|
|||
|
|
- 统一配置管理
|
|||
|
|
- Appium连接设置
|
|||
|
|
- 目录路径配置
|
|||
|
|
- 热键映射定义
|
|||
|
|
- 分析参数调优
|
|||
|
|
|
|||
|
|
#### 🔍 XMLAnalyzer (xml_analyzer.py)
|
|||
|
|
- XML结构解析
|
|||
|
|
- SVG文件解析和元素提取
|
|||
|
|
- XML-SVG布局结构比对
|
|||
|
|
- 无障碍性问题检测
|
|||
|
|
- 重复ID识别
|
|||
|
|
- 空文本元素检查
|
|||
|
|
- 元素统计分析
|
|||
|
|
- 数据导出 (JSON/CSV)
|
|||
|
|
|
|||
|
|
#### 👁️ VisualComparator (visual_comparator.py)
|
|||
|
|
- 多格式图像支持 (PNG/JPG/SVG)
|
|||
|
|
- 智能图像尺寸处理(保持宽高比)
|
|||
|
|
- SSIM相似度计算
|
|||
|
|
- 差异区域检测
|
|||
|
|
- 自动图像调整
|
|||
|
|
- 批量比对处理
|
|||
|
|
- 结果可视化
|
|||
|
|
|
|||
|
|
#### 📊 TestReporter (test_reporter.py)
|
|||
|
|
- 专业HTML报告
|
|||
|
|
- JSON数据导出
|
|||
|
|
- 多维度分析
|
|||
|
|
- 性能数据统计
|
|||
|
|
- 问题汇总建议
|
|||
|
|
- 自定义模板支持
|
|||
|
|
|
|||
|
|
## 🛠️ 安装配置
|
|||
|
|
|
|||
|
|
### 环境要求
|
|||
|
|
- Python 3.8+
|
|||
|
|
- Android SDK
|
|||
|
|
- Appium Server
|
|||
|
|
|
|||
|
|
### 依赖安装
|
|||
|
|
```bash
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 主要依赖
|
|||
|
|
```
|
|||
|
|
Appium-Python-Client>=3.1.0 # Appium客户端
|
|||
|
|
keyboard>=0.13.5 # 热键支持
|
|||
|
|
opencv-python>=4.8.0 # 图像处理
|
|||
|
|
scikit-image>=0.21.0 # 图像分析
|
|||
|
|
lxml>=4.9.0 # XML解析
|
|||
|
|
jinja2>=3.1.0 # 报告模板
|
|||
|
|
cairosvg>=2.7.0 # SVG处理
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 1. 启动Appium服务器
|
|||
|
|
```bash
|
|||
|
|
appium
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 连接设备
|
|||
|
|
- 连接Android设备或启动模拟器
|
|||
|
|
- 确保ADB可访问设备
|
|||
|
|
|
|||
|
|
### 3. 运行测试工具
|
|||
|
|
```bash
|
|||
|
|
python ui_test.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 配置应用信息
|
|||
|
|
在 `config.py` 中修改目标应用配置:
|
|||
|
|
```python
|
|||
|
|
DEVICE_CAPABILITIES = {
|
|||
|
|
'platformName': 'Android',
|
|||
|
|
'automationName': 'uiautomator2',
|
|||
|
|
'deviceName': 'your-device-name',
|
|||
|
|
'appPackage': 'com.your.app',
|
|||
|
|
'appActivity': '.MainActivity'
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎮 操作指南
|
|||
|
|
|
|||
|
|
### 热键操作
|
|||
|
|
| 热键 | 功能 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| **F1** | 📸 截图 | 保存当前屏幕截图 |
|
|||
|
|
| **F2** | 📄 XML布局 | 保存页面XML结构 |
|
|||
|
|
| **F3** | 📱 应用信息 | 获取当前应用和Activity |
|
|||
|
|
| **F4** | 🔍 元素信息 | 显示页面元素详情 |
|
|||
|
|
| **F5** | 👁️ 视觉比对 | 纯图像视觉对比(仅外观检查) |
|
|||
|
|
| **F6** | 🔍 XML分析 | XML结构分析 + SVG布局比对 |
|
|||
|
|
| **F7** | ⚡ 性能监控 | 监控操作性能 |
|
|||
|
|
| **F8** | 🖱️ 元素点击 | 智能元素交互 |
|
|||
|
|
| **F9** | 📊 生成报告 | 创建测试报告 |
|
|||
|
|
| **Ctrl+Q** | 🚪 退出 | 安全退出程序 |
|
|||
|
|
|
|||
|
|
### 命令行操作
|
|||
|
|
```bash
|
|||
|
|
# 基础操作
|
|||
|
|
help # 显示帮助信息
|
|||
|
|
status # 显示连接状态
|
|||
|
|
reconnect # 重新连接设备
|
|||
|
|
|
|||
|
|
# 功能操作
|
|||
|
|
screenshot # 截图 (或输入 1)
|
|||
|
|
xml # 保存XML (或输入 2)
|
|||
|
|
activity # 应用信息 (或输入 3)
|
|||
|
|
elements # 元素信息 (或输入 4)
|
|||
|
|
compare # 视觉比对 - 纯图像对比 (或输入 5)
|
|||
|
|
layout # XML-SVG布局比对 - 专门的结构对比
|
|||
|
|
analyze # XML分析和布局比对 (或输入 6)
|
|||
|
|
performance # 性能监控 (或输入 7)
|
|||
|
|
click # 元素点击 (或输入 8)
|
|||
|
|
report # 生成报告 (或输入 9)
|
|||
|
|
|
|||
|
|
# 退出程序
|
|||
|
|
quit # 退出 (或输入 q)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 功能详解
|
|||
|
|
|
|||
|
|
### 🎯 功能分工说明
|
|||
|
|
|
|||
|
|
#### 👁️ F5 - 视觉比对 (`compare`)
|
|||
|
|
- **专注功能**: 纯视觉图像比对
|
|||
|
|
- **适用场景**: 检查UI外观、颜色、布局视觉效果
|
|||
|
|
- **操作流程**:
|
|||
|
|
1. 自动截图
|
|||
|
|
2. 与设计图进行像素级比对
|
|||
|
|
3. 显示相似度和差异区域
|
|||
|
|
4. 生成可视化比对结果
|
|||
|
|
- **输出结果**: 相似度评分、差异区域标注图
|
|||
|
|
|
|||
|
|
#### 🔍 F6 - XML分析和布局比对 (`analyze`)
|
|||
|
|
- **专注功能**: XML结构分析 + SVG布局比对
|
|||
|
|
- **适用场景**: 检查页面结构、元素层级、布局逻辑
|
|||
|
|
- **操作流程**:
|
|||
|
|
1. 保存并分析XML布局
|
|||
|
|
2. 自动截图(用于报告)
|
|||
|
|
3. 如果有SVG设计图,进行结构比对
|
|||
|
|
4. 生成综合测试报告
|
|||
|
|
- **输出结果**: XML分析报告、布局匹配度、测试报告
|
|||
|
|
|
|||
|
|
#### 📐 layout命令 - 专门布局比对
|
|||
|
|
- **专注功能**: 纯XML-SVG结构比对
|
|||
|
|
- **适用场景**: 专门检查布局结构一致性
|
|||
|
|
- **操作流程**: 直接进行XML和SVG的结构对比
|
|||
|
|
- **输出结果**: 元素匹配情况、结构相似度
|
|||
|
|
|
|||
|
|
### 🔍 XML分析功能
|
|||
|
|
- **结构解析**: 完整的UI层级结构分析
|
|||
|
|
- **问题检测**:
|
|||
|
|
- 无障碍性问题 (缺少contentDescription)
|
|||
|
|
- 重复资源ID
|
|||
|
|
- 空文本元素
|
|||
|
|
- 尺寸异常元素
|
|||
|
|
- **统计信息**: 元素类型分布、层级深度等
|
|||
|
|
- **数据导出**: 支持JSON和CSV格式
|
|||
|
|
|
|||
|
|
### 👁️ 视觉比对功能
|
|||
|
|
- **多格式支持**: 专门优化SVG格式处理
|
|||
|
|
- **智能对比**:
|
|||
|
|
- SSIM结构相似性分析
|
|||
|
|
- 差异区域自动标注
|
|||
|
|
- 相似度评分
|
|||
|
|
- **批量处理**: 支持多个设计图同时比对
|
|||
|
|
- **结果可视化**: 生成直观的对比图像
|
|||
|
|
|
|||
|
|
### 📊 报告生成功能
|
|||
|
|
- **HTML报告**:
|
|||
|
|
- 专业样式设计
|
|||
|
|
- 交互式图表
|
|||
|
|
- 详细问题分析
|
|||
|
|
- 改进建议
|
|||
|
|
- **JSON数据**: 结构化数据导出
|
|||
|
|
- **多维度分析**:
|
|||
|
|
- XML结构分析
|
|||
|
|
- 视觉比对结果
|
|||
|
|
- 性能监控数据
|
|||
|
|
- 问题汇总统计
|
|||
|
|
|
|||
|
|
### ⚡ 性能监控功能
|
|||
|
|
- **响应时间**: 操作执行时间统计
|
|||
|
|
- **设备状态**: CPU、内存使用情况
|
|||
|
|
- **操作历史**: 详细的操作记录
|
|||
|
|
- **性能趋势**: 长期性能变化分析
|
|||
|
|
|
|||
|
|
## 🎯 使用场景
|
|||
|
|
|
|||
|
|
### 📱 UI测试验证
|
|||
|
|
- **视觉回归测试**: 使用F5进行纯图像对比,检查UI外观变化
|
|||
|
|
- **布局结构验证**: 使用F6进行XML-SVG结构比对,确保布局逻辑正确
|
|||
|
|
- **专项布局测试**: 使用`layout`命令专门检查XML和SVG的结构一致性
|
|||
|
|
- **性能监控**: 实时监控UI操作响应时间
|
|||
|
|
|
|||
|
|
### 🔍 问题诊断
|
|||
|
|
- **XML结构分析**: 深度解析页面层级,发现结构问题
|
|||
|
|
- **无障碍性检查**: 自动检测缺失的accessibility属性
|
|||
|
|
- **重复元素识别**: 发现重复ID和空文本元素
|
|||
|
|
- **视觉差异定位**: 精确标注UI变化区域
|
|||
|
|
|
|||
|
|
### 📊 测试报告
|
|||
|
|
- **综合分析报告**: F6生成包含XML分析和布局比对的完整报告
|
|||
|
|
- **视觉比对报告**: F5生成专门的图像对比结果
|
|||
|
|
- **性能数据统计**: 操作响应时间和设备状态监控
|
|||
|
|
- **多格式导出**: 支持JSON、CSV、HTML格式
|
|||
|
|
|
|||
|
|
### 🔄 自动化测试
|
|||
|
|
```python
|
|||
|
|
from ui_test import InteractiveUITester
|
|||
|
|
from config import Config
|
|||
|
|
|
|||
|
|
# 初始化测试器
|
|||
|
|
tester = InteractiveUITester()
|
|||
|
|
tester.connect_device()
|
|||
|
|
|
|||
|
|
# 执行测试流程
|
|||
|
|
tester.take_screenshot()
|
|||
|
|
tester.save_xml_layout()
|
|||
|
|
tester.compare_with_design()
|
|||
|
|
tester.generate_report()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 📊 批量分析
|
|||
|
|
```python
|
|||
|
|
# 批量视觉比对
|
|||
|
|
comparator = VisualComparator()
|
|||
|
|
results = comparator.batch_compare_screenshots()
|
|||
|
|
|
|||
|
|
# 生成综合报告
|
|||
|
|
reporter = TestReporter()
|
|||
|
|
reporter.add_visual_comparison_data(results)
|
|||
|
|
reporter.generate_html_report()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 🔍 深度分析
|
|||
|
|
```python
|
|||
|
|
# XML深度分析
|
|||
|
|
analyzer = XMLAnalyzer()
|
|||
|
|
analysis_result = analyzer.analyze_xml_file('layout.xml')
|
|||
|
|
issues = analyzer.check_accessibility_issues()
|
|||
|
|
stats = analyzer.get_element_statistics()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 高级配置
|
|||
|
|
|
|||
|
|
### 📁 目录结构
|
|||
|
|
```
|
|||
|
|
appium_ui_test/
|
|||
|
|
├── screenshots/ # 截图文件
|
|||
|
|
├── xml_layouts/ # XML布局文件
|
|||
|
|
├── designs/ # 设计图文件 (PNG/JPG/SVG)
|
|||
|
|
├── reports/ # 测试报告
|
|||
|
|
├── logs/ # 日志文件
|
|||
|
|
└── temp/ # 临时文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 🎨 设计文件支持
|
|||
|
|
- **图像格式**: PNG、JPG(用于视觉比对)
|
|||
|
|
- **矢量格式**: SVG(支持视觉比对 + 布局结构比对)
|
|||
|
|
- **命名规则**: 建议使用描述性文件名
|
|||
|
|
- **SVG优势**:
|
|||
|
|
- 支持双重比对(视觉 + 结构)
|
|||
|
|
- 可缩放无损质量
|
|||
|
|
- 包含布局元素信息
|
|||
|
|
|
|||
|
|
### 自定义分析规则
|
|||
|
|
在 `config.py` 中调整分析参数:
|
|||
|
|
```python
|
|||
|
|
XML_ANALYSIS = {
|
|||
|
|
'check_accessibility': True,
|
|||
|
|
'check_duplicate_ids': True,
|
|||
|
|
'check_empty_text': True,
|
|||
|
|
'min_element_size': 10,
|
|||
|
|
'max_nesting_level': 15
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 视觉比对优化
|
|||
|
|
```python
|
|||
|
|
VISUAL_COMPARISON = {
|
|||
|
|
'similarity_threshold': 0.95,
|
|||
|
|
'diff_threshold': 50,
|
|||
|
|
'min_diff_area': 100,
|
|||
|
|
'supported_formats': ['.svg']
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 报告自定义
|
|||
|
|
```python
|
|||
|
|
REPORT = {
|
|||
|
|
'include_screenshots': True,
|
|||
|
|
'include_xml_analysis': True,
|
|||
|
|
'include_visual_comparison': True,
|
|||
|
|
'include_performance_data': True,
|
|||
|
|
'template_style': 'professional'
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚨 故障排除
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
1. **连接失败**
|
|||
|
|
- 检查Appium服务器状态
|
|||
|
|
- 验证设备连接和ADB访问
|
|||
|
|
- 确认设备名称配置正确
|
|||
|
|
|
|||
|
|
2. **模块导入错误**
|
|||
|
|
- 安装所有必需依赖: `pip install -r requirements.txt`
|
|||
|
|
- 检查Python版本兼容性
|
|||
|
|
- 验证虚拟环境激活状态
|
|||
|
|
|
|||
|
|
3. **视觉比对失败**
|
|||
|
|
- 确保设计图为SVG格式
|
|||
|
|
- 检查图像文件路径
|
|||
|
|
- 验证cairosvg依赖安装
|
|||
|
|
|
|||
|
|
4. **报告生成失败**
|
|||
|
|
- 检查输出目录权限
|
|||
|
|
- 验证Jinja2模板完整性
|
|||
|
|
- 确认数据格式正确性
|
|||
|
|
|
|||
|
|
### 功能选择指导
|
|||
|
|
- **只需要检查UI外观**: 使用F5(视觉比对)
|
|||
|
|
- **需要检查布局结构**: 使用F6(XML分析+布局比对)
|
|||
|
|
- **专门比对XML和SVG结构**: 使用`layout`命令
|
|||
|
|
- **SVG文件**: 自动支持双重比对(视觉+结构)
|
|||
|
|
- **PNG/JPG文件**: 仅支持视觉比对
|
|||
|
|
|
|||
|
|
### 调试模式
|
|||
|
|
启用详细日志输出:
|
|||
|
|
```python
|
|||
|
|
import logging
|
|||
|
|
logging.basicConfig(level=logging.DEBUG)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🤝 贡献指南
|
|||
|
|
|
|||
|
|
欢迎提交Issue和Pull Request来改进项目!
|
|||
|
|
|
|||
|
|
### 开发环境设置
|
|||
|
|
1. Fork项目仓库
|
|||
|
|
2. 创建功能分支
|
|||
|
|
3. 安装开发依赖
|
|||
|
|
4. 运行测试套件
|
|||
|
|
5. 提交代码变更
|
|||
|
|
|
|||
|
|
## 📄 许可证
|
|||
|
|
|
|||
|
|
本项目采用MIT许可证,详见LICENSE文件。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**🎉 享受高效的UI测试体验!**
|