SOP-003:CRM 产品创建 E2E 测试

支持复制到 Excel 的标准 SOP 模板;每个 任务(Task ID) 表示一个可打卡的子文档,便于人工/机器按照序号完成并记录进度。

文档元数据

  • 文档类型:SOP / Checklist
  • 适用场景http://localhost:3000/crm 产品/服务管理界面 + 后端 API 验证
  • 创建者:QA / 自动化工程
  • 最近更新时间:{{YYYY-MM-DD}} (请生成时替换)
  • 相关接口定义core/openapi/crm.swagger.jsonProductService 模块(特别是 POST /api/v1/productsGET /api/v1/products

前置条件

条件 检查方式
本地或测试环境可访问 http://localhost:3000/crm 浏览器打开,页面未返回 500/404
已使用有产品权限的用户登录 登录接口/前端登录流程成功,能加载左侧导航
测试数据准备就绪 记录将使用的产品名称/编号,不重复已有记录
API Key 或 Session 可用于后端验证(可选) ProductServiceApiKeyAuth 或登录 Token 可用于 GET/POST /api/v1/products

任务矩阵(Excel Checklist 行模板)

每个任务独立一个表格,依次执行并记录状态;状态列可直接粘贴到 Excel 以打勾 [ ][x]

任务 T1:环境与账号验证

入口:http://localhost:3000/crm

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:打开浏览器 浏览器启动成功 浏览器窗口打开 屏幕截图 [ ] 步骤 2
步骤2:输入 URL http://localhost:3000/crm 页面开始加载 地址栏显示正确 URL 屏幕截图 [ ] 步骤 3
步骤3:登录 账号/密码 登录成功,跳转到主页 左侧导航栏显示 屏幕截图、浏览器日志 [ ] 步骤 4
步骤4:导航到「产品/服务」 点击左侧「产品/服务」菜单 页面成功加载、显示产品列表表格、无 500 错误 UI:存在标题、表格;Console:无错误 屏幕截图、浏览器日志 [ ] T2

任务 T2:新建产品 UI 操作

前置条件:T1 成功且当前在产品列表

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:点击右上「创建」按钮 弹出产品创建对话框 对话框显示,标题为「创建产品」 屏幕截图 [ ] 步骤 2
步骤2:保持「产品」标签选中 标签页停留在「产品」 标签页高亮显示 屏幕截图 [ ] 步骤 3
步骤3:填写必填字段 名称:QA-E2E-{{timestamp}} 价格:¥1.00 字段成功填写,无验证错误 输入框显示正确内容 屏幕截图 [ ] 步骤 4
步骤4:填写描述/上传图片(可选) 描述:测试产品 图片:可选 可选字段成功填写 内容显示正确 屏幕截图 [ ] 步骤 5
步骤5:点击创建按钮 对话框关闭,新条目出现在列表,显示成功提示 UI:新行出现;toast:创建成功 截图 + 系统提示 [ ] T3

任务 T3:后端确认

前置条件:T2 成功

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:记录产品名称/编号 从 UI 复制产品名称和 ID 名称和 ID 已记录 笔记/剪贴板 文本记录 [ ] 步骤 2
步骤2:调用 GET /api/v1/products filters=name:eq:QA-E2E-{{timestamp}} 携带有效 Token/API Key 响应状态码 200,返回产品列表 HTTP 状态码 API Response [ ] 步骤 3
步骤3:校验返回数据 检查返回的第一项产品数据 产品名称、价格与创建时一致 JSON 字段:nameprice Response Body + curl command [ ] T4

任务 T4:数据一致性 & 清理

前置条件:T3 返回预期

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:比对 UI 与 API 数据 UI 显示的价格/描述,API 返回的价格/描述 两者完全一致 人工/脚本比对 比对结果截图/日志 [ ] 步骤 2
步骤2:记录产品 ID 从 API 响应中提取 productId ID 已记录 笔记/日志 产品 ID 记录 [ ] 步骤 3
步骤3:清理测试数据(可选) 调用 DELETE /api/v1/products/{id} 或标记为待清理 删除成功(状态码 200)或标记完成 API 响应或数据库标记 删除请求响应 + 记录日志 [ ]

说明:每个 任务 可视作独立文档,便于 API 或进度采集工具抓取 Task ID + Status + Evidence 等字段。

API 参考(必须遵循的接口)

接口 方法 说明 关键字段 & 数据格式
/api/v1/products POST 创建产品 body 需要 coreProduct 定义,最少提供 name(string)、price(string/decimal),可选 descriptioncategoriesimageUrl。也可以指定 parent 参数控制归属、productId 自定义 ID。
/api/v1/products GET 列表/确认产品 可通过 filters=name:eq:<value>pageSize=1 精确定位刚创建的记录;coreListProductsResponse 里的 products 数组含 coreProduct 结构,可比对 idprice
/api/v1/products/assign POST(若需权限分配) 赋予产品团队/代理人 请求体参考 coreAssignProductRequest,用于附加权限或工作流测试。

参见完整定义:core/openapi/crm.swagger.jsondefinitionscoreProduct, coreListProductsResponse,以及 securityDefinitionsApiKeyAuth

进度采集模板(机器辅助/人手填报)

Task ID Status Evidence Operator Timestamp Notes
T1 [ ] / [x] screen-T1.png qa-bot 2025-12-21T09:00:00 "登录成功"
T2 [ ] / [x] screen-T2.png qa-zhang 2025-12-21T09:03:00 "名称已填写"

Tip:监控系统可定时读取 Task ID + Status 列;每次 status 变更都写入对应 EvidenceTimestamp 以供追踪。

异常与恢复

  • 页面未加载:确认后端服务运行 gateway + admin;查看浏览器 ConsoleNetwork 500/401;记录 Request ID 并换账号重试。
  • 创建失败:记录 toast 错误、截图,使用 GET /api/v1/products 检查是否已部分创建,再决定是否重试或清除。
  • API 返回 default 错误:拦截 googlerpcStatuscodemessage,附加 curl 命令传给开发。

附录:Checklist 导出格式

Task ID,Task Name,Status,Evidence,Operator,Notes
T1,环境与账号验证,[ ],screen-T1.png,qa-bot,"login ok"
T2,新建产品 UI 操作,[ ],screen-T2.png,qa-bot,"create dialog ok"

直接复制上述 CSV/Excel 内容可实现标准化追踪。