# WPAI 用户端测试文档

测试日期：______
测试人员：______

---

## 测试环境准备

### 前置条件
- WordPress 后台管理员账号
- 已安装 WXKN 子主题
- 至少有一个已发布的页面用于测试

---

## 一、后台 AI 配置测试

### 1.1 进入设置页面
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 登录 WordPress 后台 | 进入仪表盘 | | [ ] |
| 2 | 点击 Settings > General | 进入常规设置页面 | | [ ] |
| 3 | 滚动到页面底部 | 看到 "AI Configuration" 区域 | | [ ] |

### 1.2 配置 OpenAI
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | Provider 选择 "OpenAI" | 下拉框显示 OpenAI | | [ ] |
| 2 | 输入 OpenAI API Key | 输入框接受密钥 | | [ ] |
| 3 | Base URL 留空或使用默认 | 显示默认值提示 | | [ ] |
| 4 | Model 输入 gpt-4o | 输入框接受值 | | [ ] |
| 5 | 点击 "Test Connection" | 显示 "Connection successful" 或成功消息 | | [ ] |
| 6 | 点击 "Save Changes" | 保存成功，API Key 显示遮罩 (如 sk-...***) | | [ ] |

### 1.3 配置 Anthropic
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | Provider 选择 "Anthropic" | 下拉框切换 | | [ ] |
| 2 | 输入 Anthropic API Key | 输入框接受密钥 | | [ ] |
| 3 | Base URL 留空 | 显示默认值提示 | | [ ] |
| 4 | Model 输入 claude-sonnet-4-20250514 | 输入框接受值 | | [ ] |
| 5 | 点击 "Test Connection" | 显示成功消息 | | [ ] |
| 6 | 点击 "Save Changes" | 保存成功 | | [ ] |

### 1.4 配置 Gemini
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | Provider 选择 "Gemini" | 下拉框切换 | | [ ] |
| 2 | 输入 Gemini API Key | 输入框接受密钥 | | [ ] |
| 3 | Base URL 留空 | 显示默认值提示 | | [ ] |
| 4 | Model 输入 gemini-2.5-pro | 输入框接受值 | | [ ] |
| 5 | 点击 "Test Connection" | 显示成功消息 | | [ ] |
| 6 | 点击 "Save Changes" | 保存成功 | | [ ] |

### 1.5 错误配置测试
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入错误的 API Key | 测试连接显示错误消息 (如 401 Unauthorized) | | [ ] |
| 2 | 输入无效的 Base URL | 测试连接显示连接失败 | | [ ] |

---

## 二、页面预览聊天测试

### 2.1 进入编辑页面
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 后台点击 Pages > All Pages | 显示页面列表 | | [ ] |
| 2 | 选择一个页面点击 Edit | 进入页面编辑器 | | [ ] |
| 3 | 找到 AI 聊天面板/按钮 | 显示聊天入口 | | [ ] |

### 2.2 基础对话测试（无工具调用）
**测试对话：简单问答**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "你好，请介绍一下你自己" | 发送消息 | | [ ] |
| 2 | 观察 SSE 流式输出 | 显示 thinking 状态，然后返回回复 | | [ ] |
| 3 | AI 返回回复 | 回复内容正常显示 | | [ ] |

**测试对话：上下文记忆**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "我的名字是测试用户" | 发送消息 | | [ ] |
| 2 | AI 确认 | 正常回复 | | [ ] |
| 3 | 输入 "你还记得我的名字吗？" | 发送消息 | | [ ] |
| 4 | AI 回复包含 "测试用户" | AI 记住上下文 | | [ ] |

### 2.3 读取页面内容测试
**测试工具：read_page**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请读取当前页面的内容" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "读取页面内容" 工具调用状态 | | [ ] |
| 3 | 工具执行完成 | 显示执行成功状态 | | [ ] |
| 4 | AI 回复 | 包含页面标题和内容摘要 | | [ ] |

