# HANDOFF_性能测试

> 生成时间：2026-08-12 15:00
> 最后更新：2026-08-22 15:40
> 当前分支：`platform-auto-test`
> 最近提交：`21d65661 docs(device-sim): 更新 HANDOFF 记录设备模拟模块部署到 5.60`
> 主分支：`master`

---

## 整体状态

| 阶段 | 状态 | 说明 |
|------|------|------|
| Phase 1-4（基础框架） | ✅ 完成 | ORM + Schema + 执行引擎 + 路由/Service + 前端三面板 |
| Phase 5（集成测试/响应捕获/跨任务引用） | ✅ 完成核心 | 会议预约 API 端到端验证通过（2026-08-17） |
| 读取系统配置被测系统 URL | ✅ 已部署 | 运行时读取，不再依赖任务 target_url（2026-08-19） |
| 任务级自定义登录凭据 | ✅ 已部署 | 新建/编辑任务可填自定义用户名/密码（2026-08-19） |
| 从 curl 自动生成压测任务 | ✅ 已部署 | 新建弹窗「从 curl 导入」→ 解析回填表单（2026-08-19） |
| 项目管理（项目卡片 + 批量执行） | ✅ 已部署 | 前端 Projects/ProjectDetail/TaskList 适配（2026-08-20） |
| 指标体系增强（10项新指标） | ✅ 已部署 | P95/标准差/Apdex/延迟/连接时间/字节数/峰值TPS/错误分类（2026-08-20） |
| 批量执行合并报告 | ✅ 已部署 | 项目批量/一键执行生成一份合并报告（聚合指标 + 各任务明细）（2026-08-20） |
| 批量执行跳转监控页 + 3 个 P0 修复 | ✅ 已部署 | BatchMonitor.vue + 500/残留completed/status_2xx 修复（2026-08-21） |
| body 字符串存储导致 4XX 修复 | ✅ 已部署 | 前端 JSON.parse + 后端防御性 json.loads + 数据库脏数据清洗（2026-08-21） |
| 事务处理时间（Transaction） | ✅ 本地完成 | 多步骤串行事务 + 步骤级耗时统计 + 瀑布图/步骤明细表（2026-08-21） |
| 目标机资源监控（SSH）+ Java 进程监控 | ✅ 已部署 | SSH 采集 CPU/内存/负载 + Java 进程级监控 + 实时监控/报告展示（2026-08-22） |
| **两种压测场景增强（burst/endurance）+ 报告页场景标签/多接口明细表** | **✅ 本地完成，未部署** | 瞬时并发（集合点同步/循环模式/错误策略）+ 8 小时长稳压测（多接口线程组/思考时间分布/CSV 参数化）（2026-08-22） |

---

## 🆕 最新会话进度（2026-08-22 — 两种压测场景增强 burst/endurance + 报告页场景标签/多接口明细表）

**phase 1 后端模型+Schema+迁移**：`PerformanceTask` 新增 `scenario_type`（null/burst/endurance）+ 配套字段（loop_type/loop_count/synchronizing_timer_count/synchronizing_timer_timeout/error_action/scenario_apis/think_time_min/think_time_max/think_time_distribution/csv_content）。Pydantic camelCase 别名 + `populate_by_name`。

**phase 2 执行引擎**：burst 模式用 `_BurstBarrier` 集合点同步（所有 worker 同时放行），loop_type finite/infinite，error_action continue/stop；endurance 模式多接口独立线程组 + think_time constant/gaussian 分布 + CSV 参数化 `{{csv.field}}`。

**phase 3 前端场景化表单（TaskList.vue）**：场景类型 select + burst 配置区（循环类型/次数/集合点同步/错误策略）+ endurance 多接口编辑器（增删/上下移/思考时间/CSV 粘贴框）。

**phase 4 报告页场景标签+多接口明细表（ReportPanel.vue）**：场景标签（burst 橙色/endurance 红色/标准灰色）+ 接口级统计明细表（apiSummary 列：接口名/请求数/成功/失败/错误率/TPS/响应时间分位/标准差）。**后端修复**：schemas/performance.py `api_summary` 类型 `Dict`→`List[Dict]`；routers/performance.py `get_report()` 补透传 `api_summary`。

