deerflow-code/frontend-web/docs/测试.md
2026-09-07 18:24:55 +08:00

6.3 KiB
Raw Permalink Blame History

AI 智能写作 — 手工测试清单

测试环境:后端 http://localhost:8001,前端 http://localhost:5174 每项测试前确认后端已启动(make dev)、前端已启动(pnpm dev)


T1 — 启动写作任务

# 步骤 预期结果
1.1 打开 Canvas 页面,点击右上角「AI 写作」按钮 AIWritingPanel 在右侧展开,显示写作配置表单
1.2 填写:意图「新能源汽车市场趋势分析」,类型「分析报告」,目标读者「行业研究人员」,字数「1200」 表单验证通过,提交按钮可点击
1.3 点击「开始写作」 按钮变为 loading 状态;时间轴出现第一条「素材收集专家 · 开始检索素材」进度条目
1.4 意图字段留空后点击提交 表单校验阻止提交,提示「请填写写作意图」

T2 — SSE 进度流(时间轴)

# 步骤 预期结果
2.1 任务启动后观察时间轴 每隔几秒新增进度条目,agent_name 标签分别出现「素材收集专家」「作家」「编辑」
2.2 打开浏览器 DevTools → Network,过滤 stream 看到一个 text/event-stream 请求长连接,持续收到 data: 帧
2.3 断网 5 秒后恢复 面板显示「连接中断」提示(或 error 事件),不崩溃

T3 — PAUSE-1 素材确认

# 步骤 预期结果
3.1 等待素材收集专家完成检索,出现 PAUSE-1 干预卡 卡片标题「素材确认」,列出 ≥1 条素材,每条有复选框、标题、来源、相关度分数色条
3.2 全选所有素材,点击「确认素材,继续写作」 干预卡禁用,时间轴新增「作家 · 开始规划大纲」
3.3 重新发起任务,PAUSE-1 出现后取消勾选全部素材,点击「重新检索」 向后端发送 action: re_search;时间轴回到素材收集专家节点重新检索
3.4 PAUSE-1 出现后填写「追加关键词」输入框(如「锂电池」)并按 Enter,再点「追加搜索」 标签出现「锂电池」;后端收到 action: append_search, extraKeywords: ["锂电池"]
3.5 验证相关度色条颜色:分数 ≥0.8 绿色 / 0.5–0.8 橙色 / <0.5 红色 三种颜色均可在不同素材中观察到

T4 — PAUSE-2 大纲确认

# 步骤 预期结果
4.1 PAUSE-2 出现后检查大纲卡 显示文章标题 + ≥2 个章节,每节有节标题与要点列表
4.2 点击文章标题,内联编辑改为「2025 新能源趋势报告」,按 Enter 标题实时变更,不刷新页面
4.3 展开某章节,点击一条要点,修改文字,按 Blur 失焦 要点文字更新
4.4 点击「+ 新增章节」,填写章节标题 大纲末尾追加新章节
4.5 点击「确认大纲,开始写作」 编辑后的大纲随 action: confirm_outline 提交;时间轴出现「作家 · 开始撰写草稿」
4.6 PAUSE-2 出现后点击「重新规划大纲」 显示意见输入框;填写「请增加政策分析章节」后提交;后端收到 action: re_outline, outlineFeedback: ...

T5 — PAUSE-3 草稿确认

# 步骤 预期结果
5.1 作家完成草稿,PAUSE-3 出现 干预卡显示修改次数(如「第 1 稿」);右侧 Artifact 面板同步显示 Markdown 草稿内容
5.2 点击「定稿,提交编辑审核」 进入编辑节点;时间轴出现「编辑 · 开始审核」
5.3 点击「提出修改意见」,填写意见后提交 作家节点重新生成草稿;修改次数 +1
5.4 连续打回 3 次,观察第 4 次 PAUSE-3 revisionCount 正确递增显示

T6 — PAUSE-4 审核结果确认

# 步骤 预期结果
6.1 编辑审核完成,PAUSE-4 出现 ReviewCard 显示:综合得分、事实/逻辑/语言三项分数、及格线(默认 75)、verdict 徽章(通过=绿 / 打回=红)
6.2 verdict=pass 时,点击「接受审核,定稿」 流程结束;时间轴出现「完成」;右侧面板保留最终草稿
6.3 verdict=reject 时,查看问题列表 major 问题排在 minor 前;每条显示类别徽章、位置、问题描述、建议
6.4 verdict=reject 时,点击「强制定稿」 向后端发送 action: force_finalize;流程结束
6.5 添加「额外说明」文字后点击「接受审核,定稿」 extra_notes 包含在提交的 intervention payload 中(DevTools → Network 验证)

T7 — 错误与边界场景

# 步骤 预期结果
7.1 后端未启动时点击「开始写作」 面板显示错误提示「无法连接到服务器」,不白屏
7.2 写作进行中点击「停止/重置」 时间轴清空,表单恢复可编辑,后端流被中断(Network 连接关闭)
7.3 素材列表为空(后端返回 0 条)时 PAUSE-1 干预卡显示「暂无素材」提示,「确认」按钮仍可点击
7.4 大纲只有 1 个章节时,点击删除该章节 删除按钮禁用或弹出「至少保留一个章节」提示
7.5 弱模型返回格式错误的 JSON(手动 mock 后端) 前端收到 fallback 结构,不崩溃;时间轴正常继续

T8 — 跨阶段状态一致性

# 步骤 预期结果
8.1 PAUSE-2 时展开大纲卡,刷新页面(F5) 页面恢复;如写作任务 ID 持久化,状态可恢复(否则回到初始状态,均可接受)
8.2 同时打开两个浏览器标签,各自启动独立写作任务 两个任务互不干扰,各自有独立 task_id
8.3 完整跑通一次全流程(T1→T2→T3→T4→T5→T6 pass) 右侧 Artifact 面板显示完整定稿文章,时间轴所有节点状态为「完成」

后端单元测试(补充确认)

# 在 offline-backend-20260512/backend/ 下运行
PYTHONPATH=. uv run pytest tests/test_ai_writing_json_parse.py -v   # 16 tests
PYTHONPATH=. uv run pytest tests/test_ai_writing_graph.py -v        # 19 tests

两个测试文件均应全部通过(0 failed)。

npm install @tiptap/core @tiptap/starter-kit @tiptap/extension-underline @tiptap/extension-placeholder