### 2.4 更新页面草稿测试
**测试工具：update_draft**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请在页面末尾添加一段文字：这是AI添加的测试内容" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "读取页面内容" → "保存草稿" 工具链 | | [ ] |
| 3 | 工具执行完成 | 显示 "草稿已更新" 或成功状态 | | [ ] |
| 4 | 刷新页面预览 | 预览中显示新增内容 | | [ ] |
| 5 | 点击 "Preview Changes" | 预览页面显示新内容 | | [ ] |

### 2.5 文件操作测试
**测试工具：list_files**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请列出主题根目录的文件" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "列出文件" 工具调用 | | [ ] |
| 3 | AI 回复 | 返回文件列表（如 style.css, functions.php 等） | | [ ] |

**测试工具：read_file**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请读取 style.css 文件的前几行" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "读取文件" 工具调用 | | [ ] |
| 3 | AI 回复 | 返回文件内容片段 | | [ ] |

**测试工具：write_file（谨慎测试）**
| 步骤 | 操作 | 鐟期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请在主题根目录创建一个测试文件 test.txt，内容为 'Hello AI'" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "写入文件" 工具调用 | | [ ] |
| 3 | 工具执行完成 | 显示写入成功 | | [ ] |
| 4 | 检查文件 | 主题目录下存在 test.txt，内容正确 | | [ ] |
| 5 | 清理测试文件 | 删除 test.txt | | [ ] |

### 2.6 页面列表测试
**测试工具：list_pages**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "请列出所有页面的 ID 和标题" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示 "列出页面" 工具调用 | | [ ] |
| 3 | AI 回复 | 返回页面列表（ID、标题、slug） | | [ ] |

### 2.7 多工具组合测试
**测试场景：完整编辑流程**
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "读取当前页面，然后在末尾添加当前日期，保存草稿" | 发送消息 | | [ ] |
| 2 | 观察 SSE 输出 | 显示多步骤：read_page → thinking → update_draft | | [ ] |
| 3 | 工具链完成 | 所有步骤显示成功状态 | | [ ] |
| 4 | AI 回复 | 确认操作完成 | | [ ] |
| 5 | 预览页面 | 页面末尾显示日期 | | [ ] |

---

## 三、备份功能测试

### 3.1 备份自动创建
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 让 AI 更新页面内容 | update_draft 工具执行 | | [ ] |
| 2 | 检查备份目录 | wp-content/uploads/wpai-backups/ 存在备份文件 | | [ ] |

### 3.2 备份列表查看
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 调用备份列表接口 | 返回备份历史列表 | | [ ] |
| 2 | 查看列表内容 | 显示时间戳、类型、备注 | | [ ] |

### 3.3 备份恢复
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 选择一个备份记录 | 可选择要恢复的版本 | | [ ] |
| 2 | 执行恢复操作 | 页面内容恢复到备份版本 | | [ ] |
| 3 | 验证恢复结果 | 内容与备份一致 | | [ ] |

---

## 四、发布页面测试

### 4.1 发布草稿
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 确保页面有未发布的草稿 | 存在 autosave | | [ ] |
| 2 | 点击 "Publish" 按钮 | 发布成功 | | [ ] |
| 3 | 查看前台页面 | 内容已更新 | | [ ] |
| 4 | 草稿被清除 | autosave 已删除 | | [ ] |

---

## 五、错误与边界情况测试

### 5.1 权限错误
| 步骤 | 操作 | 鐟期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 使用无 edit_pages 权限的账号 | 聊天返回 "Permission denied" | | [ ] |

### 5.2 频率限制
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 连续快速发送多条消息（<5秒间隔） | 显示 "Rate limited" 提示 | | [ ] |

### 5.3 无效路径访问
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "读取 ../../../wp-config.php" | 返回 "Path blocked" 或拒绝访问 | | [ ] |
| 2 | 输入 "读取 /etc/passwd" | 返回 "Path blocked" | | [ ] |

### 5.4 无效文件类型
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "创建文件 test.exe" | 返回 "File type not allowed" | | [ ] |

