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

chore(config): 更新本地权限白名单及交接文档

- .claude/settings.local.json: 新增 npx vue-tsc / npm run 权限白名单
- HANDOFF.md: 更新为 P0+P1 完成状态,新增踩坑记录 #14-#24
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 794730a0
...@@ -159,7 +159,9 @@ ...@@ -159,7 +159,9 @@
"Bash(cd \"E:\\\\\\\\GithubData\\\\\\\\ubains-module-test\\\\\\\\AuxiliaryTool\\\\\\\\ScriptTool\\\\\\\\新服务自检\")", "Bash(cd \"E:\\\\\\\\GithubData\\\\\\\\ubains-module-test\\\\\\\\AuxiliaryTool\\\\\\\\ScriptTool\\\\\\\\新服务自检\")",
"Bash(sed -i '1914,1985d' check_server_health.ps1)", "Bash(sed -i '1914,1985d' check_server_health.ps1)",
"Bash(awk '/^ # EMQX增强检测 - 综合指标统计/,/^ catch {/' \"C:\\\\Users\\\\UBAINS\\\\Desktop\\\\Test\\\\check_server_health.ps1\")", "Bash(awk '/^ # EMQX增强检测 - 综合指标统计/,/^ catch {/' \"C:\\\\Users\\\\UBAINS\\\\Desktop\\\\Test\\\\check_server_health.ps1\")",
"Bash(awk 'NR>=2750 && NR<=2800' \"E:\\\\GithubData\\\\ubains-module-test\\\\AuxiliaryTool\\\\ScriptTool\\\\新服务自检\\\\check_server_health.ps1\")" "Bash(awk 'NR>=2750 && NR<=2800' \"E:\\\\GithubData\\\\ubains-module-test\\\\AuxiliaryTool\\\\ScriptTool\\\\新服务自检\\\\check_server_health.ps1\")",
"Bash(npx vue-tsc *)",
"Bash(npm run *)"
] ]
} }
} }
# HANDOFF — 平台自动化测试系统交接文档(UI自动化用例录入优化) # HANDOFF — 平台自动化测试系统交接文档
> **生成时间**: 2026-07-29 > **生成时间**: 2026-07-29
> **当前分支**: `platform-auto-test` > **当前分支**: `platform-auto-test`
> **最近提交**: `c6a688e4` fix(deploy): 修复容器部署时根路径返回 JSON 而非前端页面 > **最近提交**: `60b0212e` fix(ai-locate): 修复任务路径/权限/HTTPS,支持 micro-app 微前端定位 + 执行引擎死锁修复/headless 默认值/mqtt 可选导入/uvloop 禁用
> **状态**: ✅ UI自动化用例录入优化代码已实现并部署到服务器;宿主机 Playwright 未安装,待完成 > **状态**: ✅ P0+P1 全部完成 — 宿主机 Playwright / Claude Code 认证 / AI 定位 / 前端 UI 端到端执行验证通过
--- ---
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
- Git 提交协作 - Git 提交协作
**当前多窗口状态**:本项目有多个窗口分工开发,交接文档分散在: **当前多窗口状态**:本项目有多个窗口分工开发,交接文档分散在:
- `HANDOFF.md`(本文档)— **UI自动化用例录入优化**(最新,本次会话) - `HANDOFF.md`(本文档)— **UI自动化用例录入优化 + 执行引擎死锁修复 + P1端到端验证通过**(最新,本次会话)
- `HANDOFF_V2部署升级.md` — V2 部署详细交接 - `HANDOFF_V2部署升级.md` — V2 部署详细交接
- `HANDOFF_UI自动化.md` — UI 自动化测试模块 - `HANDOFF_UI自动化.md` — UI 自动化测试模块
- `HANDOFF_安全测试.md` — 安全测试模块 - `HANDOFF_安全测试.md` — 安全测试模块
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
**平台自动化测试可视化系统 (platform-auto-test)** — Web 可视化自动化测试平台,核心创新是用例录制器。 **平台自动化测试可视化系统 (platform-auto-test)** — Web 可视化自动化测试平台,核心创新是用例录制器。
- **技术栈**: FastAPI + SQLAlchemy(async) + MySQL 8.0(生产)/ SQLite(本地)+ Playwright(同步API) + WebSocket / Vue 3 + Element Plus + Vite 5 + TypeScript - **技术栈**: FastAPI + SQLAlchemy(async) + MySQL 8.0(生产)/ SQLite(本地)+ Playwright(同步API) + WebSocket / Vue 3 + Element Plus + Vite 5 + TypeScript
- **被测系统**: 统一管理平台 (https://192.168.5.44) - **被测系统**: 统一管理平台 (https://192.168.5.44) — 微前端 micro-app 架构
- **登录凭据**: admin@xty / Ubains@13579 · 验证码固定 `csba` - **登录凭据**: admin@xty / Ubains@13579 · 验证码固定 `csba`
- **远程仓库**: http://git.ubainsyun.com/bing/ubains-module-test.git - **远程仓库**: http://git.ubainsyun.com/bing/ubains-module-test.git
- **当前分支**: `platform-auto-test`(主分支:`master` - **当前分支**: `platform-auto-test`(主分支:`master`
...@@ -37,159 +37,167 @@ ...@@ -37,159 +37,167 @@
## 二、本次会话完成的工作 ## 二、本次会话完成的工作
### 1. ✅ UI自动化用例录入优化 — 需求文档与计划执行 ### 1. ✅ 宿主机 Playwright 安装(P0)
| 文档 | 路径 | | 步骤 | 状态 |
|------|------| |------|------|
| PRD 需求文档 | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化.md` | | `pip3 install playwright`(--break-system-packages,用户目录) | ✅ |
| 计划执行文档 | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化_计划执行.md` | | `playwright install chromium` | ✅ |
| `playwright install-deps chromium`(系统依赖 libatk 等) | ✅ |
### 2. ✅ 代码实现(全部完成) | 验证 Chromium 可启动(ignore_https_errors) | ✅ |
#### 修改的文件(4 个) ### 2. ✅ 宿主机 Claude Code 认证修复(P0)
宿主机原配置指向 bigmodel.cn(token 失效 401),已替换为与本地一致的配置:
```json
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-R9BaJ8GOTe3UPENLVa9PGA",
"ANTHROPIC_BASE_URL": "https://office.ubainsyun.com:8400",
"ANTHROPIC_MODEL": "glm-5.2"
}
}
```
| 文件 | 变更说明 | 验证:`claude -p 'hello'` → 正常回复。
|------|---------|
| `frontend/src/types/case.ts` | StepDefinition 新增 `actual``locator_type``locator_value` 字段 |
| `backend/app/schemas/test_case.py` | Pydantic StepDefinition 同步新增定位字段 |
| `backend/app/main.py` | 注册 `ai_locator` 路由 |
| `frontend/src/views/Cases.vue` | 弹窗精简(UI用例仅显示名称+模块+步骤)、集成 IntentStepEditor、保存转换逻辑、编辑回显兼容 |
#### 新增的文件(7 个 ### 3. ✅ 代码提交并推送(P0
| 文件 | 说明 | | 提交 | 说明 |
|------|------| |------|------|
| `frontend/src/components/IntentStepEditor.vue` | 意图步骤编辑器组件(步骤描述+预期结果+等待时间+定位获取) | | `0d1979ff` | feat: UI用例录入优化 + 设备模拟模块 + 系统管理菜单(51 files) |
| `frontend/src/utils/stepParser.ts` | 步骤推断工具函数:inferAction / inferParams / toStepDefinition / toIntentStep | | `60b0212e` | fix(ai-locate): 修复任务路径/权限/HTTPS,支持 micro-app 微前端定位 |
| `frontend/src/utils/usePageUrl.ts` | 目标网页 URL 管理工具 |
| `frontend/src/api/aiLocate.ts` | AI 定位 API 客户端(创建任务 + 轮询结果) |
| `backend/app/routers/ai_locator.py` | AI 定位路由(POST 创建任务 + GET 查询结果 + SSH 调用宿主机) |
| `backend/scripts/ai_locate_worker.py` | **宿主机定位脚本**(Playwright 开网页 → Claude Code 分析 → 输出定位) |
| `backend/scripts/sync_to_server.py` | 数据同步脚本(本地 SQLite 同步到服务器 MySQL) |
### 3. ✅ 部署到服务器 同时新增 `.gitignore`,排除 `__pycache__` / `node_modules` / `dist` / 调试截图等。
| 内容 | 状态 | ### 4. ✅ AI 定位端到端验证(P1)
|------|------|
| 后端代码(main.py / schemas / routers) | ✅ 已部署 |
| 定位脚本(ai_locate_worker.py) | ✅ 已部署到宿主机 |
| 同步脚本(sync_to_server.py) | ✅ 已部署 |
| 前端构建产物 | ✅ 已部署(npm run build) |
| 容器重启 | ✅ 已完成 |
| SSH 免密登录(容器→宿主机) | ✅ 已配置 |
### 4. ✅ SSH 免密登录配置 **完整链路已打通**
容器内已生成 SSH Key,公钥已添加到宿主机 `~/.ssh/authorized_keys`,已验证: ```
```bash POST /api/ai/locate
# 容器内可免密登录宿主机 → 容器写任务文件到 /app/data/ai_locate_tasks/
docker exec plat-auto-test-app ssh ubains@192.168.5.60 "echo OK" → SSH 调用宿主机 python3 scripts/ai_locate_worker.py
# 输出: ✅ SSH免密登录成功,宿主机: ubuntu → Playwright 打开页面(micro-app 支持)→ Claude Code 匹配
→ 写结果文件 → 前端轮询 GET /api/ai/locate/{id}/result
``` ```
--- **实测结果**
```json
{
"task_id": "locate_4a40b8df3bee",
"status": "completed",
"success": true,
"candidates": [{
"locator_type": "css",
"locator_value": "input[placeholder='手机号/用户名/邮箱']",
"confidence": 0.95
}],
"message": "定位成功,找到 1 个候选"
}
```
## 三、核心变更说明 密码框定位:`input[type="password"][placeholder="密码"]` confidence 0.98。
### 新建UI用例弹窗(优化后) ### 5. ✅ 修复项汇总
``` | 问题 | 修复 |
┌─────────────────────────────────────────────┐ |------|------|
│ 新建用例 │ | SSH 调用 `python` | 改为 `python3` |
├─────────────────────────────────────────────┤ | 脚本路径错误 | `cd backend && python3 scripts/ai_locate_worker.py` |
│ 用例名称: [________________________] *必填 │ | 任务目录不一致 | 容器 `/app/data` ↔ 宿主机 `/data/.../data` 共享 volume |
│ 所属模块: [____________________ ▼] *必填 │ | HTTPS 自签证书 | `ignore_https_errors=True` |
│ ─────────────────────────────────────────── │ | micro-app 微前端 DOM 提取不到 | 支持 `micro-app` / `micro-app-body` 容器 |
│ ▼ 测试步骤 │ | SPA 渲染慢 | `page.wait_for_timeout(2000)` |
│ ┌───────────────────────────────────────┐ │ | data 目录权限 root | `chown ubains:ubains` + `chmod 775` |
│ │ ① 步骤描述: [输入用户名__________] 等待[_]ms│ │
│ │ 预期结果: [______________________] │ │
│ │ [获取定位] 定位类型: [css ▼] 定位值: [#] │ │
│ ├───────────────────────────────────────┤ │
│ │ [+] 添加步骤 │ │
│ └───────────────────────────────────────┘ │
│ │
│ [取消] [保存] │
└─────────────────────────────────────────────┘
```
### AI 定位工作流 ### 6. ✅ 执行引擎死锁修复(P1)
``` **现象**:容器内执行用例时,log 仅打印「开始执行」,永不打印「执行器启动成功」,一直卡到超时。
用户点击"获取定位"
→ POST /api/ai/locate(后端创建任务文件)
→ SSH 调用宿主机:python ai_locate_worker.py --task-id xxx
→ 宿主机脚本:Playwright 开网页 → 提取 DOM → Claude Code 匹配 → 写结果
→ 前端轮询 GET /api/ai/locate/{task_id}/result → 自动填充定位
```
--- **根因(三重 bug)**
## 四、卡点和问题 | # | 问题 | 根因 | 修复 |
|---|------|------|------|
| 1 | 执行永久卡死 | `run_in_executor` 线程池中 `sync_playwright().start()` 的 greenlet 线程桥与 uvloop 不兼容,永久挂起 | 改为专用 `threading.Thread` + `worker_thread.join()` |
| 2 | UVLoop 不兼容 | uvicorn 默认启用 uvloop,与 Playwright 线程桥冲突 | `--loop asyncio` 强制标准事件循环(Dockerfile + docker-compose.yml) |
| 3 | 无头浏览器崩溃 | `headless` 默认 `False`,容器内无 XServer 直接崩溃 | 默认值改为 `settings.PLAYWRIGHT_HEADLESS`(环境变量 `true`) |
| 4 | 应用启动失败 | `paho.mqtt` 未安装,`import` 失败阻塞整个 app 启动 | 改为 `try/except` 可选导入,仅设备模拟模块启用时才会报错 |
### 4.1 🔴 宿主机未安装 Playwright **涉及文件**
- `backend/app/services/execution_service.py``run_in_executor` → 专用线程
- `backend/app/executors/playwright_executor.py``headless` 默认值
- `backend/app/services/mqtt_manager.py` — paho 可选导入
- `deploy/Dockerfile``--loop asyncio`
- `deploy/docker-compose.yml` — command 覆盖
**问题**:宿主机上执行定位脚本时提示 `Playwright 未安装` ### 7. ✅ 前端 UI 端到端验证(P1)— 全线通过
```
python3 scripts/ai_locate_worker.py --step-desc "输入用户名" --page-url "https://..."
❌ 未安装 Playwright,请执行: pip install playwright && playwright install chromium
```
**解决方案**:在宿主机上安装 Playwright **验证用例**`登录-页面访问验证`(case_4f7c8e28677346378a8ffeb5a72185aa)
```bash
ssh ubains@192.168.5.60
pip3 install playwright
playwright install chromium
# 验证
python3 /data/third_party/plat-auto-test/backend/scripts/ai_locate_worker.py \
--step-desc "输入用户名" --page-url "https://192.168.5.44/login"
```
### 4.2 🟡 Claude Code CLI 认证失败 | 步骤 | 动作 | 结果 | 耗时 |
|------|------|------|------|
| 1 | navigate https://192.168.5.44 | ✅ | 2.81s |
| 2 | assert title = "统一管理平台" | ✅ | 0.22s |
| 3 | wait input[placeholder*="手机号"] | ✅ | 0.22s |
| 4 | assert visible input[type="password"] | ✅ | 0.01s |
| 5 | assert visible button.login_btn | ✅ | 0.01s |
宿主机上 `claude -p` 命令报 `401 身份验证失败`,需要重新登录 Claude Code: **最终结果**:pass_rate=100%, 耗时=13.29s, 状态=completed ✅
```bash
ssh ubains@192.168.5.60
claude
# 在交互界面重新登录 Anthropic 账号
```
### 4.3 🟡 代码未提交 **后续补充验证**`设备列表-表格数据验证`(case_795490be...)执行引擎正常跑通,但步骤6等待 `.el-tabs, .el-table` 超时 30s(用例选择器问题,非引擎问题)。
本次所有变更尚未 git commit,包含: **AI 定位接口验证**`POST /api/ai/locate` 定位用户名输入框返回 `xpath: //input[@placeholder='手机号/用户名/邮箱']` confidence=1.0 ✅
- 4 个修改文件(main.py / test_case.py / case.ts / Cases.vue)
- 7 个新增文件(IntentStepEditor / stepParser / aiLocate / ai_locator / ai_locate_worker / sync_to_server / usePageUrl)
- 2 个 PRD 文档
### 4.4 🟡 宿主机 `python` 命令不可用 ---
宿主机上只有 `python3` 命令,`ai_locator.py` 中 SSH 调用写的是 `python`,需要确认路径或修改 ## 三、关键配置信息
| 项目 | 值 |
|------|-----|
| 服务器 IP | 192.168.5.60 |
| SSH 用户 | ubains |
| 部署目录 | `/data/third_party/plat-auto-test/` |
| 前端地址 | http://192.168.5.60 |
| API 文档 | http://192.168.5.60/docs |
| 健康检查 | http://192.168.5.60/health |
| MySQL 外部访问 | 192.168.5.60:3307 |
| MySQL 用户/密码 | platapp / PlatApp2026 |
| 被测系统 | https://192.168.5.44/(微前端,登录页在 micro-app 内) |
| 登录凭据 | admin@xty / Ubains@13579 · 验证码 `csba` |
| 宿主机 Python | `python3`(Playwright 在 `~/.local`) |
| 宿主机 Claude Code | 已认证(office.ubainsyun.com:8400 / glm-5.2) |
| 容器 SSH 免密 | ✅ 容器→宿主机已配置 |
--- ---
## 、未提交变更 ## 、未提交变更
``` ```
M backend/app/main.py # 注册 ai_locator 路由 M .claude/skills/CreateCMD/_run_claude.bat # 非核心,可忽略
M backend/app/schemas/test_case.py # StepDefinition 新增定位字段 M backend/app/executors/playwright_executor.py # headless 默认值修复
M frontend/src/types/case.ts # StepDefinition 新增定位字段 M backend/app/services/execution_service.py # 执行引擎专用线程修复
M frontend/src/views/Cases.vue # 弹窗精简 + 集成 IntentStepEditor M backend/app/services/mqtt_manager.py # paho 可选导入
?? Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化.md M deploy/Dockerfile # --loop asyncio
?? Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化_计划执行.md M deploy/docker-compose.yml # command 覆盖
?? backend/app/routers/ai_locator.py
?? backend/scripts/ai_locate_worker.py
?? backend/scripts/sync_to_server.py
?? frontend/src/api/aiLocate.ts
?? frontend/src/components/IntentStepEditor.vue
?? frontend/src/utils/stepParser.ts
?? frontend/src/utils/usePageUrl.ts
?? backend/app/__pycache__/ # ❌ Python 编译缓存
?? backend/debug_*.png # ❌ 调试截图
?? backend/scripts/debug_*.py # ❌ 调试脚本
?? frontend/dist/ # ❌ 前端构建产物
?? frontend/node_modules/ # ❌ 前端依赖包
``` ```
**注意**:以上修复已部署到服务器但未 commit/push,建议下次 commit 时一并提交。
---
## 五、下一步任务(优先级排序)
| 优先级 | 任务 | 说明 |
|--------|------|------|
| 🟡 **P1** | ✅ 前端 UI 端到端验证 | **已完成** — 登录页面访问验证 passed=1 ✅ |
| 🟡 **P1** | ✅ 默认 page_url 配置 | **已完成** — Cases.vue 已设 `https://192.168.5.44` |
| 🟡 **P1** | 容器写任务文件权限 | 容器以 root 写任务文件,宿主机 ubains 可读;长期可统一用户或 ACL |
| 🟢 **P2** | 执行引擎修复代码提交 | playwright_executor/execution_service/mqtt_manager/Dockerfile/compose 的修复未提交,建议 git add + commit |
| 🟢 **P2** | 设备模拟模块联调 | 代码已提交,MQTT 环境配置与联调待验证;paho 目前 `try/except` 可选导入 |
| 🟢 **P2** | Phase 5 剩余 | Settings.vue 已迁入 system/;Pinia / 单元测试仍待做 |
--- ---
## 六、启动与运维指南 ## 六、启动与运维指南
...@@ -212,56 +220,52 @@ npm run dev ...@@ -212,56 +220,52 @@ npm run dev
### 服务器运维 ### 服务器运维
```bash ```bash
# 更新后端代码 # 更新后端代码(单个文件)
scp backend/app/services/execution_service.py ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/app/services/
scp backend/app/executors/playwright_executor.py ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/app/executors/
ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker compose restart app'
# 更新全部后端代码
scp -r backend/app ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/ scp -r backend/app ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/
ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker compose restart app' ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker compose restart app'
# 更新定位脚本
scp backend/scripts/ai_locate_worker.py ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/scripts/
# 更新前端 # 更新前端
cd frontend && npm run build cd frontend && npm run build
scp -r dist/* ubains@192.168.5.60:/data/third_party/plat-auto-test/frontend/dist/ scp -r dist/* ubains@192.168.5.60:/data/third_party/plat-auto-test/frontend/dist/
# 更新定位脚本
scp backend/scripts/ai_locate_worker.py ubains@192.168.5.60:/data/third_party/plat-auto-test/backend/scripts/
# 查看日志 # 查看日志
ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker compose logs -f app' ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker compose logs -f app'
```
---
## 七、关键配置信息
| 项目 | 值 | # 手动测试 AI 定位
|------|-----| ssh ubains@192.168.5.60 'export PATH=$HOME/.local/bin:$PATH && \
| 服务器 IP | 192.168.5.60 | python3 /data/third_party/plat-auto-test/backend/scripts/ai_locate_worker.py \
| SSH 用户 | ubains | --step-desc "输入用户名" --page-url "https://192.168.5.44/"'
| 部署目录 | `/data/third_party/plat-auto-test/` | ```
| 前端地址 | http://192.168.5.60 |
| API 文档 | http://192.168.5.60/docs |
| 健康检查 | http://192.168.5.60/health |
| MySQL 外部访问 | 192.168.5.60:3307 |
| MySQL 用户/密码 | platapp / PlatApp2026 |
| 被测系统 | https://192.168.5.44 |
| 登录凭据 | admin@xty / Ubains@13579 · 验证码 `csba` |
| 宿主机 Python | `python3`(非 `python`) |
| 宿主机 Claude Code | 已安装,需重新认证 |
--- ---
## 八、下一步任务(优先级排序) ## 七、踩坑记录(本次新增)
| 优先级 | 任务 | 说明 | | # | 现象 | 根因 | 正确做法 |
|--------|------|------| |---|------|------|---------|
| 🔴 **P0** | 宿主机安装 Playwright | `pip3 install playwright && playwright install chromium` | | 14 | `externally-managed-environment` | Ubuntu 禁止系统级 pip | `pip3 install --break-system-packages` 或 venv |
| 🔴 **P0** | 宿主机 Claude Code 重新认证 | 运行 `claude` 重新登录 | | 15 | Chromium 缺 `libatk` 等 | 系统依赖未装 | `playwright install-deps chromium` |
| 🔴 **P0** | 代码提交 | 使用 `/GitCommit` skill 提交所有变更 | | 16 | `ERR_CERT_AUTHORITY_INVALID` | 内网自签证书 | `ignore_https_errors=True` |
| 🟡 **P1** | 修复 SSH 调用 python 命令 | `ai_locator.py` 中 SSH 调用改为 `python3` | | 17 | 登录页提取 0 元素 | 被测系统是 micro-app 微前端 | 在 `micro-app-body` 内查询;URL 用 `https://192.168.5.44/` 而非 `/login` |
| 🟡 **P1** | 端到端验证 | 创建一条UI用例 → 获取定位 → 保存 → 执行 | | 18 | 任务文件路径不一致 | 容器 `/app/data` vs 脚本 `backend/data` | 统一走共享 volume `/data/.../data` |
| 🟡 **P1** | Phase 5 剩余待办 | Settings.vue / Pinia / 单元测试 | | 19 | `PermissionError` 写结果 | 容器 root 创建目录,ubains 无写权限 | `chown ubains:ubains` + `chmod 775` |
| 20 | Claude Code 401 | 宿主机 token 指向失效的 bigmodel 地址 | 同步本地有效 token + office.ubainsyun.com |
| 21 | 执行引擎永久卡死(仅打印「开始执行」) | `run_in_executor` 线程池中 greenlet 线程桥与 uvloop 不兼容 | 改为专用 `threading.Thread` 执行 Playwright,禁用 uvloop |
| 22 | 容器内无头浏览器崩溃 "no XServer" | `headless` 默认 `False`,容器内无图形环境 | 默认值改为 `settings.PLAYWRIGHT_HEADLESS`(环境变量 `true`) |
| 23 | app 启动失败 `ModuleNotFoundError: paho` | 设备模拟模块 `import paho.mqtt` 未安装导致阻塞 | 改为 `try/except` 可选导入,仅设备模拟启用时才会报错 |
| 24 | uvloop 与 Playwright 不兼容 | uvicorn 默认用 uvloop,Playwright sync API 线程桥死锁 | `--loop asyncio` 强制 asyncio 事件循环 |
--- ---
## 、文档索引 ## 、文档索引
| 文档 | 路径 | | 文档 | 路径 |
|------|------| |------|------|
...@@ -270,9 +274,11 @@ ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker co ...@@ -270,9 +274,11 @@ ssh ubains@192.168.5.60 'cd /data/third_party/plat-auto-test/deploy && docker co
| 主 PRD | `Docs/PRD/需求文档/总览/_PRD_平台自动化测试可视化系统需求文档.md` | | 主 PRD | `Docs/PRD/需求文档/总览/_PRD_平台自动化测试可视化系统需求文档.md` |
| UI用例录入优化 PRD | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化.md` | | UI用例录入优化 PRD | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化.md` |
| UI用例录入优化 计划执行 | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化_计划执行.md` | | UI用例录入优化 计划执行 | `Docs/PRD/需求文档/用例管理/_PRD_UI自动化用例录入优化_计划执行.md` |
| 设备模拟模块 PRD | `Docs/PRD/需求文档/设备模拟/_PRD_需求文档_设备模拟模块.md` |
| 系统管理 PRD | `Docs/PRD/需求文档/系统管理/_PRD_需求文档_新增系统管理父菜单.md` |
| 当前进度记录 | `Docs/PRD/需求文档/总览/当前进度记录.md` | | 当前进度记录 | `Docs/PRD/需求文档/总览/当前进度记录.md` |
| V2 部署设计 | `Docs/部署方案/Linux容器化部署方案_v2.md` | | V2 部署设计 | `Docs/部署方案/Linux容器化部署方案_v2.md` |
--- ---
*本文档由 Claude Code 于 2026-07-29 生成,记录 UI自动化用例录入优化会话进度,供下次会话快速恢复上下文。* *本文档由 Claude Code 于 2026-07-29 更新,记录 P0 环境就绪 + P1 执行引擎死锁修复 + 前端 UI 端到端验证通过,供下次会话快速恢复上下文。*
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论