# app-perf-agent **Repository Path**: aiagentdemo/app-perf-agent ## Basic Information - **Project Name**: app-perf-agent - **Description**: App 性能测试 AI Agent - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-20 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # App 性能测试 AI Agent AI 驱动的移动端 App 性能测试平台,支持 Android / iOS 设备,通过大模型自动生成测试用例、实时采集性能指标、流式输出分析报告。平台支持上传 Skill 技能包与登记 MCP 工具,在生成用例与分析报告时由大模型自动参考。 ## 界面预览 ![App 性能测试 AI Agent](./docs/screenshot.png) ## 功能概览 - **设备管理**:自动扫描已连接的 Android(ADB)和 iOS(tidevice)设备,顶部 Tab 切换平台查看,点击查看设备详情 - **项目管理**:以卡片管理测试项目,进入项目可查看历次测试结果与各项性能指标均值;「新建项目」进入单页分步向导,串联项目信息→选设备→生成用例→确认时长→实时监控→测试报告全流程 - **用例生成**:输入 App 名称和测试目标,LLM 流式生成性能测试用例 - **实时监控**:WebSocket 推送 CPU / 内存 / FPS / 网络 / 电量 / 温度,ECharts 实时折线图 - **智能报告**:测试结束后 LLM 自动分析数据,流式输出 Markdown 格式的性能报告 - **技能管理(Skill)**:以卡片展示技能,支持 zip 技能包上传,查看 SKILL.md 内容与相关文件,启用/禁用、删除 - **MCP 管理**:以卡片展示 MCP 工具,支持登记新增(名称/描述/传输方式/命令/JSON 配置),启用/禁用、删除 - **自动参考 Skill / MCP**:生成用例与分析报告时,后端按测试目标关键词自动匹配最相关的已启用 Skill / MCP,将其内容与工具能力注入提示词,并在界面标注「已自动参考」 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Python 3.10+ · FastAPI · uvicorn · OpenAI SDK · aiosqlite | | 前端 | Vue 3 · TypeScript · Vite · Vue Router · ECharts · markdown-it | | 设备 | ADB(Android)· tidevice(iOS) | ## 目录结构 ``` app-perf-agent/ ├── backend/ │ ├── main.py # FastAPI 入口,注册全部路由 │ ├── config.py # 环境变量配置 │ ├── db.py # aiosqlite 数据访问层(项目/会话/快照/配置/技能/MCP) │ ├── routers/ # 路由层 │ │ ├── devices.py # GET /api/devices │ │ ├── cases.py # POST /api/cases/generate (SSE,含 meta 事件) │ │ ├── sessions.py # POST/GET/DELETE /api/sessions │ │ ├── reports.py # GET /api/reports/{id} (SSE,含 meta 事件) │ │ ├── projects.py # 项目 CRUD 与历史会话 │ │ ├── config.py # LLM 模型配置读写 │ │ ├── skills.py # 技能列表/详情/上传/启用/删除 │ │ └── mcp.py # MCP 列表/新增/启用/删除 │ ├── collectors/ # 性能采集器 │ │ ├── android.py # ADB 采集 │ │ └── ios.py # tidevice 采集 │ ├── services/ # 业务逻辑 │ │ ├── llm_service.py # OpenAI 封装(按场景选模型) │ │ ├── case_generator.py # 用例生成(注入 augmentation) │ │ ├── session_manager.py # 会话管理 │ │ ├── report_analyzer.py # 数据分析 + 报告生成(注入 augmentation) │ │ ├── skill_store.py # 技能 zip 解压 / SKILL.md 解析 / 文件列举 │ │ └── augment.py # 自动匹配 Skill/MCP 并生成注入提示词 │ ├── skills_store/ # 上传的技能包解压存放目录(运行时生成) │ ├── models/schemas.py # Pydantic 数据模型 │ ├── requirements.txt │ └── .env.example └── frontend/ ├── src/ │ ├── views/ # 页面组件 │ │ ├── DevicesView.vue # 设备管理(Android/iOS Tab) │ │ ├── ProjectsView.vue # 项目管理(卡片列表) │ │ ├── ProjectDetailView.vue # 项目详情(历史会话与指标) │ │ ├── NewProjectWizard.vue # 新建项目单页分步向导 │ │ ├── ReportView.vue # 历史测试报告 │ │ ├── SkillsView.vue # 技能管理 │ │ ├── McpView.vue # MCP 管理 │ │ └── SettingsView.vue # 模型设置 │ ├── components/ # 通用组件 │ │ ├── DeviceCard.vue │ │ ├── MetricChart.vue │ │ ├── MetricSummaryCard.vue │ │ └── StreamText.vue │ ├── styles/theme.css # 全局设计系统(浅色 · 紫蓝渐变) │ ├── api/index.ts # HTTP / WebSocket / SSE 封装 │ └── router/index.ts ├── package.json └── vite.config.ts ``` ## 快速开始 ### 前置条件 - Python 3.10+ - Node.js 18+ - Android 设备:已安装 [ADB](https://developer.android.com/tools/adb),设备开启 USB 调试 - iOS 设备(可选):macOS + 已安装 [tidevice](https://github.com/alibaba/taobao-iphone-device) ### 1. 配置环境变量 ```bash cp backend/.env.example backend/.env ``` 编辑 `backend/.env`,填入你的 OpenAI API Key(支持任何兼容 OpenAI 接口的服务): ```env OPENAI_API_KEY=your_key_here OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_MODEL=gpt-4o HOST=0.0.0.0 PORT=8000 ``` ### 2. 启动后端 ```bash cd backend pip install -r requirements.txt python main.py ``` 后端启动后访问 `http://localhost:8000/docs` 可查看 API 文档。 ### 3. 启动前端 新开一个终端: ```bash cd frontend npm install npm run dev ``` 打开浏览器访问 `http://localhost:5173`。 ## 使用流程 界面采用左侧菜单栏布局,含「设备管理」「项目管理」「技能管理」「MCP 管理」「模型设置」五个入口。 完整测试流程在「项目管理 → 新建项目」的单页分步向导中串联完成: ``` ① 项目与设备:填写项目名称/描述 → 顶部 Tab 切换 Android/iOS → 选择测试设备 ↓ ② 生成用例:填写 App 名称/包名/测试目标 → LLM 流式生成用例(自动参考相关 Skill/MCP) ↓ ③ 确认执行:逐条查看用例、调整执行时长 → 确认并开始测试 ↓ ④ 实时监控:WebSocket 推送性能曲线 + 进度条 ↓ ⑤ 测试报告:自动进入,LLM 流式分析(自动参考相关 Skill/MCP,标注已参考项) ``` 历史记录可在「项目管理 → 项目详情」中查看每次会话的状态与 CPU/内存/FPS 均值,并进入对应报告。 ### Skill / MCP 自动参考 1. 在「技能管理」上传 zip 技能包(内含 `SKILL.md`),或在「MCP 管理」登记 MCP 工具 2. 生成用例与分析报告时,后端按测试目标关键词自动匹配最相关的**已启用** Skill / MCP 3. 将 Skill 的 `SKILL.md` 正文与 MCP 的工具描述注入大模型提示词 4. 界面在用例区与报告区显示「已自动参考」标注,列出本次引用的 Skill(紫)与 MCP(蓝) > 说明:当前为**上下文注入**模式——把 Skill 内容与 MCP 能力描述注入提示词引导大模型参考,并不会真实启动 MCP server 进程。 ## API 说明 | Method | Path | 说明 | |--------|------|------| | GET | `/api/devices` | 获取已连接设备列表 | | POST | `/api/cases/generate` | 生成测试用例(SSE 流式,先发 `event: meta` 告知已参考的 Skill/MCP) | | POST | `/api/sessions` | 创建并启动采集会话 | | GET | `/api/sessions/{id}` | 获取会话状态 | | DELETE | `/api/sessions/{id}` | 停止采集会话 | | GET | `/api/sessions/{id}/snapshots` | 加载历史快照(供历史报告页使用) | | GET | `/api/reports/{id}` | 获取分析报告(SSE 流式,先发 `event: meta`) | | WS | `/ws/{id}` | 实时接收性能数据 | | GET | `/api/projects` | 获取项目列表(含会话数统计) | | POST | `/api/projects` | 创建项目 | | DELETE | `/api/projects/{id}` | 删除项目(级联删除会话+快照) | | GET | `/api/projects/{id}/sessions` | 项目下历史会话(含均值摘要) | | GET | `/api/config/llm` | 读取用例/报告模型配置(API Key 脱敏) | | PUT | `/api/config/llm/{key}` | 更新模型配置(`cases_model` / `report_model`) | | GET | `/api/skills` | 获取技能列表 | | GET | `/api/skills/{id}` | 获取技能详情(SKILL.md 内容 + 文件列表) | | POST | `/api/skills/upload` | 上传 zip 技能包(multipart) | | PATCH | `/api/skills/{id}/enabled` | 启用/禁用技能 | | DELETE | `/api/skills/{id}` | 删除技能 | | GET | `/api/mcp` | 获取 MCP 列表 | | POST | `/api/mcp` | 新增 MCP | | PATCH | `/api/mcp/{id}/enabled` | 启用/禁用 MCP | | DELETE | `/api/mcp/{id}` | 删除 MCP | ## 注意事项 - 会话快照、项目、模型配置、技能与 MCP 元数据均持久化在 SQLite(`backend/perf_agent.db`) - 上传的技能包解压存放在 `backend/skills_store/`,删除技能会一并清理其目录 - 技能包必须包含 `SKILL.md`,建议带 `name` / `description` 的 YAML frontmatter 以便正确显示名称与描述 - 文件上传依赖 `python-multipart`,已加入 `requirements.txt` - iOS 采集依赖 `tidevice`,仅支持 macOS - 同一时间建议只运行一个采集会话,避免设备竞争