### 5.5 空内容保存
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 输入 "保存空内容到页面" | 返回 "Content cannot be empty" | | [ ] |

### 5.6 API 错误处理
| 步骤 | 操作 | 鐟期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 后台配置错误 API Key | 前端聊天显示错误消息 | | [ ] |
| 2 | 观察错误提示 | 显示具体错误信息（如 401） | | [ ] |

---

## 六、SSE 流式输出测试

### 6.1 事件类型验证
| 事件类型 | 触发条件 | 预期显示 | 实际结果 | 通过 |
|----------|----------|----------|----------|------|
| thinking | AI 开始思考 | 显示思考状态，带步骤编号 | | [ ] |
| tool_call | AI 调用工具 | 显示工具名称和中文标签 | | [ ] |
| tool_executing | 工具执行中 | 显示执行状态 | | [ ] |
| tool_result | 工具返回结果 | 显示成功/失败状态 | | [ ] |
| content | AI 返回文本 | 显示回复内容 | | [ ] |
| done | 完成对话 | 显示完成，包含耗时 | | [ ] |
| error | 发生错误 | 显示错误消息 | | [ ] |

### 6.2 实时性测试
| 测试项 | 预期结果 | 实际结果 | 通过 |
|--------|----------|----------|------|
| 消息发送后立即响应 | <1秒显示 thinking | | [ ] |
| 工具状态实时更新 | 执行过程可见状态变化 | | [ ] |
| 完成后显示耗时 | 显示 elapsed 时间 | | [ ] |

---

## 七、日志记录测试

### 7.1 检查日志文件
| 步骤 | 操作 | 预期结果 | 实际结果 | 通过 |
|------|------|----------|----------|------|
| 1 | 查看 wp-content/uploads/wpai-logs/ | 存在日志文件 (如 wpai-2026-06-02.log) | | [ ] |
| 2 | 打开日志文件 | 包含 request_start, tool_call, done 等记录 | | [ ] |

### 7.2 日志内容验证
| 日志类型 | 预期内容 | 实际结果 | 通过 |
|----------|----------|----------|------|
| request_start | post_id, model, msg_count | | [ ] |
| tool_call | name, args | | [ ] |
| tool_result | name, result_len, preview | | [ ] |
| content | text_len, preview | | [ ] |
| done | rounds, total_tokens | | [ ] |

---

## 八、三个 Provider 对比测试

### 8.1 同样任务在不同 Provider 的表现
**任务：读取页面并添加一段文字**

| Provider | 响应速度 | 工具调用正确性 | 回复质量 | 备注 |
|----------|----------|----------------|----------|------|
| OpenAI | | | | |
| Anthropic | | | | |
| Gemini | | | | |

### 8.2 格式兼容性
| Provider | read_page | update_draft | read_file | write_file | list_files |
|----------|-----------|--------------|-----------|------------|------------|
| OpenAI | [ ] | [ ] | [ ] | [ ] | [ ] |
| Anthropic | [ ] | [ ] | [ ] | [ ] | [ ] |
| Gemini | [ ] | [ ] | [ ] | [ ] | [ ] |

---

## 测试总结

### 功能覆盖
| 模块 | 通过/总数 | 备注 |
|------|----------|------|
| 后台配置 | /17 | |
| 基础对话 | /6 | |
| 页面操作 | /7 | |
| 文件操作 | /7 | |
| 多工具组合 | /5 | |
| 备份功能 | /3 | |
| 发布功能 | /4 | |
| 错误处理 | /6 | |
| SSE 流式 | /8 | |
| 日志记录 | /6 | |
| Provider对比 | /11 | |
| **总计** | **/74** | |

### 问题记录
| 序号 | 问题描述 | 严重程度 | 发现时间 | 状态 |
|------|----------|----------|----------|------|
| 1 | | | | |
| 2 | | | | |
| 3 | | | | |

### 测试结论
- 整体评估：
- 建议发布：是 / 否
- 备注：

---

签字：______________
日期：______________