上下文管理与持久化测试(Normal Flow)
📖 测试概述
验证基于 ContextRepo 的上下文在编辑→持久化→刷新恢复的完整链路,覆盖消息与变量的保存、默认上下文初始化、导出基本检查等正常流程。
🎯 测试目标
- 确认默认上下文存在且可编辑
- 验证 ContextEditor 的变更会被立即持久化
- 刷新页面后上下文数据可恢复
- 基础导出内容结构正确(context-bundle)
📋 前置条件
- 应用可正常启动(Web 或 Electron 桌面端均可)
- 基础功能可用(可打开优化页与上下文编辑器)
- 如需走导出流程,浏览器需允许下载/剪贴板权限
🔧 测试步骤
步骤1:准备并打开上下文编辑器
AI执行指导:
- 使用
browser_snapshot定位“对话管理/会话管理”区域 - 若无消息,点击“添加消息”创建至少1条
- 点击“打开编辑器”按钮,等待全屏 ContextEditor 出现
预期结果:
- 对话区域显示消息数量与变量统计徽章
- 点击“打开编辑器”后出现标题为“上下文编辑器”的弹窗
验证点:
- 顶部显示“消息数”标签
- 存在“打开编辑器”按钮并可点击
- 弹窗渲染正常,无布局错乱
步骤2:编辑消息并触发持久化
AI执行指导:
- 在“消息”标签页:
- 将第一条消息内容设置为:
系统:你是一个有用的助手,任务是 {{task}}(system) - 新增一条用户消息:
请帮我完成 {{task}},场景:{{scene}}
- 将第一条消息内容设置为:
- 使用
browser_wait_for等待界面稳定
预期结果:
- ContextEditor 触发
update:state/contextChange事件,父层应立即写入 ContextRepo - 变量统计显示包含 task、scene 两个变量
验证点:
- 变量统计数量为2(不强制位置,仅检查存在)
- 无错误提示或异常交互
步骤3:在变量页添加覆盖并再次保存
AI执行指导:
- 切换到“变量/上下文变量”标签页
- 点击“添加变量”,创建:
task = 集成测试scene = 正常流程
- 关闭编辑器(或保持开启)
预期结果:
- 上下文变量覆盖写入持久化层
- 返回对话区域后,变量缺失数应为0
验证点:
- 变量页展示2个覆盖项
- 对话区缺失变量标签消失
步骤4:刷新恢复验证
AI执行指导:
- 执行页面刷新(
browser_navigate到同一路由,或browser_press_key执行刷新快捷键) - 回到优化页面后,重复“步骤1”的操作打开 ContextEditor
预期结果:
- 刷新后仍能看到先前的两条消息与两个变量覆盖
- 变量统计、缺失数与刷新前一致
验证点:
- 消息数与内容与刷新前一致
- 变量覆盖项与刷新前一致
- 无任何丢失或回退到初始状态
步骤5:导出基本检查(结构校验)
AI执行指导:
- 在 ContextEditor 中打开“导出”对话框,选择“标准格式”
- 执行“复制到剪贴板”或“导出到文件”
- 读取导出内容(剪贴板或文件)并解析 JSON
预期结果:
- 导出数据的 metadata.variables、messages 字段完整
- 若包含 tools 字段应为数组(可为空)
验证点:
-
messages为数组且长度 ≥ 2 -
metadata.variables.task === "集成测试" -
metadata.variables.scene === "正常流程" -
tools字段存在(数组,可空)
🧪 诊断建议(失败时)
- 若刷新后数据丢失:检查
ContextRepo.update/ save是否被调用(通过控制台日志或 IPC 调用) - 若导出为空:确认导出前已
setData,或查看导出格式选择是否正确 - 若变量缺失统计异常:确认变量名与占位符大小写是否完全匹配
✅ 成功标准
- 编辑→持久化→刷新后恢复完整一致
- 导出结构正确,可被再次导入(replace 模式)
- 全流程无前端错误、无阻塞告警
Source: docs/testing/ai-automation/test-scenarios/normal-flow/08-context-persistence.md