**数据链路**：executor `_metrics._build_api_summary()` → service `task.api_summary` → report dict → router → `PerformanceReportResponse.api_summary(List)` → 前端表格。

**验证**：schema 冒烟 3 种 payload ✅ / `PerformanceReportResponse` 构造 ✅ / pytest 25 passed ✅ / npm build ~26s ✅

**⚠️ 未部署 5.60**，见 P0 部署任务。

---

## 🆕 上一会话（2026-08-22 — 修复目标机实时监控图表空白 + Java 进程监控全量上线）

**问题**：目标机 ECharts 图表在实时监控中空白。**根因**：`v-show=false`（`display:none`）时 `echarts.init()` 得到 0×0 画布。**修复**：移除 init 调用改为纯懒初始化 + `resize()` 兜底 + `nextTick` 包裹。

**Java 进程监控（前后端全链路）**：SSH `ps -eo` 采集 `ubains-meeting-*` 进程 → 执行器集成 → 类型扩展 → 实时监控 Java 进程表格 → 报告页进程统计表 + CPU 趋势图。

**部署 5.60（2026-08-22 11:30）**：npm build ✅ → dist 全量覆盖 → docker restart → healthy ✅

---

## 历史会话概要（2026-08-17 ~ 2026-08-21）

| 时间 | 工作内容 | 部署状态 |
|------|---------|---------|
| 08-17 | 会议预约 API 端到端验证 + A0027 修复（stale pyc 坑） | ✅ 已部署 |
| 08-19 | 读取系统配置 URL + 自定义登录凭据 + curl 导入 + 修复 curl [object Object] + 修复保存 422 | ✅ 已部署 |
| 08-20 | 项目管理与批量执行 + 合并报告 + 指标体系增强（10 项新指标，25 单测） | ✅ 已部署 |
| 08-21 | 资源图表宽度修复 + 目标机监控 PRD + Transaction 前后端（瀑布图/步骤明细表） | ⚠️ Transaction 未部署 |
| 08-21 | 批量执行跳转监控页（BatchMonitor）+ 3 个 P0 修复（500/残留completed/status_2xx）+ body 4XX 修复 | ✅ 已部署 |

---

## 当前运行状态

### 生产服务器 192.168.5.60
- 容器 `plat-auto-test-app`：healthy，内部端口 80
- **已部署**：curl 导入 + 自定义凭据 + 读取系统配置 URL + 项目管理与批量执行 + 合并报告 + 指标体系增强 + BatchMonitor + 3 个 P0 修复 + body 4XX 修复 + 目标机监控 + Java 进程监控
- **未部署**：Transaction 事务处理时间（前后端）、burst/endurance 场景增强（前后端）

### 本地（Windows 开发机）
- 后端 8001 / 前端 3000 | 数据库 `data/test_platform.db`
- **最新改动**：burst/endurance 场景增强 + 报告页场景标签/接口明细表（后端 5 文件 + 前端 3 文件，本地 build+单测通过，未部署）

---

## 未提交的代码

