提交 df34c1c8 authored 作者: 陈泽健's avatar 陈泽健

docs(performance): 更新 HANDOFF 至 AI 分析资源四维度增强 + 部署验收

- 记录 2026-08-27 AI 分析报告资源使用分析四维度增强(执行机/目标机/Java 进程/MySQL)
- 记录 2026-08-26 资源分析为空修复 + 执行跳转自动跳转监控页
- 记录已提交推送(c73ffd58/2a6ecd8a/2093c083)与 5.60 部署真实验收结果
- 踩坑表补充:资源数据统一走嵌套 stats.avgCpuPercent 结构
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 3a29883b
# HANDOFF — 性能测试模块会话交接文档 # HANDOFF — 性能测试模块会话交接文档
> **生成时间**: 2026-08-26 > **生成时间**: 2026-08-27
> **当前分支**: `platform-auto-test` > **当前分支**: `platform-auto-test`
> **最近提交**: `a1ef3ffa` feat(perf-report): AI 分析文档格式优化 + A/B 下载交互 + lint 修复 > **最近提交**: `c73ffd58` feat(perf): AI 分析报告资源使用分析四维度增强(Java 进程 + MySQL)
> **会话窗口**: 性能测试 — AI 分析正式文档导出 + A/B 下载方案 + lint 修复(已提交推送) > **会话窗口**: 性能测试 — AI 分析报告资源使用分析四维度增强(执行机/目标机/Java 进程/MySQL),已部署 5.60 + 已提交推送
> **状态**: ✅ AI 文档封面/目录/分页排版 + A 弹窗 + B 浮动卡片 + ESLint 9 配置已 commit `a1ef3ffa` 并推送 origin/platform-auto-test,前端已部署 5.60 > **状态**: ✅ 已部署 5.60 并容器内验证;✅ 已提交 commit `c73ffd58` 并推送 origin/platform-auto-test
> **会话窗口(上一窗口)**: 报告导出排版质量优化 + 导出文件名使用任务名称(commit `521ead34`,已部署 5.60) > **会话窗口(上一窗口)**: 项目管理执行任务自动跳转监控页 + AI 报告资源使用分析为空修复(commit `2093c083` / `2a6ecd8a`,均已推送 + 部署 5.60)
---
## ⚡ 最新会话更新(2026-08-27)— AI 分析报告资源使用分析四维度增强 + 部署 5.60 + 提交推送 ✅
### A. 会话背景
用户反馈 AI 分析报告的资源部分**不够详细**,看不到区分 **Java 进程资源分析、总的资源分析、MySQL 资源分析** 的信息。原实现只展示执行机/目标机整体 CPU 与内存两维度,executor 已采集的 `javaProcessStats``mysql` 数据未上屏。
### B. 改动内容(仅 `backend/app/services/performance_ai_service.py` + 测试)
资源使用分析从两维度扩展为**四维度**
| 维度 | 数据来源 | 展示指标 |
|------|----------|----------|
| 4.1 执行机整体 | `resource_summary.stats` | CPU/内存 平均+峰值 |
| 4.2 目标机整体 | `target_resource_summary.stats` | CPU/内存 平均+峰值 |
| 4.3 Java 进程 | `target_resource_summary.javaProcessStats` | 进程名、CPU/内存 平均+峰值、RSS 内存(MB) |
| 4.4 MySQL | `target_resource_summary.mysql``available=true` 时) | 连接数、活跃线程、慢查询、最大已用/最大连接、缓冲池命中率、Questions/Queries、收发包量 |
具体实现:
- 新增辅助方法:`_extract_java_process_stats()``_extract_mysql_stats()`(仅 `available=true` 返回)、`_fmt_num()`(None→—,浮点保留 2 位)
- `_build_rule_document_sections` Chapter 四 重写为 4 小节(`java_content_parts` / `mysql_content_parts` 并入资源章节)
- 瓶颈表新增:Java 进程 CPU/内存平均或峰值超阈值(>80%);MySQL 慢查询>10、缓冲池命中率<99%、连接数≥90%上限
- 建议表新增:Java 进程 CPU 过高(取平均最高项)、MySQL 慢查询/缓冲池建议
- `_rule_based_analysis` 的 resource_analysis / bottlenecks / suggestions 同步四维度
- LLM Prompt(SINGLE_ANALYSIS_PROMPT 第四章)更新为要求四维度,资源表头改 `["资源","指标","值","状态"]`
- **修复上一轮遗留 NameError**`_rule_based_analysis``exec_cpu_avg`/`exec_cpu_max` 未定义(替换变量名时误删赋值行)
### C. 验证与部署
| 项目 | 结果 |
|------|------|
| `python -m pytest tests/test_performance_ai_service.py -q` | ✅ 20 passed(新增 4 个四维度提取/覆盖/无数据测试) |
| `python -m pytest tests/ -q` | ✅ 295 passed(全量) |
| 手动模拟 executor 真实结构 | ✅ 文档同时含 执行机/目标机/Java 进程/MySQL;高 CPU 目标机+Java 进程+慢查询+低命中率均进瓶颈与建议;无资源数据不虚构 |
| 5.60 部署 | ✅ `performance_ai_service.py` scp 上传 → MD5 一致 → `docker compose restart app` |
| 容器验证 | ✅ `Up (healthy)`;容器内 import OK;`:80/health` 200 |
### D. 遗留事项
1. ~~本窗口改动未提交~~ → ✅ 已提交 commit `c73ffd58``feat(perf): AI 分析报告资源使用分析四维度增强(Java 进程 + MySQL)`)并推送 `origin/platform-auto-test``2a6ecd8a..c73ffd58`)。
2. ~~需在 5.60 对真实执行记录重新触发一次 AI 分析,人工确认 Chapter 四已分四维度展示资源数据~~ → ✅ **已验收(2026-08-28)**:用户在 5.60 对真实执行记录触发 AI 分析,确认资源数据四维度(执行机/目标机/Java 进程/MySQL)展示正常。
3. 工作区另有无关未提交文件:`playwright_executor.py` / `smart_locate.py` / `smart_locate_service.py` / `Cases.vue` / API 测试等(属其他窗口工作线),以及未跟踪脚本 `lzzsh_*``tmp/`,均未纳入本次提交。
---
## ⚡ 最新会话更新(2026-08-26 收尾)— AI 报告资源使用分析为空修复 + 提交推送 ✅
### A. 会话背景
用户在「资源使用分析 → AI 分析生成报告」后发现 **Chapter 四「资源使用分析」全部显示「未采集」**,要求排查并修复。
### B. 根因
`performance_ai_service.py``resource_summary` / `target_resource_summary` 读取 **旧平铺键** `cpu_avg` / `cpu_average` / `memory_avg` / `memory_average`;但 executor(`performance_executor.py`)实际产出的是 **嵌套结构**
```json
{"stats": {"avgCpuPercent": 45.2, "maxCpuPercent": 92.0, "avgMemPercent": 62.3, "maxMemPercent": 88.5}}
```
两处读取均得 `None` → Chapter 四 每行渲染「未采集」。5.60 无 claude CLI,恒走规则兜底路径,故必然为空。`_build_prompt` 传给 LLM 的是原始 JSON(纯 AI 路径正常),仅规则兜底路径受影响。
### C. 修复内容(仅 `backend/app/services/performance_ai_service.py`)
| 项 | 说明 |
|----|------|
| 新增 `_extract_resource_stats()` | 静态方法,同时兼容嵌套 `stats.avgCpuPercent` 与旧平铺 `cpu_avg`/`cpu_average`,并提取 **平均 + 峰值**`maxCpuPercent` 等) |
| Chapter 四 资源使用分析 | 展示**平均值 + 峰值**(如「执行机 CPU 平均 45.2%,峰值 92.0%,超过阈值」),表格含 CPU/内存平均与峰值行;无数据仍标注「未采集」不虚构 |
| 瓶颈定位 | 新增峰值级 medium 瓶颈提醒(平均未超但峰值超阈值时标记) |
| 覆盖路径 | `_build_rule_document_sections`(规则兜底章节)、`_rule_based_analysis`(规则兜底分析)、`_normalize_document_result`(LLM 缺字段补齐)均复用 |
### D. 验证与部署
| 项目 | 结果 |
|------|------|
| `python -m pytest tests/ -k "ai or performance"` | ✅ 69 passed(含 `test_performance_ai_service.py` 16 passed) |
| 手动模拟 executor 真实 `stats` 结构 | ✅ Chapter 四 + resource_analysis + bottlenecks 均正确渲染;flat/empty/None 兼容 |
| 5.60 后端部署 | ✅ `performance_ai_service.py` 上传 → `docker compose restart app` → 容器 healthy |
| 运行验证 | ✅ 容器内 `_extract_resource_stats` 正确解析 `stats.avgCpuPercent`;无 Traceback;`/api/performance/tasks` 200 |
| 提交推送 | ✅ commit `2a6ecd8a` 已推送 `origin/platform-auto-test`(仅 1 个文件) |
### E. 遗留事项
1. 需在 5.60 对真实执行记录重新触发一次 AI 分析,人工确认 Chapter 四已展示 CPU/内存平均与峰值数据(本次未在页面端到端点击验收)。
2. 同一窗口还修复了「项目管理→登录模块→执行性能任务不自动跳转监控页」问题(commit `2093c083``ProjectDetail.vue``handleRun()` 读取返回 `executionId` 立即 `router.push` 到监控页,行为与任务列表页对齐),已部署 5.60。
3. 工作区仍有未提交文件:`playwright_executor.py` / `smart_locate.py` / `smart_locate_service.py`(P1a 数据保真 + base_url 透传,属其他窗口工作线,未纳入本次提交);`tmp/` 未提交。
--- ---
...@@ -943,6 +1031,7 @@ cd frontend && npm run dev ...@@ -943,6 +1031,7 @@ cd frontend && npm run dev
| 2026-08-13 晚 | `_DEFAULT_ACCOUNTS` 三档全部映射到 admin@xty | 测试环境仅有单一管理员账号,superadmin/admin/user 统一映射,与预设 account_key 取值解耦 | | 2026-08-13 晚 | `_DEFAULT_ACCOUNTS` 三档全部映射到 admin@xty | 测试环境仅有单一管理员账号,superadmin/admin/user 统一映射,与预设 account_key 取值解耦 |
| 2026-08-13 晚 | 新建会议压测任务传 `preset_id` 继承 + 显式 `target_url` | schema 把 `target_url` 列为必填,即便 preset_id 继承也必须显式传(校验在前,继承在后) | | 2026-08-13 晚 | 新建会议压测任务传 `preset_id` 继承 + 显式 `target_url` | schema 把 `target_url` 列为必填,即便 preset_id 继承也必须显式传(校验在前,继承在后) |
| 2026-08-13 晚 | `capture_rules` 用 snake_case `json_path` | 嵌套 `CaptureRule``performance_output.py`)未挂 `to_camel`,顶层任务 schema 虽用 camelCase 别名,但嵌套字段名必须原样 `json_path` | | 2026-08-13 晚 | `capture_rules` 用 snake_case `json_path` | 嵌套 `CaptureRule``performance_output.py`)未挂 `to_camel`,顶层任务 schema 虽用 camelCase 别名,但嵌套字段名必须原样 `json_path` |
| 2026-08-26 | 资源数据统一走嵌套 `stats.avgCpuPercent` 结构 | executor 产出即嵌套结构,AI 规则兜底误读旧平铺键导致 Chapter 四为空;新增 `_extract_resource_stats` 兼容读取并同步取峰值 |
--- ---
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论