# AppPerformanceTesting **Repository Path**: taylortaurus/AppPerformanceTesting ## Basic Information - **Project Name**: AppPerformanceTesting - **Description**: APP性能测试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-17 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # APP性能测试框架 一个全面的Android APP性能测试框架,支持启动性能、内存、网络、电池、UI渲染等全方位的性能测试和监控。 ## 📋 目录 - [功能特性](#功能特性) - [项目结构](#项目结构) - [快速开始](#快速开始) - [配置说明](#配置说明) - [测试类型](#测试类型) - [使用示例](#使用示例) - [报告说明](#报告说明) - [常见问题](#常见问题) - [技术支持](#技术支持) ## ✨ 功能特性 ### 核心功能 - **启动性能测试**:冷启动、热启动时间测试 - **内存测试**:内存增长、内存泄漏检测 - **网络性能测试**:网络响应时间、流量监控 - **电池测试**:后台耗电、活跃使用耗电测试 - **UI渲染测试**:FPS测试、滚动性能测试 - **综合性能监控**:实时监控CPU、内存、网络、电池等多项指标 ### 性能指标 #### CPU指标 - CPU使用率(平均、峰值) - CPU用户态使用率 - CPU系统态使用率 - CPU IO等待 #### 内存指标 - 内存PSS(Proportional Set Size) - 内存RSS(Resident Set Size) - Java堆内存 - Native堆内存 - 图形内存 #### 网络指标 - 网络接收流量(总量、平均值) - 网络发送流量(总量、平均值) - 网络请求响应时间 - 网络成功率 #### 电池指标 - 电池电量消耗 - 电池温度 - 电池电压 - 电流消耗 #### 图形渲染指标 - FPS(帧率) - 卡顿帧数 - 平均帧时间 - P95帧时间 #### 系统资源指标 - **线程统计**: - 线程总数(平均值、峰值) - 线程分类统计(按名称分类、按状态分类) - 按名称分类:主线程、UI线程、网络线程、数据库线程、后台线程、异步线程、Native线程、GC线程、其他线程 - 按状态分类:运行中、睡眠、等待、僵尸、其他状态 - 文件描述符数量 - 磁盘读取/写入 ### 报告功能 - **HTML可视化报告**:包含图表、表格、状态指示 - **CSV数据导出**:原始性能数据 - **性能图表**:时间序列图表展示 - **中英文双语**:报告支持中英文显示 - **状态标识**:自动标记正常/警告/异常状态 ## 📁 项目结构 ``` AppPerformanceTesting/ ├── config/ # 配置文件目录 │ ├── test_config.yaml # 主配置文件 │ ├── devices.yaml # 设备配置文件 │ ├── config_loader.py # 配置加载器 │ └── environments/ # 环境配置 ├── core/ # 核心模块 │ ├── device_manager.py # 设备管理器(ADB交互) │ ├── performance_monitor.py # 性能监控器 │ └── report_generator.py # 报告生成器 ├── tests/ # 测试用例 │ ├── test_launch_performance.py # 启动性能测试 │ ├── test_memory_leak.py # 内存测试 │ ├── test_network_performance.py # 网络测试 │ ├── test_battery_consumption.py # 电池测试 │ └── test_ui_rendering.py # UI渲染测试 ├── utils/ # 工具类 │ ├── user_operations.py # 用户操作封装 │ └── ... ├── reports/ # 测试报告输出目录 ├── screenshots/ # 截图保存目录 ├── recordings/ # 录屏保存目录 ├── logs/ # 日志目录 ├── results/ # 测试结果目录 ├── run_tests.py # 测试运行器(主程序) ├── requirements.txt # Python依赖 └── README.md # 项目说明 ``` ## 🚀 快速开始 ### 1. 环境要求 - Python 3.8+ - Android SDK (ADB工具) - Android设备或模拟器(已开启USB调试) ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置设备 编辑 `config/test_config.yaml`,配置你的APP信息: ```yaml app: package_name: "com.example.app" # 你的APP包名 main_activity: "com.example.app.MainActivity" # 启动Activity app_name: "测试APP" app_version: "1.0.0" device: device_id: "AERFUT4628001125" # 设备ID(可通过 adb devices 查看) platform: "android" platform_version: "13.0" ``` ### 4. 运行测试 ```bash # 运行所有测试 python run_tests.py --test-type all --device-id YOUR_DEVICE_ID # 运行特定测试 python run_tests.py --test-type launch --device-id YOUR_DEVICE_ID python run_tests.py --test-type memory --device-id YOUR_DEVICE_ID python run_tests.py --test-type network --device-id YOUR_DEVICE_ID python run_tests.py --test-type battery --device-id YOUR_DEVICE_ID python run_tests.py --test-type ui --device-id YOUR_DEVICE_ID python run_tests.py --test-type monitor --device-id YOUR_DEVICE_ID # 列出可用设备 python run_tests.py --list-devices ``` ## ⚙️ 配置说明 ### 主配置文件 (`config/test_config.yaml`) #### 应用配置 ```yaml app: package_name: "com.example.app" main_activity: "com.example.app.MainActivity" app_name: "测试APP" app_version: "1.0.0" ``` #### 性能测试参数 ```yaml performance: launch_test: cold_launch_iterations: 10 # 冷启动测试次数 warm_launch_iterations: 10 # 热启动测试次数 launch_time_threshold_ms: 2000 # 启动时间阈值(毫秒) memory_test: operation_cycles: 10 # 操作循环次数 memory_growth_threshold_mb: 20 # 内存增长阈值(MB) monitoring: sampling_interval_sec: 1.0 # 采样间隔(秒) monitoring_duration_sec: 300 # 监控时长(秒) ``` #### 日志配置 ```yaml logging: level: "INFO" # 日志级别 file_enabled: true # 是否启用文件日志 file_path: "./logs/performance_tests.log" max_file_size_mb: 10 # 日志文件最大大小 backup_count: 5 # 日志备份数量 console_enabled: true # 是否启用控制台日志 ``` ## 🧪 测试类型 ### 1. 启动性能测试 (`launch`) 测试应用的冷启动和热启动时间。 **测试指标:** - 冷启动时间(平均、中位数、P95、P99) - 热启动时间(平均、中位数、P95、P99) - 所有启动时间记录 **示例:** ```bash python run_tests.py --test-type launch --device-id YOUR_DEVICE_ID ``` ### 2. 内存测试 (`memory`) 检测应用在多次操作后的内存增长情况。 **测试指标:** - 初始内存 - 操作后内存 - 内存增长量 - 内存泄漏检测 **示例:** ```bash python run_tests.py --test-type memory --device-id YOUR_DEVICE_ID ``` ### 3. 网络性能测试 (`network`) 测试应用的网络请求性能。 **测试指标:** - 网络响应时间 - 网络流量(接收/发送) - 请求成功率 - 慢请求统计 **示例:** ```bash python run_tests.py --test-type network --device-id YOUR_DEVICE_ID ``` ### 4. 电池测试 (`battery`) 测试应用的后台和活跃使用时的电池消耗。 **测试指标:** - 后台耗电(每小时) - 活跃使用耗电(每小时) - 电池温度 - 电流消耗 **示例:** ```bash python run_tests.py --test-type battery --device-id YOUR_DEVICE_ID ``` ### 5. UI渲染测试 (`ui`) 测试应用的UI渲染性能。 **测试指标:** - FPS(帧率) - 滚动性能 - 卡顿帧数 - 帧时间 **示例:** ```bash python run_tests.py --test-type ui --device-id YOUR_DEVICE_ID ``` ### 6. 综合性能监控 (`monitor`) 实时监控应用的多项性能指标。 **监控指标:** - CPU使用率(平均、峰值、用户态、系统态) - 内存使用(PSS、RSS、堆内存) - 网络流量(接收、发送) - 电池状态(电量、温度、电压、电流) - FPS和卡顿 - 磁盘IO - **线程统计和分类**: - 线程总数(平均值、峰值) - 按名称分类:主线程、UI线程、网络线程、数据库线程、后台线程、异步线程、Native线程、GC线程、其他线程 - 按状态分类:运行中、睡眠、等待、僵尸、其他状态 - 各类线程的数量和占比 - 文件描述符数量 **示例:** ```bash python run_tests.py --test-type monitor --device-id YOUR_DEVICE_ID ``` **线程分类说明:** 线程分类功能可以帮助你: - 了解应用的线程使用情况 - 识别线程泄漏问题(线程数量异常增长) - 分析线程类型分布(是否创建了过多不必要的线程) - 监控线程状态分布(是否有大量线程处于等待状态) - 优化线程管理策略 ## 📊 使用示例 ### 测试贷款APP(需要用户操作) 对于需要用户认证和填写资料的APP(如贷款APP),框架提供了专用的用户操作流程: 1. **配置应用信息** ```yaml app: package_name: "com.example.loanapp" main_activity: "com.example.loanapp.MainActivity" ``` 2. **自定义操作流程** 编辑 `utils/user_operations.py` 中的 `get_loan_app_operations()` 方法,根据实际APP调整操作坐标: ```python def get_loan_app_operations(self): return [ ("点击登录按钮", "shell input tap 977 2350"), ("输入手机号", "input_text:0912345678"), # 使用安全的文本输入 # ... 更多操作 ] ``` 3. **运行测试** ```bash python run_tests.py --test-type monitor --device-id YOUR_DEVICE_ID ``` 框架会自动: - 启动应用 - 等待应用完全加载 - 验证应用运行状态 - 执行用户操作流程(登录、填写资料等) - 监控性能指标 - 生成报告 ## 📈 报告说明 ### 报告位置 测试完成后,报告保存在 `reports/` 目录下,按时间戳命名: ``` reports/ └── full_report_20251217_103804/ ├── index.html # 主报告(HTML) ├── summary.txt # 文本摘要 ├── test_results.json # 测试结果(JSON) ├── test_config.json # 测试配置 ├── performance_report.html # 综合监控报告 ├── performance_charts.png # 性能图表 └── performance_data.csv # 性能数据(CSV) ``` ### 报告内容 #### HTML报告包含: 1. **测试结果表格** - 所有测试项的指标 - 状态标识(✅ 正常 / ⚠️ 警告 / ❌ 异常) - 中英文双语显示 2. **综合监控报告** - 性能图表(时间序列) - 摘要统计表格 - 详细指标表格 - **线程统计和分类表格**: - 线程统计表格:显示总线程数 - 按名称分类表格:显示各类线程的数量和占比 - 按状态分类表格:显示各状态线程的数量和占比 - CSV数据下载 3. **测试摘要** - 测试配置信息 - 设备信息 - 测试时间 ### 报告指标说明 - **CPU使用率**:应用占用的CPU百分比 - **内存PSS**:Proportional Set Size,按比例分配的内存 - **内存RSS**:Resident Set Size,实际占用的物理内存 - **网络接收/发送**:监控期间的网络流量增量 - **磁盘读取/写入**:监控期间的磁盘IO增量 - **卡顿帧数**:帧时间超过16.67ms的帧数 - **FPS**:每秒帧数,反映UI流畅度 - **线程统计**:进程中的线程总数 - **线程分类(按名称)**: - 主线程:应用主线程 - UI线程:UI渲染相关线程(RenderThread、Choreographer等) - 网络线程:网络请求相关线程(OkHttp、Http、Volley、Retrofit等) - 数据库线程:数据库操作线程(SQLite、DB等) - 后台线程:后台任务线程(Background、Worker、ThreadPool等) - 异步线程:异步任务线程(AsyncTask、Async、Executor、Handler等) - Native线程:Native代码线程 - GC线程:垃圾回收线程(GC、Finalizer、ReferenceQueue等) - 其他线程:未分类的线程 - **线程分类(按状态)**: - 运行中(Running):正在执行的线程 - 睡眠(Sleeping):等待中的线程 - 等待(Waiting):等待资源的线程 - 僵尸(Zombie):已结束但未清理的线程 - 其他:其他状态的线程 ## ❓ 常见问题 ### Q1: CPU使用率、网络流量等指标显示为0 **原因:** - 应用可能还未完全启动 - 应用没有实际运行(进程不存在) - 没有执行会触发网络请求的操作 **解决方案:** 1. 确保应用真正在前台运行 2. 执行会触发网络请求的用户操作 3. 检查日志文件 `logs/performance_tests.log` 查看详细信息 4. 增加等待时间,让应用完全加载 ### Q2: 如何获取UI元素的坐标? **方法1:使用UI Automator** ```bash adb shell uiautomator dump /sdcard/ui.xml adb pull /sdcard/ui.xml . # 查看ui.xml文件,找到元素的bounds属性 ``` **方法2:使用开发者选项** 1. 在手机上开启"指针位置"(开发者选项) 2. 点击UI元素,查看屏幕上的坐标 3. 记录坐标并更新到操作流程中 ### Q3: 输入文本时前导0丢失 **解决方案:** 使用 `input_text:` 前缀而不是 `shell input text`: ```python ("输入手机号", "input_text:0912345678") # ✅ 正确 ("输入手机号", "shell input text 0912345678") # ❌ 会丢失前导0 ``` ### Q4: 设备连接失败 **解决方案:** 1. 确保设备已通过USB连接 2. 确保已开启USB调试模式 3. 运行 `adb devices` 检查设备是否识别 4. 使用 `--list-devices` 查看可用设备 ### Q5: 如何查看日志? 日志文件保存在 `logs/performance_tests.log`,包含: - 测试执行过程 - 错误信息 - 性能数据采集详情 ### Q6: 线程统计和分类功能如何使用? **功能说明:** - 线程统计功能会自动收集应用进程中的所有线程信息 - 按线程名称进行智能分类(主线程、UI线程、网络线程等) - 按线程状态进行分类(运行中、睡眠、等待等) - 在综合监控报告中显示线程统计和分类表格 **查看方式:** 1. 运行综合性能监控测试:`python run_tests.py --test-type monitor --device-id YOUR_DEVICE_ID` 2. 在生成的报告中查看"线程统计"部分 3. 查看"按名称分类"表格了解线程类型分布 4. 查看"按状态分类"表格了解线程状态分布 **应用场景:** - 检测线程泄漏(线程数量异常增长) - 分析线程使用情况(是否创建了过多不必要的线程) - 优化线程管理策略 - 识别性能瓶颈(大量线程处于等待状态) ## 🔧 技术支持 ### 检查清单 如果遇到问题,请检查: 1. **ADB连接** ```bash adb devices ``` 2. **应用状态** ```bash adb shell dumpsys window windows | grep mCurrentFocus ``` 3. **日志文件** ```bash tail -f logs/performance_tests.log ``` 4. **配置文件** - 检查 `config/test_config.yaml` 配置是否正确 - 检查设备ID是否匹配 ### 依赖包 主要依赖包: - `pandas` - 数据处理 - `matplotlib` - 图表生成 - `pyyaml` - YAML配置解析 - `opencv-python` - 图像处理(可选,用于FPS分析) 完整依赖列表见 `requirements.txt` ## 📝 更新日志 ### v1.0.0 - ✅ 支持启动性能测试(冷启动、热启动) - ✅ 支持内存测试(内存增长、泄漏检测) - ✅ 支持网络性能测试 - ✅ 支持电池测试 - ✅ 支持UI渲染测试(FPS、滚动性能) - ✅ 支持综合性能监控 - ✅ HTML报告生成(中英文双语) - ✅ CSV数据导出 - ✅ 性能图表生成 - ✅ 日志系统 - ✅ 贷款APP专用操作流程 - ✅ 应用状态检测和等待机制 - ✅ 网络和磁盘IO增量计算 - ✅ CPU详细信息采集 - ✅ 线程统计和分类功能(按名称分类、按状态分类) ## 📄 许可证 本项目采用 MIT 许可证。 ## 👥 贡献 欢迎提交Issue和Pull Request! --- **注意:** 本框架主要用于Android APP性能测试,需要设备已开启USB调试模式。测试过程中会执行自动化操作,请确保测试环境安全。