```
# 后端（8 文件已修改）
backend/app/config.py                                 # 目标机监控配置项
backend/app/database.py                               # 字段迁移累积
backend/app/executors/performance_executor.py          # burst/endurance + Transaction + 目标机监控 + 指标体系增强
backend/app/executors/target_resource_monitor.py       # NEW: SSH 采集
backend/app/models/performance.py                      # 场景字段 + Transaction 字段 + status_2xx~5xx
backend/app/routers/performance.py                     # 项目路由 + 合并报告 + 批量 + api_summary 透传
backend/app/schemas/performance.py                     # 全部新 schema + api_summary 类型修复
backend/app/services/performance_service.py            # 批量/合并/项目/场景/自定义凭据

# 前端（8 文件已修改）
frontend/src/views/performance/TaskList.vue             # 场景表单 + Transaction 步骤编辑器 + curl 导入 + 项目选择
frontend/src/views/performance/ReportPanel.vue           # 场景标签 + apiSummary 表 + 指标卡片 + 瀑布图
frontend/src/views/performance/MonitorPanel.vue          # 目标机/Java 监控 + 新增图表
frontend/src/views/performance/BatchMonitor.vue          # NEW: 批量执行监控页
frontend/src/views/performance/ProjectDetail.vue         # 批量执行/合并报告入口
frontend/src/views/performance/Projects.vue              # 项目管理
frontend/src/views/performance/ProjectReport.vue         # NEW: 合并报告页
frontend/src/types/performance.ts                        # 全部新类型

# 路由/API
frontend/src/router/index.ts                             # 新增路由
frontend/src/api/performance.ts                          # 新增 API 封装

# 文档（新增）
Docs/PRD/性能测试/需求文档/                                # 各功能 PRD + 计划执行文档
Docs/PRD/性能测试/问题处理/                                # 各问题处理 + 执行计划文档
```

---

## 下一步任务

### P0 — 部署场景增强（burst/endurance）到 5.60 + e2e 验证
1. 部署后端 5 文件：`models/performance.py` / `schemas/performance.py` / `database.py` / `executors/performance_executor.py` / `routers/performance.py`
2. 前端 `npm run build` → dist 全量 scp
3. 清 `*.pyc` + `docker compose restart app` → healthy（验证 `_ensure_columns` 自动迁移）
4. e2e：burst 任务→橙色标签 / endurance 任务→红色标签+apiSummary 表 / legacy 任务→标准 Standard

### P0 — 部署 Transaction 到 5.60 + e2e 验证
后端 3 文件（models/schemas/executors）+ 前端 build → 验证瀑布图+步骤明细表

### P1 — WebSocket 批量进度订阅端点
后端缺 `/ws/batch/{batch_id}` 订阅端点 → ProjectDetail 实时进度条收不到推送

### P1 — 按请求序号错开时间段（并发预约类接口关键）
`template_resolver.py` 增加 `INDEX` 后缀支持，如 `{__NOW_+37_H_INDEX__}`

### P2 — 后续优化
断言规则验证（建议加 `$.success == true`）、Token 过期重试、报告对比、PDF 导出、数据清理

---

## 关键踩坑记录

| 现象 | 根因 | 正确做法 |
|------|------|---------|
| 目标机监控图表空白 | `v-show=false` 时 `echarts.init()` 得 0×0 画布 | 懒初始化 + `resize()` 兜底 + `nextTick` |
| 批量详情 API 500 | `task.actual_concurrency` 不存在（ORM 只有 `concurrency`） | 访问 ORM 属性前核对 models/*.py 字段定义 |
| 合并报告一直「暂无」 | `PerformanceTask` 缺 `status_2xx~5xx` 字段，聚合时 AttributeError 被静默吞掉 | 模型补字段 + `_apply_result()` 补写入 |
| body 存储导致 4XX | 前端缺 `JSON.parse()` 导致字符串存入 MySQL JSON 列 → aiohttp 双重序列化 | 三端 JSON 字段一致性，前端提交必须 parse |
| A0027 时间格式不正确 | 服务器 `template_resolver.py` 旧版 + stale `__pycache__` | 删 pyc + 重启容器（源码改了但字节码旧） |
| curl 导入 `[object Object]` | `CurlParseRequest` 缺 `model_config` camelCase 映射 + Windows `^` 续行符未处理 | 补 `populate_by_name` + `_preprocess_cmd_style()` |
| 保存任务 422 | 非 Optional 字段接收 null → Pydantic v2 拒绝 | 改 `Optional` + `default=None` |
| 部署后文件未生效 | scp 后文件 mtime 未变（实际未覆盖） | 部署后 `grep`/`mtime` 验证关键代码行 |

---

*本文档由 Claude Code 自动生成，用于多会话协作开发时的上下文传递。*