feat: Agentic QE Fleet v2.0.0 - 14-agent quality engineering platform
- 14 specialized AI agents across 5 battle zones (Prepare/Analyze/Design/Review/Monitor) - New: risk-assessor, test-strategist, data-builder, coverage-auditor, quality-gatekeeper, execution-analyst, knowledge-curator - New: fleet_runner.py orchestrator with multi-zone manifest pipeline - New: fleet_config.yml for centralized configuration - New: knowledge activation system (keyword + semantic matching) - New: semantic conflict detection with severity grading (P0-P3) - New: three-tier quality gate (PASS/PASS_WITH_FIX/BLOCKED) - New: monitor zone for test execution analysis and auto knowledge curation - Backward compatible: /case_generate alias, case_pipeline.py preserved - Comprehensive docs: USER_GUIDE.md + MAINTENANCE_GUIDE.md
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
# 新人礼需求 关联需求与冲突检查
|
||||
|
||||
## 目标需求
|
||||
- `source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
## 项目画像
|
||||
- `knowledge_base/00_project/project_profile.md`
|
||||
|
||||
## 关联技术方案
|
||||
- `source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
## 关联需求识别
|
||||
- 未识别到相似度达到阈值的历史需求文档。
|
||||
|
||||
## 潜在冲突与修改建议
|
||||
- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。
|
||||
@@ -0,0 +1,111 @@
|
||||
# 新人礼需求分析
|
||||
|
||||
## 背景与目标
|
||||
|
||||
本期需求围绕“新人礼”活动能力建设,目标是在平台端和商家端支持配置新人礼活动,并在 C 端针对符合新人条件的用户展示领取入口与发放优惠券奖励,提升新注册用户的首单转化。
|
||||
|
||||
技术方案补充了两个关键限制:
|
||||
|
||||
- 同一时间仅允许存在 1 个进行中的新人礼活动。
|
||||
- 每个新人礼活动仅允许绑定 1 张优惠券,发放结果需落新人礼发放记录表。
|
||||
|
||||
## 范围与边界
|
||||
|
||||
### 范围内
|
||||
|
||||
- 平台端“营销-新人有礼”列表、查询、新建、编辑、查看、失效、删除。
|
||||
- 商家端“营销-新人有礼”同构能力。
|
||||
- 新人礼活动配置字段校验:活动名称、活动时间、活动奖品、优惠券选择。
|
||||
- 优惠券选择范围控制:平台端仅选平台券,商家端仅选本店铺优惠券。
|
||||
- C 端首页和门店首页的新人礼弹窗检查与领取。
|
||||
- 发放成功后的优惠券入账和发放记录落库。
|
||||
- `ua/newGift/check` 与 `ua/newGift/send` 对应的资格校验和发放行为。
|
||||
|
||||
### 范围外
|
||||
|
||||
- 积分类型新人礼,需求和技术方案均明确“暂不支持”。
|
||||
- 下单后退款再重新认定为新人场景,技术方案明确“暂不支持下单后退款场景”。
|
||||
- 多奖品、多券组合、多人拼抢同一活动池等扩展玩法。
|
||||
|
||||
## 用户角色与前置条件
|
||||
|
||||
- 平台运营:维护平台维度新人礼活动。
|
||||
- 商家运营:维护店铺维度新人礼活动。
|
||||
- C 端用户:登录后触发首页或门店首页新人礼检查与领取。
|
||||
- 后端系统:负责活动状态判断、资格校验、优惠券发放、发送日志写入。
|
||||
|
||||
前置条件:
|
||||
|
||||
- 已存在投放中、未过期、领取方式为“用户领取”的优惠券。
|
||||
- 用户已登录,且能获取平台维度与店铺维度的历史下单信息。
|
||||
- 发券接口可用,优惠券中心返回的券状态准确。
|
||||
|
||||
## 关键业务规则
|
||||
|
||||
1. 平台端和商家端都可以配置新人礼活动,但优惠券范围必须与端侧归属一致。
|
||||
2. 活动名称最多 50 个字。
|
||||
3. 活动开始时间必须大于等于当前时间,结束时间必须大于开始时间。
|
||||
4. 活动奖品当前仅支持优惠券,且每个活动仅能关联 1 张优惠券。
|
||||
5. 平台维度同一时间仅允许 1 个进行中的平台新人礼活动;店铺维度同一时间每个店铺仅允许 1 个进行中的门店新人礼活动。
|
||||
6. 新人判定按订单提交结果范围判断:平台新人礼查询平台范围订单,店铺新人礼查询当前店铺订单;若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单等),仍视为新人。
|
||||
7. 用户登录首页时,若存在进行中的新人礼活动且用户未领取过,则展示新人礼弹窗。
|
||||
8. 门店首页只对门店新人展示门店新人礼弹窗。
|
||||
9. 若同时存在弹窗广告,新人礼弹窗必须先于广告弹窗展示。
|
||||
10. 用户点击立即领取成功后,奖励进入“我的优惠券”,同时写入新人礼发放记录。
|
||||
11. 活动“已结束”和“已失效”并存时,页面优先展示“已失效”。
|
||||
12. 活动失效后状态展示为“已失效”,并支持后续删除。
|
||||
13. 用户领取平台新人礼后,若仍满足门店新人条件,允许继续领取门店新人礼。
|
||||
|
||||
## 主流程描述
|
||||
|
||||
1. 运营在平台端或商家端进入“营销-新人有礼”列表页。
|
||||
2. 运营新建活动,填写活动名称、活动时间并选择 1 张符合条件的优惠券。
|
||||
3. 系统校验时间、优惠券范围、优惠券状态和活动并存规则,保存活动。
|
||||
4. 活动进入“未开始”或“进行中”状态,列表页按状态展示可操作按钮。
|
||||
5. C 端用户登录平台首页或门店首页时,调用资格检查接口。
|
||||
6. 若存在进行中的匹配活动且用户符合新人条件且未领取过,则展示新人礼弹窗。
|
||||
7. 用户点击“立即领取”,系统发放优惠券并记录发放日志。
|
||||
8. 发放成功后,用户可在个人中心优惠券列表查看奖励。
|
||||
|
||||
## 跨需求关联与冲突修订建议
|
||||
|
||||
- 当前未识别到需要纳入本次评审的关联需求,也未发现需要基于历史需求执行的规则冲突修订。
|
||||
- 当前无需对历史需求做口径覆盖修订,但仍需重点防御营销类公共风险:
|
||||
- 重复点击导致重复发放。
|
||||
- 前端传参篡改导致越权选券或跨店铺发券。
|
||||
- 状态变更与页面展示不一致。
|
||||
|
||||
## 技术方案补充约束
|
||||
|
||||
- `ua/newGift/check` 负责资格检查,应重点验证平台维度和店铺维度“新人”判定口径。
|
||||
- `ua/newGift/send` 负责发券,应重点验证幂等、防重复领取、失败原因记录和成功落库。
|
||||
- 数据模型拆分为主表、礼物关联表、发放记录表,说明测试不能只看页面成功提示,还要覆盖:
|
||||
- `new_gift` 主表活动状态和有效性字段。
|
||||
- `new_gift_detail` 活动与券的绑定关系。
|
||||
- `new_gift_send_log` 发放成功或失败记录。
|
||||
- 技术目标给出用户响应 RT 1000ms,应至少对资格检查和领取动作补充性能基线关注。
|
||||
|
||||
## 产品确认口径
|
||||
|
||||
- 活动并存范围:平台维度同一时间仅允许 1 条进行中的平台活动;店铺维度同一时间每个店铺仅允许 1 条进行中的门店活动。
|
||||
- 新人判定口径:若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单),仍视为新人。
|
||||
- 状态展示优先级:活动“已结束”和“已失效”并存时,优先展示“已失效”。
|
||||
- 平台礼与门店礼关系:用户已领取平台新人礼后,只要满足门店新人条件,仍允许领取门店新人礼。
|
||||
|
||||
## 项目差异化测试约束
|
||||
|
||||
- 平台端、商家端、C 端是三套角色链路,必须覆盖角色隔离和数据隔离。
|
||||
- 这是典型营销发券能力,需重点覆盖越权选券、重复发放、状态错发和资损场景。
|
||||
- 预期结果必须同时覆盖 UI 反馈和后台状态变化,特别是活动状态、券领取结果、发放日志。
|
||||
|
||||
## 风险点与确认结果
|
||||
|
||||
- 风险点:重复点击“立即领取”或接口重试导致同一用户重复发放优惠券。
|
||||
- 风险点:商家端错误选择了其他店铺的优惠券,导致跨店资损或越权发券。
|
||||
- 风险点:活动失效、已结束、已删除三个状态口径不清,可能导致列表按钮和实际行为不一致。
|
||||
- 风险点:平台新人和店铺新人的判定依赖历史订单数据,若口径不清,容易误发或漏发。
|
||||
- 风险点:同一时间仅允许 1 个进行中的活动,如果平台端和商家端同时配置活动,范围口径不清会导致规则冲突。
|
||||
- 确认结果:平台端和商家端活动可以并存,但约束粒度为“平台一条、每店铺各一条”。
|
||||
- 确认结果:未支付取消、超时未付、已退款等最终交易关闭单据不影响新人资格。
|
||||
- 确认结果:活动“已结束”和“已失效”同时成立时,页面优先展示“已失效”。
|
||||
- 确认结果:已领取平台新人礼的用户,若满足门店新人条件,仍允许继续领取门店新人礼。
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"requirement": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_source_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_input_type": "docx",
|
||||
"base_name": "新人礼需求",
|
||||
"normalized_requirement_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/requirement.md",
|
||||
"technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/technical_solutions/新人礼技术方案.docx"
|
||||
],
|
||||
"normalized_technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/technical_solution_01.md"
|
||||
],
|
||||
"analysis_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_分析.md",
|
||||
"relation_report_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_关联与冲突.md",
|
||||
"test_points_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_points/新人礼需求_测试点.md",
|
||||
"test_cases_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_cases/新人礼需求_测试用例.md",
|
||||
"excel_output_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports",
|
||||
"project_profile_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/00_project/project_profile.md",
|
||||
"knowledge_base_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/test_case_template.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/definition_of_done.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/review_checklist.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/common_missed_scenes.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/historical_defects.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/marketing_rules.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/03_best_practices/payment_flow_cases.md"
|
||||
],
|
||||
"effective_terminology_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md"
|
||||
],
|
||||
"optional_terminology_files": [],
|
||||
"related_requirements": [],
|
||||
"conflict_candidates_count": 0,
|
||||
"current_excel_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports/新人礼需求_测试用例.xlsx",
|
||||
"versioning_scheme": {
|
||||
"current_files": "固定文件名,始终表示当前最新版",
|
||||
"snapshot_rule": "仅在 export 成功且产物内容发生变化时递增版本",
|
||||
"snapshot_dir_pattern": "output/versions/{BASE_NAME}/vN/"
|
||||
},
|
||||
"latest_snapshot_version": "v9",
|
||||
"latest_snapshot_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/versions/新人礼需求/v9",
|
||||
"latest_snapshot_type": "full_pipeline",
|
||||
"confirmation_gate": {
|
||||
"required": false,
|
||||
"reasons": [],
|
||||
"pending_markers_count": 0,
|
||||
"decision_file": null,
|
||||
"decision_status": "not_required",
|
||||
"decision_status_label": null,
|
||||
"allow_export_before_confirmation": null,
|
||||
"candidate_decision_files": [],
|
||||
"suggested_decision_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/decisions/新人礼需求_确认结论.md"
|
||||
},
|
||||
"maintained_requirement_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/requirements/新人礼需求.md"
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
# 新人礼需求
|
||||
|
||||
> 文档角色:需求文档
|
||||
> 原始来源:`source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
基线-新人礼
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 0.0.1 | 文档创建 | 张昊 | 2026-02-28 |
|
||||
一、业务背景
|
||||
基于问界需求清单 新人礼需求
|
||||
二、业务目标
|
||||
通过发布新人礼活动,吸引新用户注册使用~平台端&商家端支持发布新人礼活动,支持配置优惠券奖品,c端新用户注册展示新人礼内容
|
||||
三、产品设计
|
||||
1. 平台端-营销-新人有礼
|
||||
1.1 新人有礼列表
|
||||
列表数据说明
|
||||
数据权限:有此菜单列表权限的用户可看数据
|
||||
排序规则:按数据新增时间倒序排列
|
||||
分页规则:默认10行每页,可自主选择每页显示的条数(10/20/30/50)
|
||||
数据来源:如下表
|
||||
| 数据字段 | 数据来源 |
|
||||
| 活动名称 | 来源【新增/编辑】表单同名字段 |
|
||||
| 活动时间 | 来源【新增/编辑】表单“活动时间“数据 |
|
||||
| 活动状态 | 见下方状态逻辑说明 |
|
||||
| 活动有效性 | 展示有效/已失效,支持 失效活动,失效后展示 已失效,失效后 操作栏展示删除操作 |
|
||||
| 活动奖品 | 展示活动配置的奖品,当前活动奖品仅支持优惠券 |
|
||||
| 创建时间 | 活动创建时间 |
|
||||
状态逻辑说明
|
||||
| 状态名称 | 状态变更条件 | 可操作按钮 |
|
||||
| 未开始 | 活动时间开始时间>当前时间 | 编辑,失效 |
|
||||
| 进行中 | 活动时间开始时间<=当前时间 | 查看,失效 |
|
||||
| 已结束 | 活动时间结束时间<当前时间 | 删除 |
|
||||
查询条件说明
|
||||
| 查询条件 | 查询逻辑 |
|
||||
| 活动名称 | 模糊查询,查询列表字段“活动名称” |
|
||||
| 活动状态 | 精准查询,单选,选项数据:未开始、进行中、已结束、已失效,默认空 |
|
||||
功能按钮说明
|
||||
| 按钮名称 | 触发后逻辑说明 | |
|
||||
| 新建 | 在当前窗口打开“新建新人礼”弹窗 | |
|
||||
| 查询 | 1、已选查询条件情况下,列表显示符合条件的数据 2、查询条件无匹配数据时,列表显示空,提示”暂无数据“ | |
|
||||
| 重置 | 清空查询条件 | |
|
||||
| 编辑 | 打开编辑表单弹窗 | |
|
||||
| 查看 | 打开查看表单弹窗 | |
|
||||
| 失效 | 打开失效操作弹窗,失效操作后,状态变更为已失效 | |
|
||||
| 删除 | 打开删除操作弹窗,删除操作后,在列表删除活动(永久删除);取消后,关闭删除弹窗。 | |
|
||||
1.2 新增/编辑
|
||||
页面字段说明
|
||||
| 字段名称 | 逻辑规则 | 是否必填 | 是否可编辑 | 原型界面、逻辑补充 |
|
||||
| 活动名称 | 文本输入,最多50个字 | 是 | 是 | |
|
||||
| 活动时间 | 开始时间-结束时间,年月日时分秒 | 是 | 是 | 控制活动的有效时段,可选择的时间大于等于当前时间,结束时间大于开始时间 |
|
||||
| 活动奖品 | 多选 | 是 | 是 | |
|
||||
| | 送优惠券 优惠券: 勾选后展示选择优惠券,只能选择1张优惠券,选择后展示选中优惠券信息表格 选择优惠券弹窗: 通用优惠券选择弹窗,单选 平台端展示平台可用优惠券列表, 商家端展示商家可用的优惠券列表, 优惠券列表数据展示规则:投放,未过期且为 用户领取 的优惠券,支持根据名称筛选 | 是 | 是 | 优惠券列表:选择前 优惠券列表:选择后 选择优惠券弹窗: |
|
||||
| | 送积分 可输入1-999999的整数,配置生效后调用发积分接口发放积分 | 是 | 否 | 暂不支持 |
|
||||
2. 商家端-营销-新人有礼
|
||||
功能同平台端,仅优惠券选择时,仅可选择该店铺下的优惠券
|
||||
3. C端
|
||||
3.1 首页
|
||||
| 平台首页-新人礼领取提示 奖励领取后,可在个人中心优惠券查看 | 店铺首页-新人礼领取提示 |
|
||||
| 功能点 | 功能说明 |
|
||||
| 弹窗逻辑 | 1)用户未在任意门店下过单,即视为新用户,登录后进入首页,弹窗提示用户领取新人礼奖励 2)用户未在该门店下过单,即视为门店新用户,登录后进入门店首页,弹窗提示用户领取新人礼奖励时机3)如果平台或店铺设置了弹窗广告,则新人礼弹窗在弹窗广告之前展示,关闭新人礼弹窗后,展示弹窗广告内容 |
|
||||
| 优惠券 | 用户点击新人礼弹窗立即领取按钮,如果领取成功,奖励进入我的-优惠券列表,并提示用户领取成功 |
|
||||
@@ -0,0 +1,66 @@
|
||||
# 新人礼技术方案
|
||||
|
||||
> 文档角色:技术方案
|
||||
> 原始来源:`source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
基线改造---新人礼技术方案&需求概述
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 1.0 | 建档 | 陶震 | 2026-2-21 |
|
||||
1 背景
|
||||
1.1 需求背景
|
||||
新增,针对于新注册,未下单用户发放专属优惠券的场景(暂不支持下单后退款场景)
|
||||
1.2 业务现况
|
||||
1.3. 业务系统现况
|
||||
1.4 名词说明
|
||||
| 名称 | 描述 |
|
||||
| 新人(平台新人,店铺新人) | 平台新人:未在该平台下过单的用户,即shop_custormer中无任何数据的user 店铺新人:未在该店铺下过单的用户,即shop——customer中无该店铺该user数据的用户 |
|
||||
1.7 涉及人员
|
||||
| 角色名称 | 使用内容 |
|
||||
| 用户 | 消费者 |
|
||||
| 运营 | 商城日常使用维护以及操作者。 |
|
||||
2 目标
|
||||
本期实现目标说明:
|
||||
2.1、技术目标
|
||||
| 技术指标 | 指标值 | 备注 |
|
||||
| 用户响应RT | 1000ms | |
|
||||
| 用户体量 | | |
|
||||
| 并发数 | | |
|
||||
| 开发语言 | | |
|
||||
| 网络要求 | | |
|
||||
3 整体概述
|
||||
3.1 需求概述
|
||||
同一时间仅允许一个新人礼活动(避免同一时间多个活动发放业务过重)。关联优惠券仅支持关联一张
|
||||
C端弹窗,若存在进行中的新人礼活动且用户未领取过,则进行弹窗
|
||||
3.2 业务架构图(一图概览)
|
||||
3.3 业务模块列表
|
||||
3.4 第三方服务列表(可选)
|
||||
| 服务厂商 | 类型(接口/设备) | 接口地址 | 备注 | 状态 |
|
||||
3.5 技术架构
|
||||
3.5.1 前端设计
|
||||
3.5.2 后端设计
|
||||
3.6 领域模型设计
|
||||
新人礼主表
|
||||
| SQLCREATE TABLE `new_gift` ( `new_gift_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `shop_id` bigint NOT NULL COMMENT '关联店铺 平台为0', `activity_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动名称', `activity_start_time` datetime NOT NULL COMMENT '活动开始时间', `activity_end_time` datetime NOT NULL COMMENT '活动结束时间', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `activity_status` int NOT NULL COMMENT '活动状态0未开始,1进行中,2已结束', `valid_status` int NOT NULL DEFAULT '0' COMMENT '有效性 0有效 1已失效', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` int NOT NULL DEFAULT '0' COMMENT '是否已删除 0否1是', PRIMARY KEY (`new_gift_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼主表'; |
|
||||
新人礼关联礼物表
|
||||
| SQLCREATE TABLE `new_gift_detail` ( `new_gift_detail_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `gift_biz_id` bigint NOT NULL COMMENT '礼物主键Id', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_detail_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼 子表,存储主表与礼物关联关系'; |
|
||||
新人礼发放记录表
|
||||
| SQLCREATE TABLE `new_gift_send_log` ( `new_gift_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID', `send_status` int NOT NULL COMMENT '发放状态 0成功 1失败', `fail_reason` json DEFAULT NULL COMMENT '失败原因', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `new_gift_detail_id` bigint NOT NULL COMMENT '礼物详情主键', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_log_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼发放记录表'; |
|
||||
3.7 数据模型设计
|
||||
详见领域模型
|
||||
3.8 依赖项
|
||||
| 依赖项 | 作用 | 预计提供时间 | 状态 | 责任人 | 交付物 |
|
||||
4 场景(user story)与流程图(How)
|
||||
4.1 新增活动
|
||||
4.1.1 业务流程图
|
||||
4.1.2 时序图
|
||||
4.1.3 接口依赖
|
||||
无
|
||||
4.1.4 接口设计
|
||||
| API | 状态 | 说明 |
|
||||
| /mp/newGift/save | 未开发 | 新增新人礼活动 |
|
||||
| /mp/newGift/update | 未开发 | 修改新人礼活动 |
|
||||
| /mp/newGift/detail | 未开发 | 查看新人礼详情 |
|
||||
| /mp/newGift/delete | 未开发 | 删除新人礼活动 |
|
||||
| /mp/newGift/page | 未开发 | 新人礼活动分页查询 |
|
||||
| /ua/newGift/check | 未开发 | 检测用户是否符合进行中的平台/店铺中的新人礼活动。 |
|
||||
| /ua/newGift/send | 未开发 | 为用户发放对应新人礼绑定的券 |
|
||||
@@ -0,0 +1,47 @@
|
||||
# 新人礼需求测试用例
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| PLT_NG_LIST_001 | 平台端-营销管理-新人有礼列表 | 验证平台端列表默认排序、分页和查询功能正确 | P1 | 功能测试 | 平台端已存在 12 条新人礼活动数据,覆盖未开始、进行中、已结束、已失效状态;测试账号具备列表权限 | 1. 登录平台端进入营销-新人有礼列表<br>2. 观察默认排序和分页条数<br>3. 输入活动名称关键字执行查询<br>4. 选择活动状态执行筛选<br>5. 输入无匹配关键字执行查询<br>6. 点击重置 | 活动A 创建时间晚于活动B;查询关键字=新人;状态=进行中;无匹配关键字=不存在的活动名 | 1. 列表默认按创建时间倒序展示<br>2. 默认每页展示 10 条<br>3. 名称查询仅返回命中活动<br>4. 状态筛选仅返回对应状态活动<br>5. 无匹配数据时列表展示空态或“暂无数据”提示<br>6. 点击重置后查询条件被清空,列表恢复默认结果 | [AI修正: 对标团队用例补充空结果查询场景] |
|
||||
| PLT_NG_CFG_001 | 平台端-营销管理-新人有礼配置 | 验证活动时间非法时无法保存活动 | P1 | 功能测试 | 平台运营账号已登录;存在可选平台优惠券 | 1. 点击新建活动<br>2. 输入合法活动名称<br>3. 设置开始时间早于当前时间后尝试保存<br>4. 再设置结束时间早于开始时间后尝试保存 | 活动名称=平台新人礼A;开始时间=当前时间前 1 分钟;结束时间=开始时间前 1 秒 | 1. 页面对开始时间非法给出明确提示<br>2. 页面对结束时间非法给出明确提示<br>3. 活动保存失败<br>4. 后台 `new_gift` 主表不新增活动记录 | 边界值 |
|
||||
| PLT_NG_CFG_002 | 平台端-营销管理-新人有礼配置 | 验证平台端只能绑定 1 张符合条件的平台优惠券 | P0 | 功能测试 | 平台运营账号已登录;平台下存在 3 张券,分别为投放中可领券、已过期券、非用户领取券 | 1. 点击新建活动<br>2. 打开选择优惠券弹窗<br>3. 观察券列表范围<br>4. 选择 1 张投放中可领券后尝试继续追加选择第 2 张券<br>5. 保存活动 | 券A=投放中未过期用户领取券;券B=已过期券;券C=系统发放券 | 1. 弹窗仅展示平台可用且投放中、未过期、用户领取的券<br>2. 已过期券和非用户领取券不展示或不可选<br>3. 页面仅允许单选 1 张券<br>4. 保存成功后 `new_gift_detail` 仅存在 1 条券绑定记录 | [AI修正: 技术方案限定单券绑定] |
|
||||
| PLT_NG_CFG_003 | 平台端-营销管理-新人有礼配置 | 验证积分奖励当前不支持 | P1 | 功能测试 | 平台运营账号已登录 | 1. 点击新建活动<br>2. 进入活动奖品区域<br>3. 查看送积分配置入口<br>4. 若可通过前端或抓包提交积分类型则尝试保存 | gift_type=积分;积分值=100 | 1. 页面不允许启用积分奖品,或该入口展示为暂不支持<br>2. 若前端被绕过提交积分类型,后端拦截保存并返回错误提示<br>3. 后台不生成积分类型活动记录 | [AI修正: 范围外能力拦截] |
|
||||
| PLT_NG_CREATE_001 | 平台端-营销管理-新人有礼配置 | 验证平台端新建合法活动可保存成功 | P0 | 功能测试 | 平台运营账号已登录;存在 1 张投放中、未过期、用户领取类型的平台优惠券;当前无冲突中的平台活动 | 1. 点击新建活动<br>2. 填写活动名称、时间并选择 1 张合法平台券<br>3. 点击确定保存<br>4. 返回列表并进入详情页核对数据 | 活动名称=平台新人礼春季活动;开始时间=明天 10:00;结束时间=后天 10:00;券ID=PLT_COUPON_1001 | 1. 页面提示创建成功<br>2. 列表新增该活动记录,字段展示正确<br>3. 活动状态按时间口径展示为未开始<br>4. `new_gift` 和 `new_gift_detail` 新增对应活动及券绑定记录 | [AI修正: 对标团队用例补充后台正向新建链路] |
|
||||
| PLT_NG_EDIT_001 | 平台端-营销管理-新人有礼编辑 | 验证平台端编辑未开始活动可保存成功 | P1 | 功能测试 | 平台已存在 1 条未开始活动;平台运营账号已登录;存在 1 张新的合法平台优惠券 | 1. 在列表中点击编辑未开始活动<br>2. 修改活动名称、时间或绑定券<br>3. 点击确定保存<br>4. 刷新列表并进入详情查看 | 原活动名称=平台新人礼A;新活动名称=平台新人礼A-调整版;新券ID=PLT_COUPON_1002 | 1. 页面提示保存成功<br>2. 列表展示为修改后的名称和时间<br>3. 详情页展示最新配置<br>4. 后台活动主表和明细表更新为最新值,不产生重复活动记录 | [AI修正: 对标团队用例补充后台正向编辑链路] |
|
||||
| PLT_NG_POPUP_001 | 平台端-营销管理-优惠券选择弹窗 | 验证平台端选券弹窗支持搜索分页排序和单选反馈 | P1 | 功能测试 | 平台运营账号已登录;平台下存在 25 张符合或不符合条件的优惠券 | 1. 进入新建活动页面并打开优惠券选择弹窗<br>2. 点击刷新并观察列表加载<br>3. 输入优惠券名称执行搜索<br>4. 切换分页条数和页码<br>5. 观察列表排序和字段展示<br>6. 选择 1 张优惠券并确认返回 | 券名称关键字=新人礼;分页项=10/20;目标券=PLT_COUPON_1003 | 1. 弹窗可正常刷新数据<br>2. 名称搜索仅返回命中券<br>3. 分页、页码切换和排序行为正确<br>4. 列表展示券名称、有效期、领取方式等必要字段<br>5. 仅允许单选 1 张券,选中后页面回填正确的券信息 | [AI修正: 对标团队用例补充选券弹窗交互明细] |
|
||||
| PLT_NG_RULE_001 | 平台端-营销管理-新人有礼配置 | 验证平台维度同一时间仅允许一个进行中的新人礼活动 | P0 | 功能测试 | 已存在 1 条平台活动A,时间范围覆盖当前时刻且状态为进行中;平台运营账号已登录 | 1. 点击新建活动<br>2. 填写与活动A 时间重叠的新活动B信息<br>3. 选择合法平台优惠券并保存 | 活动A 时间=今天 10:00 到 明天 10:00;活动B 时间=今天 12:00 到 明天 12:00 | 1. 页面或接口提示当前已有进行中的平台新人礼活动<br>2. 活动B 保存失败<br>3. 后台不新增活动B 记录<br>4. 活动A 状态和绑定关系不受影响 | [AI修正: 按产品确认口径更新为平台维度唯一] |
|
||||
| PLT_NG_STATE_001 | 平台端-营销管理-新人有礼状态 | 验证活动失效后展示已失效并支持删除 | P1 | 功能测试 | 平台已存在 1 条未开始活动和 1 条进行中活动;平台运营账号已登录 | 1. 在列表中对活动执行失效操作<br>2. 刷新列表查看状态和操作按钮<br>3. 对已失效活动执行删除操作<br>4. 再次刷新列表 | 活动A=未开始;活动B=进行中 | 1. 失效后活动有效性展示为已失效<br>2. 失效活动的操作按钮切换为删除<br>3. 删除确认后页面提示删除成功<br>4. 列表中不再显示该活动<br>5. 后台活动记录被标记删除或按实现永久删除,不可继续被资格检查命中 | 状态流转 |
|
||||
| PLT_NG_STATE_002 | 平台端-营销管理-新人有礼状态 | 验证活动已结束且已失效时列表优先展示已失效 | P1 | 功能测试 | 平台存在 1 条活动,活动结束时间早于当前时间,且已执行失效操作;平台运营账号已登录 | 1. 进入平台端新人有礼列表<br>2. 查询该活动状态展示和操作按钮 | 活动A 结束时间=当前时间前 1 天;valid_status=已失效 | 1. 列表最终状态优先展示为已失效<br>2. 操作按钮按已失效口径展示删除,不按已结束展示<br>3. 页面状态展示与后台有效性字段一致 | [AI修正: 按产品确认口径补充状态优先级] |
|
||||
| MCH_NG_SCOPE_001 | 商家端-营销管理-新人有礼配置 | 验证商家端只能选择本店铺优惠券 | P0 | 功能测试 | 商家A 账号已登录;商家A 券A 为可领券;商家B 券B 为可领券 | 1. 商家A 进入新建活动页面<br>2. 打开优惠券选择弹窗<br>3. 搜索本店券A 和外店券B<br>4. 选择券A 保存活动 | 商家A ID=1001;商家B ID=1002;券A 属于商家A;券B 属于商家B | 1. 列表仅展示商家A 可用券<br>2. 搜索券B 无结果或不可选<br>3. 保存成功后活动绑定的券归属为商家A<br>4. 后台不存在跨店绑定关系 | [AI修正: 覆盖数据隔离与越权风险] |
|
||||
| MCH_NG_SCOPE_002 | 商家端-营销管理-新人有礼配置 | 验证篡改券 ID 无法越权绑定其他店铺优惠券 | P0 | 安全性测试 | 商家A 账号已登录;抓包工具可修改请求;商家B 存在 1 张有效券 | 1. 商家A 正常进入新建活动页面并选择商家A 自有券<br>2. 提交前抓包将券 ID 替换为商家B 券 ID<br>3. 提交保存请求 | 提交参数原券 ID=COUPON_A_01;篡改后券 ID=COUPON_B_01 | 1. 后端拦截越权绑定请求并返回错误提示<br>2. 页面保存失败<br>3. 后台不生成跨店活动与券绑定关系<br>4. 审计日志记录异常请求或失败原因 | [AI修正: 对应越权与价格篡改类历史风险] |
|
||||
| MCH_NG_RULE_001 | 商家端-营销管理-新人有礼配置 | 验证同一店铺仅允许一个进行中的门店新人礼活动但不同店铺可并存 | P0 | 功能测试 | 商家A 已存在 1 条进行中的门店活动A;商家B 无进行中活动;商家A、商家B 账号均可登录 | 1. 商家A 新建与活动A 时间重叠的门店活动A2并保存<br>2. 商家B 新建与活动A 同时段重叠的门店活动B并保存<br>3. 查询两家店铺活动列表 | 商家A ID=1001;商家B ID=1002;活动A2 与活动A 时间重叠;活动B 与活动A 时间重叠 | 1. 商家A 保存活动A2失败,并提示当前店铺已有进行中的新人礼活动<br>2. 商家B 保存活动B成功<br>3. 后台显示门店活动限制按店铺维度生效,不会因商家A 活动阻塞商家B 配置 | [AI修正: 按产品确认口径补充店铺维度唯一] |
|
||||
| MCH_NG_LIST_001 | 商家端-营销管理-新人有礼列表 | 验证商家端列表默认排序、分页、搜索和重置功能正确 | P1 | 功能测试 | 商家A 已存在 12 条新人礼活动数据,覆盖未开始、进行中、已结束、已失效状态;商家运营账号具备列表权限 | 1. 登录商家A 端进入新人有礼列表<br>2. 观察默认排序和分页条数<br>3. 输入活动名称关键字执行查询<br>4. 选择活动状态执行筛选<br>5. 输入无匹配关键字执行查询<br>6. 点击重置 | 店铺ID=1001;关键字=新人;状态=进行中;无匹配关键字=不存在的活动名 | 1. 列表默认按创建时间倒序展示<br>2. 默认每页展示 10 条并可切换分页项<br>3. 名称搜索和状态筛选仅返回当前店铺命中数据<br>4. 无匹配数据时展示空态或“暂无数据”提示<br>5. 点击重置后恢复默认列表 | [AI修正: 对标团队用例补充商家端列表基础能力] |
|
||||
| MCH_NG_LIST_002 | 商家端-营销管理-新人有礼列表 | 验证商家端列表字段和操作栏状态映射正确 | P1 | 功能测试 | 商家A 存在未开始、进行中、已结束、已失效四类活动;商家运营账号已登录 | 1. 进入商家A 新人有礼列表<br>2. 逐条检查活动名称、活动时间、活动状态、创建时间、操作栏<br>3. 对比不同状态下的操作按钮 | 活动A=未开始;活动B=进行中;活动C=已结束;活动D=已失效 | 1. 列表展示字段完整且内容正确<br>2. 未开始活动展示编辑、失效<br>3. 进行中活动展示查看、失效或按最终规则允许的编辑能力<br>4. 已结束和已失效活动展示删除或受限操作<br>5. 状态与按钮映射不串位 | [AI修正: 对标团队用例补充商家端状态按钮映射] |
|
||||
| MCH_NG_CREATE_001 | 商家端-营销管理-新人有礼配置 | 验证商家端新建合法活动可保存成功 | P0 | 功能测试 | 商家A 账号已登录;商家A 存在 1 张投放中、未过期、用户领取类型的店铺优惠券;当前店铺无冲突中的门店活动 | 1. 点击新建活动<br>2. 填写活动名称、时间并选择 1 张本店合法券<br>3. 点击确定保存<br>4. 返回列表并进入详情页核对数据 | 店铺ID=1001;活动名称=门店新人礼春季活动;券ID=SHOP_COUPON_1001 | 1. 页面提示创建成功<br>2. 列表新增该门店活动记录,字段展示正确<br>3. 活动状态按时间口径展示为未开始<br>4. `new_gift` 和 `new_gift_detail` 新增当前店铺对应活动及券绑定记录 | [AI修正: 对标团队用例补充商家端正向新建链路] |
|
||||
| MCH_NG_EDIT_001 | 商家端-营销管理-新人有礼编辑 | 验证商家端编辑未开始活动可保存成功 | P1 | 功能测试 | 商家A 存在 1 条未开始活动;商家A 账号已登录;存在 1 张新的本店合法券 | 1. 在列表中点击编辑未开始活动<br>2. 修改活动名称、时间或绑定券<br>3. 点击确定保存<br>4. 刷新列表并进入详情页核对 | 原活动名称=门店新人礼A;新活动名称=门店新人礼A-调整版;新券ID=SHOP_COUPON_1002 | 1. 页面提示保存成功<br>2. 列表和详情页展示最新配置<br>3. 后台活动主表和明细表更新为最新值<br>4. 不产生重复活动记录或跨店异常数据 | [AI修正: 对标团队用例补充商家端正向编辑链路] |
|
||||
| MCH_NG_POPUP_001 | 商家端-营销管理-优惠券选择弹窗 | 验证商家端选券弹窗支持搜索分页排序和单选反馈 | P1 | 功能测试 | 商家A 账号已登录;商家A 下存在 25 张符合或不符合条件的优惠券 | 1. 进入新建活动页面并打开优惠券选择弹窗<br>2. 点击刷新并观察列表加载<br>3. 输入优惠券名称执行搜索<br>4. 切换分页条数和页码<br>5. 观察列表排序和字段展示<br>6. 选择 1 张优惠券并确认返回 | 店铺ID=1001;券名称关键字=新人礼;分页项=10/20;目标券=SHOP_COUPON_1003 | 1. 弹窗可正常刷新数据<br>2. 搜索仅返回当前店铺命中的券<br>3. 分页、页码切换和排序行为正确<br>4. 列表展示券名称、有效期、领取方式等必要字段<br>5. 仅允许单选 1 张券,确认后页面正确回填券信息 | [AI修正: 对标团队用例补充商家端选券弹窗交互明细] |
|
||||
| MCH_NG_STATE_001 | 商家端-营销管理-新人有礼状态 | 验证商家端活动失效后展示已失效并支持删除 | P1 | 功能测试 | 商家A 已存在 1 条未开始活动和 1 条进行中活动;商家A 账号已登录 | 1. 在列表中对活动执行失效操作并确认<br>2. 刷新列表查看状态和操作按钮<br>3. 对已失效活动执行删除并确认<br>4. 再次刷新列表 | 店铺ID=1001;活动A=未开始;活动B=进行中 | 1. 失效后活动有效性展示为已失效<br>2. 已失效活动操作栏切换为删除<br>3. 删除确认后页面提示删除成功<br>4. 列表中不再显示该活动<br>5. 后台仅删除当前店铺对应活动,不影响其他店铺或平台活动 | [AI修正: 对标团队用例补充商家端失效删除链路] |
|
||||
| MCH_NG_VIEW_001 | 商家端-营销管理-新人有礼查看 | 验证商家端查看态页面所有字段只读不可编辑 | P1 | 功能测试 | 商家A 已存在 1 条新人礼活动;商家A 账号已登录 | 1. 在列表中点击查看<br>2. 观察活动名称、活动时间、活动奖品等字段状态<br>3. 尝试修改字段或提交 | 店铺ID=1001;活动ID=SHOP1001 | 1. 查看页所有字段均为只读态<br>2. 页面不提供可提交修改的入口<br>3. 用户无法通过查看态改写活动配置 | [AI修正: 对标团队用例补充商家端查看只读场景] |
|
||||
| C_NG_POP_001 | 用户端-首页-新人礼弹窗 | 验证平台新人登录平台首页时展示新人礼弹窗 | P0 | 冒烟测试 | 平台存在 1 条进行中的平台新人礼活动;用户U1 已注册登录且平台维度无下单记录;用户未领取过该活动 | 1. 用户U1 登录平台首页<br>2. 观察首页首屏弹窗 | 用户U1;平台活动=进行中;平台下单记录=0 | 1. 首页展示新人礼弹窗<br>2. 弹窗内容展示活动奖励信息和立即领取按钮<br>3. 后台资格检查接口返回命中活动和可领取状态 | 主流程 |
|
||||
| C_NG_POP_002 | 用户端-首页-新人礼弹窗 | 验证非平台新人登录平台首页时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U2 已注册登录且平台维度存在已下单记录 | 1. 用户U2 登录平台首页<br>2. 观察首页弹窗和资格检查结果 | 用户U2;平台已支付订单数=1 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面不出现立即领取入口 | 边界值 |
|
||||
| C_NG_POP_003 | 用户端-门店首页-新人礼弹窗 | 验证平台老用户但门店新用户进入门店首页时展示门店新人礼弹窗 | P0 | 功能测试 | 商家A 存在 1 条进行中的门店新人礼活动;用户U3 平台维度已有下单记录,但在商家A 维度无下单记录;用户未领取过商家A 活动 | 1. 用户U3 进入商家A 门店首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U3;平台订单数=1;商家A 订单数=0 | 1. 门店首页展示商家A 新人礼弹窗<br>2. 资格检查接口按门店维度返回可领取<br>3. 弹窗奖励信息与商家A 活动配置一致 | [AI修正: 覆盖平台新人和店铺新人差异口径] |
|
||||
| C_NG_POP_004 | 用户端-首页-弹窗优先级 | 验证存在广告弹窗时新人礼弹窗优先展示 | P1 | 功能测试 | 平台存在 1 条进行中的新人礼活动;首页同时配置普通广告弹窗;用户U1 满足平台新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首个弹窗<br>3. 关闭新人礼弹窗后继续观察 | 用户U1;广告弹窗=已配置 | 1. 首个弹窗为新人礼弹窗<br>2. 关闭新人礼弹窗后再展示广告弹窗<br>3. 整个过程中弹窗顺序与需求一致 | 交互优先级 |
|
||||
| C_NG_POP_005 | 用户端-首页-新人礼弹窗 | 验证历史订单均为交易关闭时仍识别为平台新人 | P0 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U6 历史仅有未支付取消单、超时未付单或已退款订单,且无其他非关闭订单 | 1. 用户U6 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U6 历史订单状态=交易关闭、已退款、超时未付 | 1. 首页展示平台新人礼弹窗<br>2. 资格检查接口返回满足平台新人条件<br>3. 页面不因历史关闭单或已退款单而拦截新人资格 | [AI修正: 按产品确认口径补充交易关闭单仍算新人] |
|
||||
| C_NG_POP_006 | 用户端-首页-新人礼弹窗 | 验证未登录进入首页时不展示新人礼弹窗 | P0 | 功能测试 | 平台或门店存在进行中的新人礼活动;用户未登录 | 1. 未登录直接进入平台首页<br>2. 未登录直接进入门店首页<br>3. 观察页面弹窗与网络请求 | 访问端=H5/小程序;登录态=未登录 | 1. 平台首页和门店首页均不展示新人礼弹窗<br>2. 页面不进入领取流程<br>3. 若触发资格检查请求,应返回未登录拦截而非可领取结果 | [AI修正: 取自团队现有功能用例] |
|
||||
| C_NG_POP_007 | 用户端-首页-新人礼展示 | 验证首页展示的奖品信息与后台配置一致 | P0 | 功能测试 | 平台和商家端各存在 1 条进行中的新人礼活动,且分别绑定不同门槛和优惠内容的优惠券;用户满足资格 | 1. 平台新人登录平台首页查看弹窗奖品信息<br>2. 店铺新人进入门店首页查看弹窗奖品信息<br>3. 对比后台券配置 | 平台券=满100减20, 用券时间 2026-05-01 至 2026-05-31;店铺券=8折券, 上限 30 元 | 1. 平台首页弹窗展示的平台券门槛、优惠金额或折扣、用券时间与后台配置一致<br>2. 门店首页弹窗展示的商家券信息与商家端配置一致<br>3. 不出现平台券和商家券信息串位 | [AI修正: 取自团队现有功能用例] |
|
||||
| C_NG_POP_008 | 用户端-门店首页-新人礼弹窗 | 验证门店老用户进入门店首页时不展示门店新人礼弹窗 | P1 | 功能测试 | 商家A 存在 1 条进行中的门店新人礼活动;用户U9 已登录且在商家A 维度存在已支付订单 | 1. 用户U9 进入商家A 门店首页<br>2. 观察首页弹窗和资格检查结果 | 用户U9;店铺ID=1001;商家A 已支付订单数=1 | 1. 门店首页不展示门店新人礼弹窗<br>2. 资格检查接口返回不满足门店新人条件<br>3. 页面不出现立即领取入口 | [AI修正: 对标团队用例补充门店老用户负向场景] |
|
||||
| C_NG_SEND_001 | 用户端-首页-新人礼领取 | 验证点击立即领取成功后优惠券入账并写发放日志 | P0 | 冒烟测试 | 用户U1 满足平台新人资格;平台存在进行中活动且绑定有效券;用户未领取过该活动 | 1. 用户U1 在新人礼弹窗点击立即领取<br>2. 观察页面提示<br>3. 进入我的优惠券查询奖励<br>4. 查询发放日志 | 用户U1;活动ID=NG1001;券ID=PC1001 | 1. 页面提示领取成功<br>2. 我的优惠券列表新增对应优惠券<br>3. `new_gift_send_log` 新增 1 条成功记录,包含用户、活动、活动明细和发送状态<br>4. 该用户再次进入首页时不再展示同一活动弹窗 | 主流程 |
|
||||
| C_NG_SEND_002 | 用户端-首页-新人礼领取 | 验证同一用户重复点击立即领取时只发放一次 | P0 | 回归测试 | 用户U1 满足新人资格;平台存在进行中活动且绑定有效券;抓包或前端可模拟快速重复点击 | 1. 用户U1 打开新人礼弹窗<br>2. 在 1 秒内连续点击 3 次立即领取<br>3. 查询优惠券列表和发放日志 | 用户U1;活动ID=NG1001;重复点击次数=3 | 1. 页面最多显示 1 次领取成功提示<br>2. 用户仅新增 1 张优惠券<br>3. `new_gift_send_log` 仅有 1 条成功记录,其余请求被幂等拦截或返回已领取<br>4. 不出现重复发券 | [AI修正: 对应重复提交和重复支付类历史风险] |
|
||||
| C_NG_SEND_003 | 用户端-首页-新人礼领取 | 验证领取接口超时重试时不会重复发券 | P1 | 回归测试 | 用户U1 满足新人资格;模拟领取接口首个请求响应超时但后端已处理成功 | 1. 用户U1 点击立即领取<br>2. 将首个请求模拟为前端超时<br>3. 用户再次点击立即领取或页面自动重试<br>4. 查询优惠券列表和发放日志 | 首次请求后端处理成功;前端超时 5 秒 | 1. 页面提示处理中或可稍后刷新查看结果<br>2. 最终用户仅获得 1 张优惠券<br>3. 发放日志中仅 1 条成功记录,不存在多条成功发放<br>4. 页面最终状态与后台结果一致 | 非功能 |
|
||||
| C_NG_SEND_004 | 用户端-首页-新人礼领取 | 验证发券失败时记录失败原因且不出现半成功状态 | P1 | 功能测试 | 用户U4 满足新人资格;将发券接口模拟为失败 | 1. 用户U4 点击立即领取<br>2. 观察页面提示<br>3. 查询我的优惠券列表<br>4. 查询发放日志 | 券中心返回=库存不足或券失效 | 1. 页面提示领取失败及失败原因<br>2. 我的优惠券列表不新增该券<br>3. `new_gift_send_log` 记录失败状态和失败原因<br>4. 用户状态不被误标记为已领取 | [AI修正: 覆盖部分成功和异常记录风险] |
|
||||
| C_NG_SEND_005 | 用户端-首页-新人礼领取 | 验证同一账号双端并发领取时最终仅一次成功 | P1 | 功能测试 | 用户U5 满足新人资格;用户在手机端和 H5 端同时登录;平台存在进行中活动 | 1. 手机端和 H5 端同时打开新人礼弹窗<br>2. 两端几乎同时点击立即领取<br>3. 查询两端提示、优惠券列表和发放日志 | 用户U5;双端并发间隔小于 200ms | 1. 最终仅 1 次领取成功<br>2. 另一端返回已领取、处理中或重复请求提示<br>3. 用户优惠券列表仅新增 1 张券<br>4. 发放日志仅保留 1 条成功记录 | 并发 |
|
||||
| C_NG_SEND_006 | 用户端-门店首页-新人礼领取 | 验证用户领取平台新人礼后仍可继续领取门店新人礼 | P0 | 功能测试 | 用户U7 已成功领取平台新人礼;商家A 存在进行中的门店新人礼活动;用户U7 在商家A 维度无非关闭订单且未领取过门店活动 | 1. 用户U7 登录平台首页并确认已领取平台新人礼<br>2. 用户U7 进入商家A 门店首页<br>3. 观察门店弹窗并点击立即领取<br>4. 查询门店发放日志和优惠券列表 | 用户U7;平台活动ID=PLT1001;门店活动ID=SHOP1001 | 1. 门店首页仍展示门店新人礼弹窗<br>2. 用户可成功领取门店优惠券<br>3. 优惠券列表中同时存在平台新人礼券和门店新人礼券<br>4. 门店活动发放日志新增成功记录,不因已领取平台礼而被拦截 | [AI修正: 按产品确认口径补充平台礼与门店礼可并存] |
|
||||
| C_NG_CHECK_001 | 用户端-首页-资格检查 | 验证无进行中活动时不展示新人礼弹窗 | P1 | 功能测试 | 平台不存在进行中活动;用户U1 满足新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动列表=空或全部不命中资格检查条件 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动<br>3. 页面不出现错误提示或异常闪现弹窗 | [AI修正: 将状态负向场景拆分,提升定位性] |
|
||||
| C_NG_CHECK_002 | 用户端-首页-资格检查 | 验证活动未开始时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条未开始活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动开始时间=当前时间后 1 小时 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动未开始<br>3. 页面不出现提前曝光的领取入口 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| C_NG_CHECK_003 | 用户端-首页-资格检查 | 验证活动已结束时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条已结束活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动结束时间=当前时间前 1 小时 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动已结束<br>3. 页面不出现已结束活动的领取入口 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| C_NG_CHECK_004 | 用户端-首页-资格检查 | 验证活动已失效时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条已失效活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动状态=已失效;valid_status=失效 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动已失效<br>3. 页面状态与后台有效性字段一致 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| API_NG_PERF_001 | 用户端-资格检查-接口性能 | 验证资格检查接口在常规数据量下满足 RT 基线 | P2 | 性能测试 | 存在 100 条历史发放记录和 10 条活动数据;性能环境可统计接口耗时 | 1. 触发用户进入平台首页调用资格检查接口<br>2. 连续执行 30 次<br>3. 统计平均 RT 和 P95 | 接口=`/ua/newGift/check`;样本量=30 | 1. 常规场景下接口平均 RT 和 P95 满足 1000ms 基线或接近目标<br>2. 页面无明显卡顿或超时提示<br>3. 若超基线,应能定位是活动查询、资格判定还是日志判断链路耗时 | [AI修正: 技术方案给出 RT 1000ms] |
|
||||
| C_NG_RULE_001 | 用户端-资格判定-新人口径 | 验证存在已支付订单时不再识别为新人 | P1 | 功能测试 | 用户U8 存在 1 笔平台已支付订单;平台存在进行中活动 | 1. 用户U8 登录平台首页<br>2. 观察是否弹出新人礼<br>3. 查询资格检查返回 | 用户U8 历史订单状态=已支付 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面展示与产品确认口径一致,不因已支付历史订单继续认定为新人 | [AI修正: 按产品确认口径更新新人判定] |
|
||||
| DATA_NG_SCOPE_001 | 平台端-商家端-数据隔离 | 验证平台端与商家端新人礼活动数据不互通 | P0 | 功能测试 | 平台端已配置 1 条平台新人礼活动;商家A 已配置 1 条门店新人礼活动;测试账号分别具备平台端和商家端权限 | 1. 在平台端查看新人礼活动列表<br>2. 在商家A 端查看新人礼活动列表<br>3. 对比两端列表数据 | 平台活动ID=PLT1001;商家活动ID=SHOP1001 | 1. 平台端仅展示平台活动数据,不展示商家活动<br>2. 商家端仅展示当前店铺活动数据,不展示平台活动<br>3. 两端数据查询、查看、编辑入口相互隔离 | [AI修正: 取自团队现有功能用例] |
|
||||
| VIEW_NG_READONLY_001 | 平台端-营销管理-新人有礼查看 | 验证查看态页面所有字段只读不可编辑 | P1 | 功能测试 | 平台已存在 1 条新人礼活动;平台运营账号已登录 | 1. 在列表中点击查看<br>2. 观察活动名称、活动时间、活动奖品等字段状态<br>3. 尝试修改字段或提交 | 活动ID=PLT1001 | 1. 查看页所有字段均为只读态<br>2. 页面不提供可提交修改的入口<br>3. 用户无法通过查看态改写活动配置 | [AI修正: 取自团队现有功能用例] |
|
||||
| PLT_NG_LIST_002 | 平台端-营销管理-新人有礼列表 | 验证列表展示字段和操作栏状态映射正确 | P1 | 功能测试 | 平台端存在未开始、进行中、已结束、已失效四类活动;平台运营账号已登录 | 1. 进入新人有礼列表<br>2. 逐条检查活动名称、活动时间、活动状态、创建时间、操作栏<br>3. 对比不同状态下的操作按钮 | 活动A=未开始;活动B=进行中;活动C=已结束;活动D=已失效 | 1. 列表展示字段完整且内容正确<br>2. 未开始活动展示编辑、失效<br>3. 进行中活动展示查看、失效或按最终规则允许的编辑能力<br>4. 已结束和已失效活动操作栏按需求展示删除或受限操作 | [AI修正: 取自团队现有功能用例] |
|
||||
@@ -0,0 +1,80 @@
|
||||
# 新人礼需求测试点
|
||||
|
||||
## 1. 平台端列表与状态管理
|
||||
|
||||
1. 校验平台端列表默认按创建时间倒序展示,分页默认 10 条,支持切换 10、20、30、50 条。[需求]
|
||||
2. 校验按活动名称模糊查询、按活动状态精准查询、无结果空态提示、重置查询条件的行为正确。[需求]
|
||||
3. 校验活动状态“未开始、进行中、已结束、已失效”的展示口径和操作按钮是否符合规则。[需求]
|
||||
4. 校验活动失效后有效性展示为“已失效”,且操作栏切换为删除入口。[需求]
|
||||
5. 校验删除为永久删除,删除后列表不可见,后台数据状态与页面一致。[需求][项目画像]
|
||||
6. 校验列表展示字段、创建时间、活动状态、操作栏内容与需求一致。[需求]
|
||||
7. 校验不同状态下操作栏按钮映射正确,未开始/进行中/已结束/已失效的按钮展示不串位。[需求]
|
||||
8. 校验点击“新建”可正常打开新人礼配置弹窗或页面,交互入口与权限口径一致。[需求]
|
||||
|
||||
## 2. 活动配置与规则校验
|
||||
|
||||
1. 校验活动名称最大 50 字,超长时前端与后端均能拦截。[需求][漏测清单]
|
||||
2. 校验活动开始时间小于当前时间、结束时间小于开始时间时不可保存。[需求][边界]
|
||||
3. 校验活动奖品当前仅支持优惠券,积分奖励入口不可用或被明确拦截。[需求][技术方案]
|
||||
4. 校验每个活动仅能关联 1 张优惠券,无法多选、多绑或通过接口绕过限制。[技术方案][项目画像]
|
||||
5. 校验平台端新建合法活动时保存成功,列表、详情和活动明细数据落库正确。[需求]
|
||||
6. 校验平台端编辑未开始活动时可修改名称、时间、奖品等字段并保存成功。[需求]
|
||||
7. 校验平台维度同一时间仅允许 1 个进行中的平台新人礼活动,新增或编辑命中并存条件时保存失败并给出明确提示。[技术方案]
|
||||
8. 校验同一店铺维度同一时间仅允许 1 个进行中的门店新人礼活动,不同店铺活动可并存。[技术方案]
|
||||
9. 校验失效、删除操作存在二次确认,确认结果与列表及后台状态保持一致。[需求]
|
||||
10. 校验编辑活动时,已开始活动是否只允许查看不允许修改关键字段,状态与按钮保持一致。[需求]
|
||||
|
||||
## 3. 优惠券选择与权限隔离
|
||||
|
||||
1. 校验平台端仅能选择平台可用优惠券,且仅展示投放中、未过期、领取方式为用户领取的券。[需求]
|
||||
2. 校验商家端仅能选择本店铺可用优惠券,不能看到或绑定其他店铺优惠券。[需求][项目画像]
|
||||
3. 校验优惠券选择弹窗支持刷新、名称搜索、列表字段展示、分页、排序、单选反馈,且平台端与商家端展示的数据源范围不同。[需求][漏测清单]
|
||||
4. 校验通过抓包篡改券 ID、店铺 ID 或活动归属时,后端能拦截越权绑定。[历史缺陷][项目画像]
|
||||
|
||||
## 4. 商家端差异化行为
|
||||
|
||||
1. 校验商家端列表默认排序、分页、名称搜索、状态筛选、重置、空结果提示与平台端同构,但数据仅限当前店铺可见。[需求][项目画像]
|
||||
2. 校验商家端列表展示字段、操作栏按钮、不同状态下的权限映射正确。[需求]
|
||||
3. 校验商家端新建活动时,跨店铺数据隔离正确,门店 A 无法操作门店 B 活动。[项目画像]
|
||||
4. 校验商家端新建合法活动时保存成功,列表、详情和活动明细数据正确落库。[需求]
|
||||
5. 校验商家端编辑未开始活动时可正常保存,查看态页面所有字段只读,编辑态与查看态权限边界正确。[需求]
|
||||
6. 校验商家端活动失效、删除后,仅影响当前店铺,不影响平台端和其他店铺活动。[需求]
|
||||
7. 校验平台端活动数据在商家端不可见,商家端活动数据在平台端不可见。[需求][项目画像]
|
||||
|
||||
## 5. C 端资格检查与弹窗展示
|
||||
|
||||
1. 校验平台新人登录平台首页时,存在进行中平台新人礼活动则展示弹窗。[需求]
|
||||
2. 校验平台范围存在已支付或非交易关闭订单时,不展示平台新人礼弹窗。[需求][边界]
|
||||
3. 校验店铺新人进入门店首页时,存在进行中门店新人礼活动则展示门店弹窗。[需求]
|
||||
4. 校验当前店铺范围存在已支付或非交易关闭订单时,不展示门店新人礼弹窗。[需求][边界]
|
||||
5. 校验门店老用户进入门店首页时,不展示门店新人礼弹窗。[需求]
|
||||
6. 校验同时存在广告弹窗时,新人礼弹窗优先展示,关闭新人礼后再展示广告。[需求]
|
||||
7. 校验活动未开始时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
8. 校验活动已结束时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
9. 校验活动已失效时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
10. 校验用户历史订单均为交易关闭(未支付取消、超时未付、已退款)时,仍识别为新人并展示弹窗。[需求][产品确认]
|
||||
11. 校验未登录进入平台首页或门店首页时,不展示新人礼弹窗且不误触发领取流程。[需求][边界]
|
||||
12. 校验平台首页和门店首页展示的奖品信息与后台配置的优惠券信息一致,包括门槛、优惠金额、用券时间等。[需求]
|
||||
|
||||
## 6. 领取发放与日志落库
|
||||
|
||||
1. 校验点击“立即领取”成功后,页面提示成功,优惠券进入“我的优惠券”。[需求]
|
||||
2. 校验领取成功后,`new_gift_send_log` 写入成功记录,记录用户、活动、活动明细和状态。[技术方案]
|
||||
3. 校验同一用户重复点击“立即领取”或短时间重复调用发放接口时,只发放 1 次,日志不出现重复成功记录。[历史缺陷][项目画像]
|
||||
4. 校验领取失败时,页面提示失败原因,发放日志记录失败原因,不出现半成功状态。[技术方案][项目画像]
|
||||
5. 校验用户已领取过奖励后,再次进入首页不再弹出同一活动弹窗。[需求]
|
||||
6. 校验用户已领取平台新人礼后,若满足门店新人条件,仍可在门店首页领取门店新人礼。[需求][产品确认]
|
||||
|
||||
## 7. 异常、并发与非功能
|
||||
|
||||
1. 校验弱网、超时或接口重试场景下,资格检查接口不会错误多次弹窗或误判资格。[漏测清单][非功能]
|
||||
2. 校验领取接口超时或前端重复提交时,不会重复发券,用户可通过优惠券列表或重新进入页面查看最终结果。[漏测清单][非功能]
|
||||
3. 校验同一账号在两个终端同时领取新人礼时,最终仅 1 次成功发放。[项目画像][并发]
|
||||
4. 校验资格检查和领取接口响应时间满足技术目标 RT 1000ms,至少在常规测试数据量下不明显超时。[技术方案][非功能]
|
||||
|
||||
## 8. 产品确认口径回归
|
||||
|
||||
1. 校验平台活动与门店活动可同时存在,但平台维度仅允许 1 条进行中活动、每个店铺维度仅允许 1 条进行中活动。[产品确认]
|
||||
2. 校验历史订单均为交易关闭时仍视为新人;存在已支付或非关闭订单时不视为新人。[产品确认]
|
||||
3. 校验活动“已结束”和“已失效”同时成立时,列表优先展示“已失效”。[产品确认]
|
||||
4. 校验用户领取平台新人礼后,仍可继续领取符合条件的门店新人礼。[产品确认]
|
||||
@@ -0,0 +1,7 @@
|
||||
# 新人礼需求 版本索引
|
||||
|
||||
| 版本 | 类型 | 内容摘要 | 目录 |
|
||||
| --- | --- | --- | --- |
|
||||
| v7 | 历史 Excel 导入 | excel、migration_note | `output/versions/新人礼需求/v7` |
|
||||
| v8 | 完整流水线快照 | manifest、analysis、relation_report、test_points、test_cases_markdown、excel、normalized_inputs | `output/versions/新人礼需求/v8` |
|
||||
| v9 | 完整流水线快照 | manifest、analysis、relation_report、test_points、test_cases_markdown、excel、normalized_inputs | `output/versions/新人礼需求/v9` |
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"base_name": "新人礼需求",
|
||||
"version": "v7",
|
||||
"snapshot_type": "legacy_excel_import",
|
||||
"summary": [
|
||||
"excel",
|
||||
"migration_note"
|
||||
],
|
||||
"note_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/versions/新人礼需求/v7/snapshot_note.md"
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
# 新人礼需求_测试用例 历史 Excel 导入说明
|
||||
|
||||
- 导入来源:`新人礼需求_测试用例_20260426_173650.xlsx`
|
||||
- 导入类型:旧时间戳命名 Excel
|
||||
- 说明:该快照仅迁移了历史 Excel,本次未重建当时对应的分析、测试点、测试用例 Markdown 与 manifest。
|
||||
- 目的:统一历史文件归档路径,并清理 `output/excel_reports/` 中的旧时间戳文件。
|
||||
Binary file not shown.
@@ -0,0 +1,61 @@
|
||||
# 新人礼需求
|
||||
|
||||
> 文档角色:需求文档
|
||||
> 原始来源:`source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
基线-新人礼
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 0.0.1 | 文档创建 | 张昊 | 2026-02-28 |
|
||||
一、业务背景
|
||||
基于问界需求清单 新人礼需求
|
||||
二、业务目标
|
||||
通过发布新人礼活动,吸引新用户注册使用~平台端&商家端支持发布新人礼活动,支持配置优惠券奖品,c端新用户注册展示新人礼内容
|
||||
三、产品设计
|
||||
1. 平台端-营销-新人有礼
|
||||
1.1 新人有礼列表
|
||||
列表数据说明
|
||||
数据权限:有此菜单列表权限的用户可看数据
|
||||
排序规则:按数据新增时间倒序排列
|
||||
分页规则:默认10行每页,可自主选择每页显示的条数(10/20/30/50)
|
||||
数据来源:如下表
|
||||
| 数据字段 | 数据来源 |
|
||||
| 活动名称 | 来源【新增/编辑】表单同名字段 |
|
||||
| 活动时间 | 来源【新增/编辑】表单“活动时间“数据 |
|
||||
| 活动状态 | 见下方状态逻辑说明 |
|
||||
| 活动有效性 | 展示有效/已失效,支持 失效活动,失效后展示 已失效,失效后 操作栏展示删除操作 |
|
||||
| 活动奖品 | 展示活动配置的奖品,当前活动奖品仅支持优惠券 |
|
||||
| 创建时间 | 活动创建时间 |
|
||||
状态逻辑说明
|
||||
| 状态名称 | 状态变更条件 | 可操作按钮 |
|
||||
| 未开始 | 活动时间开始时间>当前时间 | 编辑,失效 |
|
||||
| 进行中 | 活动时间开始时间<=当前时间 | 查看,失效 |
|
||||
| 已结束 | 活动时间结束时间<当前时间 | 删除 |
|
||||
查询条件说明
|
||||
| 查询条件 | 查询逻辑 |
|
||||
| 活动名称 | 模糊查询,查询列表字段“活动名称” |
|
||||
| 活动状态 | 精准查询,单选,选项数据:未开始、进行中、已结束、已失效,默认空 |
|
||||
功能按钮说明
|
||||
| 按钮名称 | 触发后逻辑说明 | |
|
||||
| 新建 | 在当前窗口打开“新建新人礼”弹窗 | |
|
||||
| 查询 | 1、已选查询条件情况下,列表显示符合条件的数据 2、查询条件无匹配数据时,列表显示空,提示”暂无数据“ | |
|
||||
| 重置 | 清空查询条件 | |
|
||||
| 编辑 | 打开编辑表单弹窗 | |
|
||||
| 查看 | 打开查看表单弹窗 | |
|
||||
| 失效 | 打开失效操作弹窗,失效操作后,状态变更为已失效 | |
|
||||
| 删除 | 打开删除操作弹窗,删除操作后,在列表删除活动(永久删除);取消后,关闭删除弹窗。 | |
|
||||
1.2 新增/编辑
|
||||
页面字段说明
|
||||
| 字段名称 | 逻辑规则 | 是否必填 | 是否可编辑 | 原型界面、逻辑补充 |
|
||||
| 活动名称 | 文本输入,最多50个字 | 是 | 是 | |
|
||||
| 活动时间 | 开始时间-结束时间,年月日时分秒 | 是 | 是 | 控制活动的有效时段,可选择的时间大于等于当前时间,结束时间大于开始时间 |
|
||||
| 活动奖品 | 多选 | 是 | 是 | |
|
||||
| | 送优惠券 优惠券: 勾选后展示选择优惠券,只能选择1张优惠券,选择后展示选中优惠券信息表格 选择优惠券弹窗: 通用优惠券选择弹窗,单选 平台端展示平台可用优惠券列表, 商家端展示商家可用的优惠券列表, 优惠券列表数据展示规则:投放,未过期且为 用户领取 的优惠券,支持根据名称筛选 | 是 | 是 | 优惠券列表:选择前 优惠券列表:选择后 选择优惠券弹窗: |
|
||||
| | 送积分 可输入1-999999的整数,配置生效后调用发积分接口发放积分 | 是 | 否 | 暂不支持 |
|
||||
2. 商家端-营销-新人有礼
|
||||
功能同平台端,仅优惠券选择时,仅可选择该店铺下的优惠券
|
||||
3. C端
|
||||
3.1 首页
|
||||
| 平台首页-新人礼领取提示 奖励领取后,可在个人中心优惠券查看 | 店铺首页-新人礼领取提示 |
|
||||
| 功能点 | 功能说明 |
|
||||
| 弹窗逻辑 | 1)用户未在任意门店下过单,即视为新用户,登录后进入首页,弹窗提示用户领取新人礼奖励 2)用户未在该门店下过单,即视为门店新用户,登录后进入门店首页,弹窗提示用户领取新人礼奖励时机3)如果平台或店铺设置了弹窗广告,则新人礼弹窗在弹窗广告之前展示,关闭新人礼弹窗后,展示弹窗广告内容 |
|
||||
| 优惠券 | 用户点击新人礼弹窗立即领取按钮,如果领取成功,奖励进入我的-优惠券列表,并提示用户领取成功 |
|
||||
@@ -0,0 +1,66 @@
|
||||
# 新人礼技术方案
|
||||
|
||||
> 文档角色:技术方案
|
||||
> 原始来源:`source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
基线改造---新人礼技术方案&需求概述
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 1.0 | 建档 | 陶震 | 2026-2-21 |
|
||||
1 背景
|
||||
1.1 需求背景
|
||||
新增,针对于新注册,未下单用户发放专属优惠券的场景(暂不支持下单后退款场景)
|
||||
1.2 业务现况
|
||||
1.3. 业务系统现况
|
||||
1.4 名词说明
|
||||
| 名称 | 描述 |
|
||||
| 新人(平台新人,店铺新人) | 平台新人:未在该平台下过单的用户,即shop_custormer中无任何数据的user 店铺新人:未在该店铺下过单的用户,即shop——customer中无该店铺该user数据的用户 |
|
||||
1.7 涉及人员
|
||||
| 角色名称 | 使用内容 |
|
||||
| 用户 | 消费者 |
|
||||
| 运营 | 商城日常使用维护以及操作者。 |
|
||||
2 目标
|
||||
本期实现目标说明:
|
||||
2.1、技术目标
|
||||
| 技术指标 | 指标值 | 备注 |
|
||||
| 用户响应RT | 1000ms | |
|
||||
| 用户体量 | | |
|
||||
| 并发数 | | |
|
||||
| 开发语言 | | |
|
||||
| 网络要求 | | |
|
||||
3 整体概述
|
||||
3.1 需求概述
|
||||
同一时间仅允许一个新人礼活动(避免同一时间多个活动发放业务过重)。关联优惠券仅支持关联一张
|
||||
C端弹窗,若存在进行中的新人礼活动且用户未领取过,则进行弹窗
|
||||
3.2 业务架构图(一图概览)
|
||||
3.3 业务模块列表
|
||||
3.4 第三方服务列表(可选)
|
||||
| 服务厂商 | 类型(接口/设备) | 接口地址 | 备注 | 状态 |
|
||||
3.5 技术架构
|
||||
3.5.1 前端设计
|
||||
3.5.2 后端设计
|
||||
3.6 领域模型设计
|
||||
新人礼主表
|
||||
| SQLCREATE TABLE `new_gift` ( `new_gift_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `shop_id` bigint NOT NULL COMMENT '关联店铺 平台为0', `activity_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动名称', `activity_start_time` datetime NOT NULL COMMENT '活动开始时间', `activity_end_time` datetime NOT NULL COMMENT '活动结束时间', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `activity_status` int NOT NULL COMMENT '活动状态0未开始,1进行中,2已结束', `valid_status` int NOT NULL DEFAULT '0' COMMENT '有效性 0有效 1已失效', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` int NOT NULL DEFAULT '0' COMMENT '是否已删除 0否1是', PRIMARY KEY (`new_gift_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼主表'; |
|
||||
新人礼关联礼物表
|
||||
| SQLCREATE TABLE `new_gift_detail` ( `new_gift_detail_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `gift_biz_id` bigint NOT NULL COMMENT '礼物主键Id', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_detail_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼 子表,存储主表与礼物关联关系'; |
|
||||
新人礼发放记录表
|
||||
| SQLCREATE TABLE `new_gift_send_log` ( `new_gift_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID', `send_status` int NOT NULL COMMENT '发放状态 0成功 1失败', `fail_reason` json DEFAULT NULL COMMENT '失败原因', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `new_gift_detail_id` bigint NOT NULL COMMENT '礼物详情主键', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_log_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼发放记录表'; |
|
||||
3.7 数据模型设计
|
||||
详见领域模型
|
||||
3.8 依赖项
|
||||
| 依赖项 | 作用 | 预计提供时间 | 状态 | 责任人 | 交付物 |
|
||||
4 场景(user story)与流程图(How)
|
||||
4.1 新增活动
|
||||
4.1.1 业务流程图
|
||||
4.1.2 时序图
|
||||
4.1.3 接口依赖
|
||||
无
|
||||
4.1.4 接口设计
|
||||
| API | 状态 | 说明 |
|
||||
| /mp/newGift/save | 未开发 | 新增新人礼活动 |
|
||||
| /mp/newGift/update | 未开发 | 修改新人礼活动 |
|
||||
| /mp/newGift/detail | 未开发 | 查看新人礼详情 |
|
||||
| /mp/newGift/delete | 未开发 | 删除新人礼活动 |
|
||||
| /mp/newGift/page | 未开发 | 新人礼活动分页查询 |
|
||||
| /ua/newGift/check | 未开发 | 检测用户是否符合进行中的平台/店铺中的新人礼活动。 |
|
||||
| /ua/newGift/send | 未开发 | 为用户发放对应新人礼绑定的券 |
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"base_name": "新人礼需求",
|
||||
"version": "v8",
|
||||
"snapshot_type": "full_pipeline",
|
||||
"summary": [
|
||||
"manifest",
|
||||
"analysis",
|
||||
"relation_report",
|
||||
"test_points",
|
||||
"test_cases_markdown",
|
||||
"excel",
|
||||
"normalized_inputs"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"requirement": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_source_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_input_type": "docx",
|
||||
"base_name": "新人礼需求",
|
||||
"normalized_requirement_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/requirement.md",
|
||||
"technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/technical_solutions/新人礼技术方案.docx"
|
||||
],
|
||||
"normalized_technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/technical_solution_01.md"
|
||||
],
|
||||
"analysis_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_分析.md",
|
||||
"relation_report_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_关联与冲突.md",
|
||||
"test_points_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_points/新人礼需求_测试点.md",
|
||||
"test_cases_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_cases/新人礼需求_测试用例.md",
|
||||
"excel_output_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports",
|
||||
"project_profile_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/00_project/project_profile.md",
|
||||
"knowledge_base_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/test_case_template.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/definition_of_done.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/review_checklist.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/common_missed_scenes.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/historical_defects.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/marketing_rules.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/03_best_practices/payment_flow_cases.md"
|
||||
],
|
||||
"effective_terminology_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md"
|
||||
],
|
||||
"optional_terminology_files": [],
|
||||
"related_requirements": [],
|
||||
"conflict_candidates_count": 0,
|
||||
"current_excel_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports/新人礼需求_测试用例.xlsx",
|
||||
"versioning_scheme": {
|
||||
"current_files": "固定文件名,始终表示当前最新版",
|
||||
"snapshot_rule": "仅在 export 成功且产物内容发生变化时递增版本",
|
||||
"snapshot_dir_pattern": "output/versions/{BASE_NAME}/vN/"
|
||||
},
|
||||
"latest_snapshot_version": "v8",
|
||||
"latest_snapshot_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/versions/新人礼需求/v8"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# 新人礼需求 关联需求与冲突检查
|
||||
|
||||
## 目标需求
|
||||
- `source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
## 项目画像
|
||||
- `knowledge_base/00_project/project_profile.md`
|
||||
|
||||
## 关联技术方案
|
||||
- `source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
## 关联需求识别
|
||||
- 未识别到相似度达到阈值的历史需求文档。
|
||||
|
||||
## 潜在冲突与修改建议
|
||||
- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。
|
||||
@@ -0,0 +1,111 @@
|
||||
# 新人礼需求分析
|
||||
|
||||
## 背景与目标
|
||||
|
||||
本期需求围绕“新人礼”活动能力建设,目标是在平台端和商家端支持配置新人礼活动,并在 C 端针对符合新人条件的用户展示领取入口与发放优惠券奖励,提升新注册用户的首单转化。
|
||||
|
||||
技术方案补充了两个关键限制:
|
||||
|
||||
- 同一时间仅允许存在 1 个进行中的新人礼活动。
|
||||
- 每个新人礼活动仅允许绑定 1 张优惠券,发放结果需落新人礼发放记录表。
|
||||
|
||||
## 范围与边界
|
||||
|
||||
### 范围内
|
||||
|
||||
- 平台端“营销-新人有礼”列表、查询、新建、编辑、查看、失效、删除。
|
||||
- 商家端“营销-新人有礼”同构能力。
|
||||
- 新人礼活动配置字段校验:活动名称、活动时间、活动奖品、优惠券选择。
|
||||
- 优惠券选择范围控制:平台端仅选平台券,商家端仅选本店铺优惠券。
|
||||
- C 端首页和门店首页的新人礼弹窗检查与领取。
|
||||
- 发放成功后的优惠券入账和发放记录落库。
|
||||
- `ua/newGift/check` 与 `ua/newGift/send` 对应的资格校验和发放行为。
|
||||
|
||||
### 范围外
|
||||
|
||||
- 积分类型新人礼,需求和技术方案均明确“暂不支持”。
|
||||
- 下单后退款再重新认定为新人场景,技术方案明确“暂不支持下单后退款场景”。
|
||||
- 多奖品、多券组合、多人拼抢同一活动池等扩展玩法。
|
||||
|
||||
## 用户角色与前置条件
|
||||
|
||||
- 平台运营:维护平台维度新人礼活动。
|
||||
- 商家运营:维护店铺维度新人礼活动。
|
||||
- C 端用户:登录后触发首页或门店首页新人礼检查与领取。
|
||||
- 后端系统:负责活动状态判断、资格校验、优惠券发放、发送日志写入。
|
||||
|
||||
前置条件:
|
||||
|
||||
- 已存在投放中、未过期、领取方式为“用户领取”的优惠券。
|
||||
- 用户已登录,且能获取平台维度与店铺维度的历史下单信息。
|
||||
- 发券接口可用,优惠券中心返回的券状态准确。
|
||||
|
||||
## 关键业务规则
|
||||
|
||||
1. 平台端和商家端都可以配置新人礼活动,但优惠券范围必须与端侧归属一致。
|
||||
2. 活动名称最多 50 个字。
|
||||
3. 活动开始时间必须大于等于当前时间,结束时间必须大于开始时间。
|
||||
4. 活动奖品当前仅支持优惠券,且每个活动仅能关联 1 张优惠券。
|
||||
5. 平台维度同一时间仅允许 1 个进行中的平台新人礼活动;店铺维度同一时间每个店铺仅允许 1 个进行中的门店新人礼活动。
|
||||
6. 新人判定按订单提交结果范围判断:平台新人礼查询平台范围订单,店铺新人礼查询当前店铺订单;若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单等),仍视为新人。
|
||||
7. 用户登录首页时,若存在进行中的新人礼活动且用户未领取过,则展示新人礼弹窗。
|
||||
8. 门店首页只对门店新人展示门店新人礼弹窗。
|
||||
9. 若同时存在弹窗广告,新人礼弹窗必须先于广告弹窗展示。
|
||||
10. 用户点击立即领取成功后,奖励进入“我的优惠券”,同时写入新人礼发放记录。
|
||||
11. 活动“已结束”和“已失效”并存时,页面优先展示“已失效”。
|
||||
12. 活动失效后状态展示为“已失效”,并支持后续删除。
|
||||
13. 用户领取平台新人礼后,若仍满足门店新人条件,允许继续领取门店新人礼。
|
||||
|
||||
## 主流程描述
|
||||
|
||||
1. 运营在平台端或商家端进入“营销-新人有礼”列表页。
|
||||
2. 运营新建活动,填写活动名称、活动时间并选择 1 张符合条件的优惠券。
|
||||
3. 系统校验时间、优惠券范围、优惠券状态和活动并存规则,保存活动。
|
||||
4. 活动进入“未开始”或“进行中”状态,列表页按状态展示可操作按钮。
|
||||
5. C 端用户登录平台首页或门店首页时,调用资格检查接口。
|
||||
6. 若存在进行中的匹配活动且用户符合新人条件且未领取过,则展示新人礼弹窗。
|
||||
7. 用户点击“立即领取”,系统发放优惠券并记录发放日志。
|
||||
8. 发放成功后,用户可在个人中心优惠券列表查看奖励。
|
||||
|
||||
## 跨需求关联与冲突修订建议
|
||||
|
||||
- 当前未识别到需要纳入本次评审的关联需求,也未发现需要基于历史需求执行的规则冲突修订。
|
||||
- 当前无需对历史需求做口径覆盖修订,但仍需重点防御营销类公共风险:
|
||||
- 重复点击导致重复发放。
|
||||
- 前端传参篡改导致越权选券或跨店铺发券。
|
||||
- 状态变更与页面展示不一致。
|
||||
|
||||
## 技术方案补充约束
|
||||
|
||||
- `ua/newGift/check` 负责资格检查,应重点验证平台维度和店铺维度“新人”判定口径。
|
||||
- `ua/newGift/send` 负责发券,应重点验证幂等、防重复领取、失败原因记录和成功落库。
|
||||
- 数据模型拆分为主表、礼物关联表、发放记录表,说明测试不能只看页面成功提示,还要覆盖:
|
||||
- `new_gift` 主表活动状态和有效性字段。
|
||||
- `new_gift_detail` 活动与券的绑定关系。
|
||||
- `new_gift_send_log` 发放成功或失败记录。
|
||||
- 技术目标给出用户响应 RT 1000ms,应至少对资格检查和领取动作补充性能基线关注。
|
||||
|
||||
## 产品确认口径
|
||||
|
||||
- 活动并存范围:平台维度同一时间仅允许 1 条进行中的平台活动;店铺维度同一时间每个店铺仅允许 1 条进行中的门店活动。
|
||||
- 新人判定口径:若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单),仍视为新人。
|
||||
- 状态展示优先级:活动“已结束”和“已失效”并存时,优先展示“已失效”。
|
||||
- 平台礼与门店礼关系:用户已领取平台新人礼后,只要满足门店新人条件,仍允许领取门店新人礼。
|
||||
|
||||
## 项目差异化测试约束
|
||||
|
||||
- 平台端、商家端、C 端是三套角色链路,必须覆盖角色隔离和数据隔离。
|
||||
- 这是典型营销发券能力,需重点覆盖越权选券、重复发放、状态错发和资损场景。
|
||||
- 预期结果必须同时覆盖 UI 反馈和后台状态变化,特别是活动状态、券领取结果、发放日志。
|
||||
|
||||
## 风险点与确认结果
|
||||
|
||||
- 风险点:重复点击“立即领取”或接口重试导致同一用户重复发放优惠券。
|
||||
- 风险点:商家端错误选择了其他店铺的优惠券,导致跨店资损或越权发券。
|
||||
- 风险点:活动失效、已结束、已删除三个状态口径不清,可能导致列表按钮和实际行为不一致。
|
||||
- 风险点:平台新人和店铺新人的判定依赖历史订单数据,若口径不清,容易误发或漏发。
|
||||
- 风险点:同一时间仅允许 1 个进行中的活动,如果平台端和商家端同时配置活动,范围口径不清会导致规则冲突。
|
||||
- 确认结果:平台端和商家端活动可以并存,但约束粒度为“平台一条、每店铺各一条”。
|
||||
- 确认结果:未支付取消、超时未付、已退款等最终交易关闭单据不影响新人资格。
|
||||
- 确认结果:活动“已结束”和“已失效”同时成立时,页面优先展示“已失效”。
|
||||
- 确认结果:已领取平台新人礼的用户,若满足门店新人条件,仍允许继续领取门店新人礼。
|
||||
@@ -0,0 +1,71 @@
|
||||
# 新人礼需求测试点
|
||||
|
||||
## 1. 平台端列表与状态管理
|
||||
|
||||
1. 校验平台端列表默认按创建时间倒序展示,分页默认 10 条,支持切换 10、20、30、50 条。[需求]
|
||||
2. 校验按活动名称模糊查询、按活动状态精准查询、重置查询条件的行为正确。[需求]
|
||||
3. 校验活动状态“未开始、进行中、已结束、已失效”的展示口径和操作按钮是否符合规则。[需求]
|
||||
4. 校验活动失效后有效性展示为“已失效”,且操作栏切换为删除入口。[需求]
|
||||
5. 校验删除为永久删除,删除后列表不可见,后台数据状态与页面一致。[需求][项目画像]
|
||||
6. 校验列表展示字段、创建时间、活动状态、操作栏内容与需求一致。[需求]
|
||||
7. 校验不同状态下操作栏按钮映射正确,未开始/进行中/已结束/已失效的按钮展示不串位。[需求]
|
||||
|
||||
## 2. 活动配置与规则校验
|
||||
|
||||
1. 校验活动名称最大 50 字,超长时前端与后端均能拦截。[需求][漏测清单]
|
||||
2. 校验活动开始时间小于当前时间、结束时间小于开始时间时不可保存。[需求][边界]
|
||||
3. 校验活动奖品当前仅支持优惠券,积分奖励入口不可用或被明确拦截。[需求][技术方案]
|
||||
4. 校验每个活动仅能关联 1 张优惠券,无法多选、多绑或通过接口绕过限制。[技术方案][项目画像]
|
||||
5. 校验平台维度同一时间仅允许 1 个进行中的平台新人礼活动,新增或编辑命中并存条件时保存失败并给出明确提示。[技术方案]
|
||||
6. 校验同一店铺维度同一时间仅允许 1 个进行中的门店新人礼活动,不同店铺活动可并存。[技术方案]
|
||||
7. 校验编辑活动时,已开始活动是否只允许查看不允许修改关键字段,状态与按钮保持一致。[需求]
|
||||
|
||||
## 3. 优惠券选择与权限隔离
|
||||
|
||||
1. 校验平台端仅能选择平台可用优惠券,且仅展示投放中、未过期、领取方式为用户领取的券。[需求]
|
||||
2. 校验商家端仅能选择本店铺可用优惠券,不能看到或绑定其他店铺优惠券。[需求][项目画像]
|
||||
3. 校验优惠券选择弹窗支持按名称筛选,选择前后展示信息正确。[需求]
|
||||
4. 校验通过抓包篡改券 ID、店铺 ID 或活动归属时,后端能拦截越权绑定。[历史缺陷][项目画像]
|
||||
|
||||
## 4. 商家端差异化行为
|
||||
|
||||
1. 校验商家端列表、查询、状态展示与平台端同构,但数据仅限当前店铺可见。[需求][项目画像]
|
||||
2. 校验商家端新增活动时,跨店铺数据隔离正确,门店 A 无法操作门店 B 活动。[项目画像]
|
||||
3. 校验商家端活动失效、删除后,仅影响当前店铺,不影响平台端和其他店铺活动。[需求]
|
||||
4. 校验平台端活动数据在商家端不可见,商家端活动数据在平台端不可见。[需求][项目画像]
|
||||
5. 校验查看态页面所有字段只读,编辑态与查看态权限边界正确。[需求]
|
||||
|
||||
## 5. C 端资格检查与弹窗展示
|
||||
|
||||
1. 校验平台新人登录平台首页时,存在进行中平台新人礼活动则展示弹窗。[需求]
|
||||
2. 校验平台范围存在已支付或非交易关闭订单时,不展示平台新人礼弹窗。[需求][边界]
|
||||
3. 校验店铺新人进入门店首页时,存在进行中门店新人礼活动则展示门店弹窗。[需求]
|
||||
4. 校验当前店铺范围存在已支付或非交易关闭订单时,不展示门店新人礼弹窗。[需求][边界]
|
||||
5. 校验同时存在广告弹窗时,新人礼弹窗优先展示,关闭新人礼后再展示广告。[需求]
|
||||
6. 校验无进行中活动、活动未开始、活动已结束、活动已失效时,资格检查结果和页面展示均正确。[需求][状态流转]
|
||||
7. 校验用户历史订单均为交易关闭(未支付取消、超时未付、已退款)时,仍识别为新人并展示弹窗。[需求][产品确认]
|
||||
8. 校验未登录进入平台首页或门店首页时,不展示新人礼弹窗且不误触发领取流程。[需求][边界]
|
||||
9. 校验平台首页和门店首页展示的奖品信息与后台配置的优惠券信息一致,包括门槛、优惠金额、用券时间等。[需求]
|
||||
|
||||
## 6. 领取发放与日志落库
|
||||
|
||||
1. 校验点击“立即领取”成功后,页面提示成功,优惠券进入“我的优惠券”。[需求]
|
||||
2. 校验领取成功后,`new_gift_send_log` 写入成功记录,记录用户、活动、活动明细和状态。[技术方案]
|
||||
3. 校验同一用户重复点击“立即领取”或短时间重复调用发放接口时,只发放 1 次,日志不出现重复成功记录。[历史缺陷][项目画像]
|
||||
4. 校验领取失败时,页面提示失败原因,发放日志记录失败原因,不出现半成功状态。[技术方案][项目画像]
|
||||
5. 校验用户已领取过奖励后,再次进入首页不再弹出同一活动弹窗。[需求]
|
||||
6. 校验用户已领取平台新人礼后,若满足门店新人条件,仍可在门店首页领取门店新人礼。[需求][产品确认]
|
||||
|
||||
## 7. 异常、并发与非功能
|
||||
|
||||
1. 校验弱网、超时或接口重试场景下,资格检查接口不会错误多次弹窗或误判资格。[漏测清单][非功能]
|
||||
2. 校验领取接口超时或前端重复提交时,不会重复发券,用户可通过优惠券列表或重新进入页面查看最终结果。[漏测清单][非功能]
|
||||
3. 校验同一账号在两个终端同时领取新人礼时,最终仅 1 次成功发放。[项目画像][并发]
|
||||
4. 校验资格检查和领取接口响应时间满足技术目标 RT 1000ms,至少在常规测试数据量下不明显超时。[技术方案][非功能]
|
||||
|
||||
## 8. 产品确认口径回归
|
||||
|
||||
1. 校验平台活动与门店活动可同时存在,但平台维度仅允许 1 条进行中活动、每个店铺维度仅允许 1 条进行中活动。[产品确认]
|
||||
2. 校验历史订单均为交易关闭时仍视为新人;存在已支付或非关闭订单时不视为新人。[产品确认]
|
||||
3. 校验活动“已结束”和“已失效”同时成立时,列表优先展示“已失效”。[产品确认]
|
||||
4. 校验用户领取平台新人礼后,仍可继续领取符合条件的门店新人礼。[产品确认]
|
||||
@@ -0,0 +1,33 @@
|
||||
# 新人礼需求测试用例
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| PLT_NG_LIST_001 | 平台端-营销管理-新人有礼列表 | 验证平台端列表默认排序、分页和查询功能正确 | P1 | 功能测试 | 平台端已存在 12 条新人礼活动数据,覆盖未开始、进行中、已结束、已失效状态;测试账号具备列表权限 | 1. 登录平台端进入营销-新人有礼列表<br>2. 观察默认排序和分页条数<br>3. 输入活动名称关键字执行查询<br>4. 选择活动状态执行筛选<br>5. 点击重置 | 活动A 创建时间晚于活动B;查询关键字=新人;状态=进行中 | 1. 列表默认按创建时间倒序展示<br>2. 默认每页展示 10 条<br>3. 名称查询仅返回命中活动<br>4. 状态筛选仅返回对应状态活动<br>5. 点击重置后查询条件被清空,列表恢复默认结果 | 主流程 |
|
||||
| PLT_NG_CFG_001 | 平台端-营销管理-新人有礼配置 | 验证活动时间非法时无法保存活动 | P1 | 功能测试 | 平台运营账号已登录;存在可选平台优惠券 | 1. 点击新建活动<br>2. 输入合法活动名称<br>3. 设置开始时间早于当前时间后尝试保存<br>4. 再设置结束时间早于开始时间后尝试保存 | 活动名称=平台新人礼A;开始时间=当前时间前 1 分钟;结束时间=开始时间前 1 秒 | 1. 页面对开始时间非法给出明确提示<br>2. 页面对结束时间非法给出明确提示<br>3. 活动保存失败<br>4. 后台 `new_gift` 主表不新增活动记录 | 边界值 |
|
||||
| PLT_NG_CFG_002 | 平台端-营销管理-新人有礼配置 | 验证平台端只能绑定 1 张符合条件的平台优惠券 | P0 | 功能测试 | 平台运营账号已登录;平台下存在 3 张券,分别为投放中可领券、已过期券、非用户领取券 | 1. 点击新建活动<br>2. 打开选择优惠券弹窗<br>3. 观察券列表范围<br>4. 选择 1 张投放中可领券后尝试继续追加选择第 2 张券<br>5. 保存活动 | 券A=投放中未过期用户领取券;券B=已过期券;券C=系统发放券 | 1. 弹窗仅展示平台可用且投放中、未过期、用户领取的券<br>2. 已过期券和非用户领取券不展示或不可选<br>3. 页面仅允许单选 1 张券<br>4. 保存成功后 `new_gift_detail` 仅存在 1 条券绑定记录 | [AI修正: 技术方案限定单券绑定] |
|
||||
| PLT_NG_CFG_003 | 平台端-营销管理-新人有礼配置 | 验证积分奖励当前不支持 | P1 | 功能测试 | 平台运营账号已登录 | 1. 点击新建活动<br>2. 进入活动奖品区域<br>3. 查看送积分配置入口<br>4. 若可通过前端或抓包提交积分类型则尝试保存 | gift_type=积分;积分值=100 | 1. 页面不允许启用积分奖品,或该入口展示为暂不支持<br>2. 若前端被绕过提交积分类型,后端拦截保存并返回错误提示<br>3. 后台不生成积分类型活动记录 | [AI修正: 范围外能力拦截] |
|
||||
| PLT_NG_RULE_001 | 平台端-营销管理-新人有礼配置 | 验证平台维度同一时间仅允许一个进行中的新人礼活动 | P0 | 功能测试 | 已存在 1 条平台活动A,时间范围覆盖当前时刻且状态为进行中;平台运营账号已登录 | 1. 点击新建活动<br>2. 填写与活动A 时间重叠的新活动B信息<br>3. 选择合法平台优惠券并保存 | 活动A 时间=今天 10:00 到 明天 10:00;活动B 时间=今天 12:00 到 明天 12:00 | 1. 页面或接口提示当前已有进行中的平台新人礼活动<br>2. 活动B 保存失败<br>3. 后台不新增活动B 记录<br>4. 活动A 状态和绑定关系不受影响 | [AI修正: 按产品确认口径更新为平台维度唯一] |
|
||||
| PLT_NG_STATE_001 | 平台端-营销管理-新人有礼状态 | 验证活动失效后展示已失效并支持删除 | P1 | 功能测试 | 平台已存在 1 条未开始活动和 1 条进行中活动;平台运营账号已登录 | 1. 在列表中对活动执行失效操作<br>2. 刷新列表查看状态和操作按钮<br>3. 对已失效活动执行删除操作<br>4. 再次刷新列表 | 活动A=未开始;活动B=进行中 | 1. 失效后活动有效性展示为已失效<br>2. 失效活动的操作按钮切换为删除<br>3. 删除确认后页面提示删除成功<br>4. 列表中不再显示该活动<br>5. 后台活动记录被标记删除或按实现永久删除,不可继续被资格检查命中 | 状态流转 |
|
||||
| PLT_NG_STATE_002 | 平台端-营销管理-新人有礼状态 | 验证活动已结束且已失效时列表优先展示已失效 | P1 | 功能测试 | 平台存在 1 条活动,活动结束时间早于当前时间,且已执行失效操作;平台运营账号已登录 | 1. 进入平台端新人有礼列表<br>2. 查询该活动状态展示和操作按钮 | 活动A 结束时间=当前时间前 1 天;valid_status=已失效 | 1. 列表最终状态优先展示为已失效<br>2. 操作按钮按已失效口径展示删除,不按已结束展示<br>3. 页面状态展示与后台有效性字段一致 | [AI修正: 按产品确认口径补充状态优先级] |
|
||||
| MCH_NG_SCOPE_001 | 商家端-营销管理-新人有礼配置 | 验证商家端只能选择本店铺优惠券 | P0 | 功能测试 | 商家A 账号已登录;商家A 券A 为可领券;商家B 券B 为可领券 | 1. 商家A 进入新建活动页面<br>2. 打开优惠券选择弹窗<br>3. 搜索本店券A 和外店券B<br>4. 选择券A 保存活动 | 商家A ID=1001;商家B ID=1002;券A 属于商家A;券B 属于商家B | 1. 列表仅展示商家A 可用券<br>2. 搜索券B 无结果或不可选<br>3. 保存成功后活动绑定的券归属为商家A<br>4. 后台不存在跨店绑定关系 | [AI修正: 覆盖数据隔离与越权风险] |
|
||||
| MCH_NG_SCOPE_002 | 商家端-营销管理-新人有礼配置 | 验证篡改券 ID 无法越权绑定其他店铺优惠券 | P0 | 安全性测试 | 商家A 账号已登录;抓包工具可修改请求;商家B 存在 1 张有效券 | 1. 商家A 正常进入新建活动页面并选择商家A 自有券<br>2. 提交前抓包将券 ID 替换为商家B 券 ID<br>3. 提交保存请求 | 提交参数原券 ID=COUPON_A_01;篡改后券 ID=COUPON_B_01 | 1. 后端拦截越权绑定请求并返回错误提示<br>2. 页面保存失败<br>3. 后台不生成跨店活动与券绑定关系<br>4. 审计日志记录异常请求或失败原因 | [AI修正: 对应越权与价格篡改类历史风险] |
|
||||
| MCH_NG_RULE_001 | 商家端-营销管理-新人有礼配置 | 验证同一店铺仅允许一个进行中的门店新人礼活动但不同店铺可并存 | P0 | 功能测试 | 商家A 已存在 1 条进行中的门店活动A;商家B 无进行中活动;商家A、商家B 账号均可登录 | 1. 商家A 新建与活动A 时间重叠的门店活动A2并保存<br>2. 商家B 新建与活动A 同时段重叠的门店活动B并保存<br>3. 查询两家店铺活动列表 | 商家A ID=1001;商家B ID=1002;活动A2 与活动A 时间重叠;活动B 与活动A 时间重叠 | 1. 商家A 保存活动A2失败,并提示当前店铺已有进行中的新人礼活动<br>2. 商家B 保存活动B成功<br>3. 后台显示门店活动限制按店铺维度生效,不会因商家A 活动阻塞商家B 配置 | [AI修正: 按产品确认口径补充店铺维度唯一] |
|
||||
| C_NG_POP_001 | 用户端-首页-新人礼弹窗 | 验证平台新人登录平台首页时展示新人礼弹窗 | P0 | 冒烟测试 | 平台存在 1 条进行中的平台新人礼活动;用户U1 已注册登录且平台维度无下单记录;用户未领取过该活动 | 1. 用户U1 登录平台首页<br>2. 观察首页首屏弹窗 | 用户U1;平台活动=进行中;平台下单记录=0 | 1. 首页展示新人礼弹窗<br>2. 弹窗内容展示活动奖励信息和立即领取按钮<br>3. 后台资格检查接口返回命中活动和可领取状态 | 主流程 |
|
||||
| C_NG_POP_002 | 用户端-首页-新人礼弹窗 | 验证非平台新人登录平台首页时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U2 已注册登录且平台维度存在已下单记录 | 1. 用户U2 登录平台首页<br>2. 观察首页弹窗和资格检查结果 | 用户U2;平台已支付订单数=1 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面不出现立即领取入口 | 边界值 |
|
||||
| C_NG_POP_003 | 用户端-门店首页-新人礼弹窗 | 验证平台老用户但门店新用户进入门店首页时展示门店新人礼弹窗 | P0 | 功能测试 | 商家A 存在 1 条进行中的门店新人礼活动;用户U3 平台维度已有下单记录,但在商家A 维度无下单记录;用户未领取过商家A 活动 | 1. 用户U3 进入商家A 门店首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U3;平台订单数=1;商家A 订单数=0 | 1. 门店首页展示商家A 新人礼弹窗<br>2. 资格检查接口按门店维度返回可领取<br>3. 弹窗奖励信息与商家A 活动配置一致 | [AI修正: 覆盖平台新人和店铺新人差异口径] |
|
||||
| C_NG_POP_004 | 用户端-首页-弹窗优先级 | 验证存在广告弹窗时新人礼弹窗优先展示 | P1 | 功能测试 | 平台存在 1 条进行中的新人礼活动;首页同时配置普通广告弹窗;用户U1 满足平台新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首个弹窗<br>3. 关闭新人礼弹窗后继续观察 | 用户U1;广告弹窗=已配置 | 1. 首个弹窗为新人礼弹窗<br>2. 关闭新人礼弹窗后再展示广告弹窗<br>3. 整个过程中弹窗顺序与需求一致 | 交互优先级 |
|
||||
| C_NG_POP_005 | 用户端-首页-新人礼弹窗 | 验证历史订单均为交易关闭时仍识别为平台新人 | P0 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U6 历史仅有未支付取消单、超时未付单或已退款订单,且无其他非关闭订单 | 1. 用户U6 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U6 历史订单状态=交易关闭、已退款、超时未付 | 1. 首页展示平台新人礼弹窗<br>2. 资格检查接口返回满足平台新人条件<br>3. 页面不因历史关闭单或已退款单而拦截新人资格 | [AI修正: 按产品确认口径补充交易关闭单仍算新人] |
|
||||
| C_NG_SEND_001 | 用户端-首页-新人礼领取 | 验证点击立即领取成功后优惠券入账并写发放日志 | P0 | 冒烟测试 | 用户U1 满足平台新人资格;平台存在进行中活动且绑定有效券;用户未领取过该活动 | 1. 用户U1 在新人礼弹窗点击立即领取<br>2. 观察页面提示<br>3. 进入我的优惠券查询奖励<br>4. 查询发放日志 | 用户U1;活动ID=NG1001;券ID=PC1001 | 1. 页面提示领取成功<br>2. 我的优惠券列表新增对应优惠券<br>3. `new_gift_send_log` 新增 1 条成功记录,包含用户、活动、活动明细和发送状态<br>4. 该用户再次进入首页时不再展示同一活动弹窗 | 主流程 |
|
||||
| C_NG_SEND_002 | 用户端-首页-新人礼领取 | 验证同一用户重复点击立即领取时只发放一次 | P0 | 回归测试 | 用户U1 满足新人资格;平台存在进行中活动且绑定有效券;抓包或前端可模拟快速重复点击 | 1. 用户U1 打开新人礼弹窗<br>2. 在 1 秒内连续点击 3 次立即领取<br>3. 查询优惠券列表和发放日志 | 用户U1;活动ID=NG1001;重复点击次数=3 | 1. 页面最多显示 1 次领取成功提示<br>2. 用户仅新增 1 张优惠券<br>3. `new_gift_send_log` 仅有 1 条成功记录,其余请求被幂等拦截或返回已领取<br>4. 不出现重复发券 | [AI修正: 对应重复提交和重复支付类历史风险] |
|
||||
| C_NG_SEND_003 | 用户端-首页-新人礼领取 | 验证领取接口超时重试时不会重复发券 | P1 | 回归测试 | 用户U1 满足新人资格;模拟领取接口首个请求响应超时但后端已处理成功 | 1. 用户U1 点击立即领取<br>2. 将首个请求模拟为前端超时<br>3. 用户再次点击立即领取或页面自动重试<br>4. 查询优惠券列表和发放日志 | 首次请求后端处理成功;前端超时 5 秒 | 1. 页面提示处理中或可稍后刷新查看结果<br>2. 最终用户仅获得 1 张优惠券<br>3. 发放日志中仅 1 条成功记录,不存在多条成功发放<br>4. 页面最终状态与后台结果一致 | 非功能 |
|
||||
| C_NG_SEND_004 | 用户端-首页-新人礼领取 | 验证发券失败时记录失败原因且不出现半成功状态 | P1 | 功能测试 | 用户U4 满足新人资格;将发券接口模拟为失败 | 1. 用户U4 点击立即领取<br>2. 观察页面提示<br>3. 查询我的优惠券列表<br>4. 查询发放日志 | 券中心返回=库存不足或券失效 | 1. 页面提示领取失败及失败原因<br>2. 我的优惠券列表不新增该券<br>3. `new_gift_send_log` 记录失败状态和失败原因<br>4. 用户状态不被误标记为已领取 | [AI修正: 覆盖部分成功和异常记录风险] |
|
||||
| C_NG_SEND_005 | 用户端-首页-新人礼领取 | 验证同一账号双端并发领取时最终仅一次成功 | P1 | 功能测试 | 用户U5 满足新人资格;用户在手机端和 H5 端同时登录;平台存在进行中活动 | 1. 手机端和 H5 端同时打开新人礼弹窗<br>2. 两端几乎同时点击立即领取<br>3. 查询两端提示、优惠券列表和发放日志 | 用户U5;双端并发间隔小于 200ms | 1. 最终仅 1 次领取成功<br>2. 另一端返回已领取、处理中或重复请求提示<br>3. 用户优惠券列表仅新增 1 张券<br>4. 发放日志仅保留 1 条成功记录 | 并发 |
|
||||
| C_NG_SEND_006 | 用户端-门店首页-新人礼领取 | 验证用户领取平台新人礼后仍可继续领取门店新人礼 | P0 | 功能测试 | 用户U7 已成功领取平台新人礼;商家A 存在进行中的门店新人礼活动;用户U7 在商家A 维度无非关闭订单且未领取过门店活动 | 1. 用户U7 登录平台首页并确认已领取平台新人礼<br>2. 用户U7 进入商家A 门店首页<br>3. 观察门店弹窗并点击立即领取<br>4. 查询门店发放日志和优惠券列表 | 用户U7;平台活动ID=PLT1001;门店活动ID=SHOP1001 | 1. 门店首页仍展示门店新人礼弹窗<br>2. 用户可成功领取门店优惠券<br>3. 优惠券列表中同时存在平台新人礼券和门店新人礼券<br>4. 门店活动发放日志新增成功记录,不因已领取平台礼而被拦截 | [AI修正: 按产品确认口径补充平台礼与门店礼可并存] |
|
||||
| C_NG_CHECK_001 | 用户端-首页-资格检查 | 验证无进行中活动或活动失效时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在未开始、已结束或已失效活动,但不存在进行中活动;用户U1 满足新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动状态分别为未开始、已结束、已失效 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动<br>3. 页面不出现错误提示或异常闪现弹窗 | 状态流转 |
|
||||
| API_NG_PERF_001 | 用户端-资格检查-接口性能 | 验证资格检查接口在常规数据量下满足 RT 基线 | P2 | 性能测试 | 存在 100 条历史发放记录和 10 条活动数据;性能环境可统计接口耗时 | 1. 触发用户进入平台首页调用资格检查接口<br>2. 连续执行 30 次<br>3. 统计平均 RT 和 P95 | 接口=`/ua/newGift/check`;样本量=30 | 1. 常规场景下接口平均 RT 和 P95 满足 1000ms 基线或接近目标<br>2. 页面无明显卡顿或超时提示<br>3. 若超基线,应能定位是活动查询、资格判定还是日志判断链路耗时 | [AI修正: 技术方案给出 RT 1000ms] |
|
||||
| C_NG_RULE_001 | 用户端-资格判定-新人口径 | 验证存在已支付订单时不再识别为新人 | P1 | 功能测试 | 用户U8 存在 1 笔平台已支付订单;平台存在进行中活动 | 1. 用户U8 登录平台首页<br>2. 观察是否弹出新人礼<br>3. 查询资格检查返回 | 用户U8 历史订单状态=已支付 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面展示与产品确认口径一致,不因已支付历史订单继续认定为新人 | [AI修正: 按产品确认口径更新新人判定] |
|
||||
| C_NG_POP_006 | 用户端-首页-新人礼弹窗 | 验证未登录进入首页时不展示新人礼弹窗 | P0 | 功能测试 | 平台或门店存在进行中的新人礼活动;用户未登录 | 1. 未登录直接进入平台首页<br>2. 未登录直接进入门店首页<br>3. 观察页面弹窗与网络请求 | 访问端=H5/小程序;登录态=未登录 | 1. 平台首页和门店首页均不展示新人礼弹窗<br>2. 页面不进入领取流程<br>3. 若触发资格检查请求,应返回未登录拦截而非可领取结果 | [AI修正: 取自团队现有功能用例] |
|
||||
| C_NG_POP_007 | 用户端-首页-新人礼展示 | 验证首页展示的奖品信息与后台配置一致 | P0 | 功能测试 | 平台和商家端各存在 1 条进行中的新人礼活动,且分别绑定不同门槛和优惠内容的优惠券;用户满足资格 | 1. 平台新人登录平台首页查看弹窗奖品信息<br>2. 店铺新人进入门店首页查看弹窗奖品信息<br>3. 对比后台券配置 | 平台券=满100减20, 用券时间 2026-05-01 至 2026-05-31;店铺券=8折券, 上限 30 元 | 1. 平台首页弹窗展示的平台券门槛、优惠金额或折扣、用券时间与后台配置一致<br>2. 门店首页弹窗展示的商家券信息与商家端配置一致<br>3. 不出现平台券和商家券信息串位 | [AI修正: 取自团队现有功能用例] |
|
||||
| DATA_NG_SCOPE_001 | 平台端-商家端-数据隔离 | 验证平台端与商家端新人礼活动数据不互通 | P0 | 功能测试 | 平台端已配置 1 条平台新人礼活动;商家A 已配置 1 条门店新人礼活动;测试账号分别具备平台端和商家端权限 | 1. 在平台端查看新人礼活动列表<br>2. 在商家A 端查看新人礼活动列表<br>3. 对比两端列表数据 | 平台活动ID=PLT1001;商家活动ID=SHOP1001 | 1. 平台端仅展示平台活动数据,不展示商家活动<br>2. 商家端仅展示当前店铺活动数据,不展示平台活动<br>3. 两端数据查询、查看、编辑入口相互隔离 | [AI修正: 取自团队现有功能用例] |
|
||||
| VIEW_NG_READONLY_001 | 平台端-营销管理-新人有礼查看 | 验证查看态页面所有字段只读不可编辑 | P1 | 功能测试 | 平台已存在 1 条新人礼活动;平台运营账号已登录 | 1. 在列表中点击查看<br>2. 观察活动名称、活动时间、活动奖品等字段状态<br>3. 尝试修改字段或提交 | 活动ID=PLT1001 | 1. 查看页所有字段均为只读态<br>2. 页面不提供可提交修改的入口<br>3. 用户无法通过查看态改写活动配置 | [AI修正: 取自团队现有功能用例] |
|
||||
| PLT_NG_LIST_002 | 平台端-营销管理-新人有礼列表 | 验证列表展示字段和操作栏状态映射正确 | P1 | 功能测试 | 平台端存在未开始、进行中、已结束、已失效四类活动;平台运营账号已登录 | 1. 进入新人有礼列表<br>2. 逐条检查活动名称、活动时间、活动状态、创建时间、操作栏<br>3. 对比不同状态下的操作按钮 | 活动A=未开始;活动B=进行中;活动C=已结束;活动D=已失效 | 1. 列表展示字段完整且内容正确<br>2. 未开始活动展示编辑、失效<br>3. 进行中活动展示查看、失效或按最终规则允许的编辑能力<br>4. 已结束和已失效活动操作栏按需求展示删除或受限操作 | [AI修正: 取自团队现有功能用例] |
|
||||
Binary file not shown.
@@ -0,0 +1,61 @@
|
||||
# 新人礼需求
|
||||
|
||||
> 文档角色:需求文档
|
||||
> 原始来源:`source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
基线-新人礼
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 0.0.1 | 文档创建 | 张昊 | 2026-02-28 |
|
||||
一、业务背景
|
||||
基于问界需求清单 新人礼需求
|
||||
二、业务目标
|
||||
通过发布新人礼活动,吸引新用户注册使用~平台端&商家端支持发布新人礼活动,支持配置优惠券奖品,c端新用户注册展示新人礼内容
|
||||
三、产品设计
|
||||
1. 平台端-营销-新人有礼
|
||||
1.1 新人有礼列表
|
||||
列表数据说明
|
||||
数据权限:有此菜单列表权限的用户可看数据
|
||||
排序规则:按数据新增时间倒序排列
|
||||
分页规则:默认10行每页,可自主选择每页显示的条数(10/20/30/50)
|
||||
数据来源:如下表
|
||||
| 数据字段 | 数据来源 |
|
||||
| 活动名称 | 来源【新增/编辑】表单同名字段 |
|
||||
| 活动时间 | 来源【新增/编辑】表单“活动时间“数据 |
|
||||
| 活动状态 | 见下方状态逻辑说明 |
|
||||
| 活动有效性 | 展示有效/已失效,支持 失效活动,失效后展示 已失效,失效后 操作栏展示删除操作 |
|
||||
| 活动奖品 | 展示活动配置的奖品,当前活动奖品仅支持优惠券 |
|
||||
| 创建时间 | 活动创建时间 |
|
||||
状态逻辑说明
|
||||
| 状态名称 | 状态变更条件 | 可操作按钮 |
|
||||
| 未开始 | 活动时间开始时间>当前时间 | 编辑,失效 |
|
||||
| 进行中 | 活动时间开始时间<=当前时间 | 查看,失效 |
|
||||
| 已结束 | 活动时间结束时间<当前时间 | 删除 |
|
||||
查询条件说明
|
||||
| 查询条件 | 查询逻辑 |
|
||||
| 活动名称 | 模糊查询,查询列表字段“活动名称” |
|
||||
| 活动状态 | 精准查询,单选,选项数据:未开始、进行中、已结束、已失效,默认空 |
|
||||
功能按钮说明
|
||||
| 按钮名称 | 触发后逻辑说明 | |
|
||||
| 新建 | 在当前窗口打开“新建新人礼”弹窗 | |
|
||||
| 查询 | 1、已选查询条件情况下,列表显示符合条件的数据 2、查询条件无匹配数据时,列表显示空,提示”暂无数据“ | |
|
||||
| 重置 | 清空查询条件 | |
|
||||
| 编辑 | 打开编辑表单弹窗 | |
|
||||
| 查看 | 打开查看表单弹窗 | |
|
||||
| 失效 | 打开失效操作弹窗,失效操作后,状态变更为已失效 | |
|
||||
| 删除 | 打开删除操作弹窗,删除操作后,在列表删除活动(永久删除);取消后,关闭删除弹窗。 | |
|
||||
1.2 新增/编辑
|
||||
页面字段说明
|
||||
| 字段名称 | 逻辑规则 | 是否必填 | 是否可编辑 | 原型界面、逻辑补充 |
|
||||
| 活动名称 | 文本输入,最多50个字 | 是 | 是 | |
|
||||
| 活动时间 | 开始时间-结束时间,年月日时分秒 | 是 | 是 | 控制活动的有效时段,可选择的时间大于等于当前时间,结束时间大于开始时间 |
|
||||
| 活动奖品 | 多选 | 是 | 是 | |
|
||||
| | 送优惠券 优惠券: 勾选后展示选择优惠券,只能选择1张优惠券,选择后展示选中优惠券信息表格 选择优惠券弹窗: 通用优惠券选择弹窗,单选 平台端展示平台可用优惠券列表, 商家端展示商家可用的优惠券列表, 优惠券列表数据展示规则:投放,未过期且为 用户领取 的优惠券,支持根据名称筛选 | 是 | 是 | 优惠券列表:选择前 优惠券列表:选择后 选择优惠券弹窗: |
|
||||
| | 送积分 可输入1-999999的整数,配置生效后调用发积分接口发放积分 | 是 | 否 | 暂不支持 |
|
||||
2. 商家端-营销-新人有礼
|
||||
功能同平台端,仅优惠券选择时,仅可选择该店铺下的优惠券
|
||||
3. C端
|
||||
3.1 首页
|
||||
| 平台首页-新人礼领取提示 奖励领取后,可在个人中心优惠券查看 | 店铺首页-新人礼领取提示 |
|
||||
| 功能点 | 功能说明 |
|
||||
| 弹窗逻辑 | 1)用户未在任意门店下过单,即视为新用户,登录后进入首页,弹窗提示用户领取新人礼奖励 2)用户未在该门店下过单,即视为门店新用户,登录后进入门店首页,弹窗提示用户领取新人礼奖励时机3)如果平台或店铺设置了弹窗广告,则新人礼弹窗在弹窗广告之前展示,关闭新人礼弹窗后,展示弹窗广告内容 |
|
||||
| 优惠券 | 用户点击新人礼弹窗立即领取按钮,如果领取成功,奖励进入我的-优惠券列表,并提示用户领取成功 |
|
||||
@@ -0,0 +1,66 @@
|
||||
# 新人礼技术方案
|
||||
|
||||
> 文档角色:技术方案
|
||||
> 原始来源:`source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
基线改造---新人礼技术方案&需求概述
|
||||
| 版本号 | 变更内容 | 变更人 | 变更时间 |
|
||||
| 1.0 | 建档 | 陶震 | 2026-2-21 |
|
||||
1 背景
|
||||
1.1 需求背景
|
||||
新增,针对于新注册,未下单用户发放专属优惠券的场景(暂不支持下单后退款场景)
|
||||
1.2 业务现况
|
||||
1.3. 业务系统现况
|
||||
1.4 名词说明
|
||||
| 名称 | 描述 |
|
||||
| 新人(平台新人,店铺新人) | 平台新人:未在该平台下过单的用户,即shop_custormer中无任何数据的user 店铺新人:未在该店铺下过单的用户,即shop——customer中无该店铺该user数据的用户 |
|
||||
1.7 涉及人员
|
||||
| 角色名称 | 使用内容 |
|
||||
| 用户 | 消费者 |
|
||||
| 运营 | 商城日常使用维护以及操作者。 |
|
||||
2 目标
|
||||
本期实现目标说明:
|
||||
2.1、技术目标
|
||||
| 技术指标 | 指标值 | 备注 |
|
||||
| 用户响应RT | 1000ms | |
|
||||
| 用户体量 | | |
|
||||
| 并发数 | | |
|
||||
| 开发语言 | | |
|
||||
| 网络要求 | | |
|
||||
3 整体概述
|
||||
3.1 需求概述
|
||||
同一时间仅允许一个新人礼活动(避免同一时间多个活动发放业务过重)。关联优惠券仅支持关联一张
|
||||
C端弹窗,若存在进行中的新人礼活动且用户未领取过,则进行弹窗
|
||||
3.2 业务架构图(一图概览)
|
||||
3.3 业务模块列表
|
||||
3.4 第三方服务列表(可选)
|
||||
| 服务厂商 | 类型(接口/设备) | 接口地址 | 备注 | 状态 |
|
||||
3.5 技术架构
|
||||
3.5.1 前端设计
|
||||
3.5.2 后端设计
|
||||
3.6 领域模型设计
|
||||
新人礼主表
|
||||
| SQLCREATE TABLE `new_gift` ( `new_gift_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `shop_id` bigint NOT NULL COMMENT '关联店铺 平台为0', `activity_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动名称', `activity_start_time` datetime NOT NULL COMMENT '活动开始时间', `activity_end_time` datetime NOT NULL COMMENT '活动结束时间', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `activity_status` int NOT NULL COMMENT '活动状态0未开始,1进行中,2已结束', `valid_status` int NOT NULL DEFAULT '0' COMMENT '有效性 0有效 1已失效', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` int NOT NULL DEFAULT '0' COMMENT '是否已删除 0否1是', PRIMARY KEY (`new_gift_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼主表'; |
|
||||
新人礼关联礼物表
|
||||
| SQLCREATE TABLE `new_gift_detail` ( `new_gift_detail_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `gift_type` int NOT NULL COMMENT '礼物类型 0优惠券 其他待拓展', `gift_biz_id` bigint NOT NULL COMMENT '礼物主键Id', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_detail_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼 子表,存储主表与礼物关联关系'; |
|
||||
新人礼发放记录表
|
||||
| SQLCREATE TABLE `new_gift_send_log` ( `new_gift_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint NOT NULL COMMENT '用户ID', `send_status` int NOT NULL COMMENT '发放状态 0成功 1失败', `fail_reason` json DEFAULT NULL COMMENT '失败原因', `new_gift_id` bigint NOT NULL COMMENT '新人礼主键', `new_gift_detail_id` bigint NOT NULL COMMENT '礼物详情主键', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`new_gift_log_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='新人礼发放记录表'; |
|
||||
3.7 数据模型设计
|
||||
详见领域模型
|
||||
3.8 依赖项
|
||||
| 依赖项 | 作用 | 预计提供时间 | 状态 | 责任人 | 交付物 |
|
||||
4 场景(user story)与流程图(How)
|
||||
4.1 新增活动
|
||||
4.1.1 业务流程图
|
||||
4.1.2 时序图
|
||||
4.1.3 接口依赖
|
||||
无
|
||||
4.1.4 接口设计
|
||||
| API | 状态 | 说明 |
|
||||
| /mp/newGift/save | 未开发 | 新增新人礼活动 |
|
||||
| /mp/newGift/update | 未开发 | 修改新人礼活动 |
|
||||
| /mp/newGift/detail | 未开发 | 查看新人礼详情 |
|
||||
| /mp/newGift/delete | 未开发 | 删除新人礼活动 |
|
||||
| /mp/newGift/page | 未开发 | 新人礼活动分页查询 |
|
||||
| /ua/newGift/check | 未开发 | 检测用户是否符合进行中的平台/店铺中的新人礼活动。 |
|
||||
| /ua/newGift/send | 未开发 | 为用户发放对应新人礼绑定的券 |
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"base_name": "新人礼需求",
|
||||
"version": "v9",
|
||||
"snapshot_type": "full_pipeline",
|
||||
"summary": [
|
||||
"manifest",
|
||||
"analysis",
|
||||
"relation_report",
|
||||
"test_points",
|
||||
"test_cases_markdown",
|
||||
"excel",
|
||||
"normalized_inputs"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"requirement": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_source_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/requirements_raw/新人礼需求.docx",
|
||||
"requirement_input_type": "docx",
|
||||
"base_name": "新人礼需求",
|
||||
"normalized_requirement_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/requirement.md",
|
||||
"technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/source_docs/technical_solutions/新人礼技术方案.docx"
|
||||
],
|
||||
"normalized_technical_solution_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/normalized_inputs/新人礼需求/technical_solution_01.md"
|
||||
],
|
||||
"analysis_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_分析.md",
|
||||
"relation_report_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/analysis/新人礼需求_关联与冲突.md",
|
||||
"test_points_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_points/新人礼需求_测试点.md",
|
||||
"test_cases_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/test_cases/新人礼需求_测试用例.md",
|
||||
"excel_output_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports",
|
||||
"project_profile_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/00_project/project_profile.md",
|
||||
"knowledge_base_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/test_case_template.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/definition_of_done.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/review_checklist.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/common_missed_scenes.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/historical_defects.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/02_history/marketing_rules.md",
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/03_best_practices/payment_flow_cases.md"
|
||||
],
|
||||
"effective_terminology_files": [
|
||||
"/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/knowledge_base/01_standards/terminology.md"
|
||||
],
|
||||
"optional_terminology_files": [],
|
||||
"related_requirements": [],
|
||||
"conflict_candidates_count": 0,
|
||||
"current_excel_file": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/excel_reports/新人礼需求_测试用例.xlsx",
|
||||
"versioning_scheme": {
|
||||
"current_files": "固定文件名,始终表示当前最新版",
|
||||
"snapshot_rule": "仅在 export 成功且产物内容发生变化时递增版本",
|
||||
"snapshot_dir_pattern": "output/versions/{BASE_NAME}/vN/"
|
||||
},
|
||||
"latest_snapshot_version": "v8",
|
||||
"latest_snapshot_dir": "/Users/fangyuehui/Desktop/codeAll/qa-team/qa-automation-hub/output/versions/新人礼需求/v8",
|
||||
"latest_snapshot_type": "full_pipeline"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# 新人礼需求 关联需求与冲突检查
|
||||
|
||||
## 目标需求
|
||||
- `source_docs/requirements_raw/新人礼需求.docx`
|
||||
|
||||
## 项目画像
|
||||
- `knowledge_base/00_project/project_profile.md`
|
||||
|
||||
## 关联技术方案
|
||||
- `source_docs/technical_solutions/新人礼技术方案.docx`
|
||||
|
||||
## 关联需求识别
|
||||
- 未识别到相似度达到阈值的历史需求文档。
|
||||
|
||||
## 潜在冲突与修改建议
|
||||
- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。
|
||||
@@ -0,0 +1,111 @@
|
||||
# 新人礼需求分析
|
||||
|
||||
## 背景与目标
|
||||
|
||||
本期需求围绕“新人礼”活动能力建设,目标是在平台端和商家端支持配置新人礼活动,并在 C 端针对符合新人条件的用户展示领取入口与发放优惠券奖励,提升新注册用户的首单转化。
|
||||
|
||||
技术方案补充了两个关键限制:
|
||||
|
||||
- 同一时间仅允许存在 1 个进行中的新人礼活动。
|
||||
- 每个新人礼活动仅允许绑定 1 张优惠券,发放结果需落新人礼发放记录表。
|
||||
|
||||
## 范围与边界
|
||||
|
||||
### 范围内
|
||||
|
||||
- 平台端“营销-新人有礼”列表、查询、新建、编辑、查看、失效、删除。
|
||||
- 商家端“营销-新人有礼”同构能力。
|
||||
- 新人礼活动配置字段校验:活动名称、活动时间、活动奖品、优惠券选择。
|
||||
- 优惠券选择范围控制:平台端仅选平台券,商家端仅选本店铺优惠券。
|
||||
- C 端首页和门店首页的新人礼弹窗检查与领取。
|
||||
- 发放成功后的优惠券入账和发放记录落库。
|
||||
- `ua/newGift/check` 与 `ua/newGift/send` 对应的资格校验和发放行为。
|
||||
|
||||
### 范围外
|
||||
|
||||
- 积分类型新人礼,需求和技术方案均明确“暂不支持”。
|
||||
- 下单后退款再重新认定为新人场景,技术方案明确“暂不支持下单后退款场景”。
|
||||
- 多奖品、多券组合、多人拼抢同一活动池等扩展玩法。
|
||||
|
||||
## 用户角色与前置条件
|
||||
|
||||
- 平台运营:维护平台维度新人礼活动。
|
||||
- 商家运营:维护店铺维度新人礼活动。
|
||||
- C 端用户:登录后触发首页或门店首页新人礼检查与领取。
|
||||
- 后端系统:负责活动状态判断、资格校验、优惠券发放、发送日志写入。
|
||||
|
||||
前置条件:
|
||||
|
||||
- 已存在投放中、未过期、领取方式为“用户领取”的优惠券。
|
||||
- 用户已登录,且能获取平台维度与店铺维度的历史下单信息。
|
||||
- 发券接口可用,优惠券中心返回的券状态准确。
|
||||
|
||||
## 关键业务规则
|
||||
|
||||
1. 平台端和商家端都可以配置新人礼活动,但优惠券范围必须与端侧归属一致。
|
||||
2. 活动名称最多 50 个字。
|
||||
3. 活动开始时间必须大于等于当前时间,结束时间必须大于开始时间。
|
||||
4. 活动奖品当前仅支持优惠券,且每个活动仅能关联 1 张优惠券。
|
||||
5. 平台维度同一时间仅允许 1 个进行中的平台新人礼活动;店铺维度同一时间每个店铺仅允许 1 个进行中的门店新人礼活动。
|
||||
6. 新人判定按订单提交结果范围判断:平台新人礼查询平台范围订单,店铺新人礼查询当前店铺订单;若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单等),仍视为新人。
|
||||
7. 用户登录首页时,若存在进行中的新人礼活动且用户未领取过,则展示新人礼弹窗。
|
||||
8. 门店首页只对门店新人展示门店新人礼弹窗。
|
||||
9. 若同时存在弹窗广告,新人礼弹窗必须先于广告弹窗展示。
|
||||
10. 用户点击立即领取成功后,奖励进入“我的优惠券”,同时写入新人礼发放记录。
|
||||
11. 活动“已结束”和“已失效”并存时,页面优先展示“已失效”。
|
||||
12. 活动失效后状态展示为“已失效”,并支持后续删除。
|
||||
13. 用户领取平台新人礼后,若仍满足门店新人条件,允许继续领取门店新人礼。
|
||||
|
||||
## 主流程描述
|
||||
|
||||
1. 运营在平台端或商家端进入“营销-新人有礼”列表页。
|
||||
2. 运营新建活动,填写活动名称、活动时间并选择 1 张符合条件的优惠券。
|
||||
3. 系统校验时间、优惠券范围、优惠券状态和活动并存规则,保存活动。
|
||||
4. 活动进入“未开始”或“进行中”状态,列表页按状态展示可操作按钮。
|
||||
5. C 端用户登录平台首页或门店首页时,调用资格检查接口。
|
||||
6. 若存在进行中的匹配活动且用户符合新人条件且未领取过,则展示新人礼弹窗。
|
||||
7. 用户点击“立即领取”,系统发放优惠券并记录发放日志。
|
||||
8. 发放成功后,用户可在个人中心优惠券列表查看奖励。
|
||||
|
||||
## 跨需求关联与冲突修订建议
|
||||
|
||||
- 当前未识别到需要纳入本次评审的关联需求,也未发现需要基于历史需求执行的规则冲突修订。
|
||||
- 当前无需对历史需求做口径覆盖修订,但仍需重点防御营销类公共风险:
|
||||
- 重复点击导致重复发放。
|
||||
- 前端传参篡改导致越权选券或跨店铺发券。
|
||||
- 状态变更与页面展示不一致。
|
||||
|
||||
## 技术方案补充约束
|
||||
|
||||
- `ua/newGift/check` 负责资格检查,应重点验证平台维度和店铺维度“新人”判定口径。
|
||||
- `ua/newGift/send` 负责发券,应重点验证幂等、防重复领取、失败原因记录和成功落库。
|
||||
- 数据模型拆分为主表、礼物关联表、发放记录表,说明测试不能只看页面成功提示,还要覆盖:
|
||||
- `new_gift` 主表活动状态和有效性字段。
|
||||
- `new_gift_detail` 活动与券的绑定关系。
|
||||
- `new_gift_send_log` 发放成功或失败记录。
|
||||
- 技术目标给出用户响应 RT 1000ms,应至少对资格检查和领取动作补充性能基线关注。
|
||||
|
||||
## 产品确认口径
|
||||
|
||||
- 活动并存范围:平台维度同一时间仅允许 1 条进行中的平台活动;店铺维度同一时间每个店铺仅允许 1 条进行中的门店活动。
|
||||
- 新人判定口径:若用户从未提交过订单,或历史订单最终状态均为交易关闭(包括未支付取消、超时未付、已退款订单),仍视为新人。
|
||||
- 状态展示优先级:活动“已结束”和“已失效”并存时,优先展示“已失效”。
|
||||
- 平台礼与门店礼关系:用户已领取平台新人礼后,只要满足门店新人条件,仍允许领取门店新人礼。
|
||||
|
||||
## 项目差异化测试约束
|
||||
|
||||
- 平台端、商家端、C 端是三套角色链路,必须覆盖角色隔离和数据隔离。
|
||||
- 这是典型营销发券能力,需重点覆盖越权选券、重复发放、状态错发和资损场景。
|
||||
- 预期结果必须同时覆盖 UI 反馈和后台状态变化,特别是活动状态、券领取结果、发放日志。
|
||||
|
||||
## 风险点与确认结果
|
||||
|
||||
- 风险点:重复点击“立即领取”或接口重试导致同一用户重复发放优惠券。
|
||||
- 风险点:商家端错误选择了其他店铺的优惠券,导致跨店资损或越权发券。
|
||||
- 风险点:活动失效、已结束、已删除三个状态口径不清,可能导致列表按钮和实际行为不一致。
|
||||
- 风险点:平台新人和店铺新人的判定依赖历史订单数据,若口径不清,容易误发或漏发。
|
||||
- 风险点:同一时间仅允许 1 个进行中的活动,如果平台端和商家端同时配置活动,范围口径不清会导致规则冲突。
|
||||
- 确认结果:平台端和商家端活动可以并存,但约束粒度为“平台一条、每店铺各一条”。
|
||||
- 确认结果:未支付取消、超时未付、已退款等最终交易关闭单据不影响新人资格。
|
||||
- 确认结果:活动“已结束”和“已失效”同时成立时,页面优先展示“已失效”。
|
||||
- 确认结果:已领取平台新人礼的用户,若满足门店新人条件,仍允许继续领取门店新人礼。
|
||||
@@ -0,0 +1,80 @@
|
||||
# 新人礼需求测试点
|
||||
|
||||
## 1. 平台端列表与状态管理
|
||||
|
||||
1. 校验平台端列表默认按创建时间倒序展示,分页默认 10 条,支持切换 10、20、30、50 条。[需求]
|
||||
2. 校验按活动名称模糊查询、按活动状态精准查询、无结果空态提示、重置查询条件的行为正确。[需求]
|
||||
3. 校验活动状态“未开始、进行中、已结束、已失效”的展示口径和操作按钮是否符合规则。[需求]
|
||||
4. 校验活动失效后有效性展示为“已失效”,且操作栏切换为删除入口。[需求]
|
||||
5. 校验删除为永久删除,删除后列表不可见,后台数据状态与页面一致。[需求][项目画像]
|
||||
6. 校验列表展示字段、创建时间、活动状态、操作栏内容与需求一致。[需求]
|
||||
7. 校验不同状态下操作栏按钮映射正确,未开始/进行中/已结束/已失效的按钮展示不串位。[需求]
|
||||
8. 校验点击“新建”可正常打开新人礼配置弹窗或页面,交互入口与权限口径一致。[需求]
|
||||
|
||||
## 2. 活动配置与规则校验
|
||||
|
||||
1. 校验活动名称最大 50 字,超长时前端与后端均能拦截。[需求][漏测清单]
|
||||
2. 校验活动开始时间小于当前时间、结束时间小于开始时间时不可保存。[需求][边界]
|
||||
3. 校验活动奖品当前仅支持优惠券,积分奖励入口不可用或被明确拦截。[需求][技术方案]
|
||||
4. 校验每个活动仅能关联 1 张优惠券,无法多选、多绑或通过接口绕过限制。[技术方案][项目画像]
|
||||
5. 校验平台端新建合法活动时保存成功,列表、详情和活动明细数据落库正确。[需求]
|
||||
6. 校验平台端编辑未开始活动时可修改名称、时间、奖品等字段并保存成功。[需求]
|
||||
7. 校验平台维度同一时间仅允许 1 个进行中的平台新人礼活动,新增或编辑命中并存条件时保存失败并给出明确提示。[技术方案]
|
||||
8. 校验同一店铺维度同一时间仅允许 1 个进行中的门店新人礼活动,不同店铺活动可并存。[技术方案]
|
||||
9. 校验失效、删除操作存在二次确认,确认结果与列表及后台状态保持一致。[需求]
|
||||
10. 校验编辑活动时,已开始活动是否只允许查看不允许修改关键字段,状态与按钮保持一致。[需求]
|
||||
|
||||
## 3. 优惠券选择与权限隔离
|
||||
|
||||
1. 校验平台端仅能选择平台可用优惠券,且仅展示投放中、未过期、领取方式为用户领取的券。[需求]
|
||||
2. 校验商家端仅能选择本店铺可用优惠券,不能看到或绑定其他店铺优惠券。[需求][项目画像]
|
||||
3. 校验优惠券选择弹窗支持刷新、名称搜索、列表字段展示、分页、排序、单选反馈,且平台端与商家端展示的数据源范围不同。[需求][漏测清单]
|
||||
4. 校验通过抓包篡改券 ID、店铺 ID 或活动归属时,后端能拦截越权绑定。[历史缺陷][项目画像]
|
||||
|
||||
## 4. 商家端差异化行为
|
||||
|
||||
1. 校验商家端列表默认排序、分页、名称搜索、状态筛选、重置、空结果提示与平台端同构,但数据仅限当前店铺可见。[需求][项目画像]
|
||||
2. 校验商家端列表展示字段、操作栏按钮、不同状态下的权限映射正确。[需求]
|
||||
3. 校验商家端新建活动时,跨店铺数据隔离正确,门店 A 无法操作门店 B 活动。[项目画像]
|
||||
4. 校验商家端新建合法活动时保存成功,列表、详情和活动明细数据正确落库。[需求]
|
||||
5. 校验商家端编辑未开始活动时可正常保存,查看态页面所有字段只读,编辑态与查看态权限边界正确。[需求]
|
||||
6. 校验商家端活动失效、删除后,仅影响当前店铺,不影响平台端和其他店铺活动。[需求]
|
||||
7. 校验平台端活动数据在商家端不可见,商家端活动数据在平台端不可见。[需求][项目画像]
|
||||
|
||||
## 5. C 端资格检查与弹窗展示
|
||||
|
||||
1. 校验平台新人登录平台首页时,存在进行中平台新人礼活动则展示弹窗。[需求]
|
||||
2. 校验平台范围存在已支付或非交易关闭订单时,不展示平台新人礼弹窗。[需求][边界]
|
||||
3. 校验店铺新人进入门店首页时,存在进行中门店新人礼活动则展示门店弹窗。[需求]
|
||||
4. 校验当前店铺范围存在已支付或非交易关闭订单时,不展示门店新人礼弹窗。[需求][边界]
|
||||
5. 校验门店老用户进入门店首页时,不展示门店新人礼弹窗。[需求]
|
||||
6. 校验同时存在广告弹窗时,新人礼弹窗优先展示,关闭新人礼后再展示广告。[需求]
|
||||
7. 校验活动未开始时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
8. 校验活动已结束时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
9. 校验活动已失效时,资格检查结果和页面展示均不展示新人礼弹窗。[需求][状态流转]
|
||||
10. 校验用户历史订单均为交易关闭(未支付取消、超时未付、已退款)时,仍识别为新人并展示弹窗。[需求][产品确认]
|
||||
11. 校验未登录进入平台首页或门店首页时,不展示新人礼弹窗且不误触发领取流程。[需求][边界]
|
||||
12. 校验平台首页和门店首页展示的奖品信息与后台配置的优惠券信息一致,包括门槛、优惠金额、用券时间等。[需求]
|
||||
|
||||
## 6. 领取发放与日志落库
|
||||
|
||||
1. 校验点击“立即领取”成功后,页面提示成功,优惠券进入“我的优惠券”。[需求]
|
||||
2. 校验领取成功后,`new_gift_send_log` 写入成功记录,记录用户、活动、活动明细和状态。[技术方案]
|
||||
3. 校验同一用户重复点击“立即领取”或短时间重复调用发放接口时,只发放 1 次,日志不出现重复成功记录。[历史缺陷][项目画像]
|
||||
4. 校验领取失败时,页面提示失败原因,发放日志记录失败原因,不出现半成功状态。[技术方案][项目画像]
|
||||
5. 校验用户已领取过奖励后,再次进入首页不再弹出同一活动弹窗。[需求]
|
||||
6. 校验用户已领取平台新人礼后,若满足门店新人条件,仍可在门店首页领取门店新人礼。[需求][产品确认]
|
||||
|
||||
## 7. 异常、并发与非功能
|
||||
|
||||
1. 校验弱网、超时或接口重试场景下,资格检查接口不会错误多次弹窗或误判资格。[漏测清单][非功能]
|
||||
2. 校验领取接口超时或前端重复提交时,不会重复发券,用户可通过优惠券列表或重新进入页面查看最终结果。[漏测清单][非功能]
|
||||
3. 校验同一账号在两个终端同时领取新人礼时,最终仅 1 次成功发放。[项目画像][并发]
|
||||
4. 校验资格检查和领取接口响应时间满足技术目标 RT 1000ms,至少在常规测试数据量下不明显超时。[技术方案][非功能]
|
||||
|
||||
## 8. 产品确认口径回归
|
||||
|
||||
1. 校验平台活动与门店活动可同时存在,但平台维度仅允许 1 条进行中活动、每个店铺维度仅允许 1 条进行中活动。[产品确认]
|
||||
2. 校验历史订单均为交易关闭时仍视为新人;存在已支付或非关闭订单时不视为新人。[产品确认]
|
||||
3. 校验活动“已结束”和“已失效”同时成立时,列表优先展示“已失效”。[产品确认]
|
||||
4. 校验用户领取平台新人礼后,仍可继续领取符合条件的门店新人礼。[产品确认]
|
||||
@@ -0,0 +1,47 @@
|
||||
# 新人礼需求测试用例
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| PLT_NG_LIST_001 | 平台端-营销管理-新人有礼列表 | 验证平台端列表默认排序、分页和查询功能正确 | P1 | 功能测试 | 平台端已存在 12 条新人礼活动数据,覆盖未开始、进行中、已结束、已失效状态;测试账号具备列表权限 | 1. 登录平台端进入营销-新人有礼列表<br>2. 观察默认排序和分页条数<br>3. 输入活动名称关键字执行查询<br>4. 选择活动状态执行筛选<br>5. 输入无匹配关键字执行查询<br>6. 点击重置 | 活动A 创建时间晚于活动B;查询关键字=新人;状态=进行中;无匹配关键字=不存在的活动名 | 1. 列表默认按创建时间倒序展示<br>2. 默认每页展示 10 条<br>3. 名称查询仅返回命中活动<br>4. 状态筛选仅返回对应状态活动<br>5. 无匹配数据时列表展示空态或“暂无数据”提示<br>6. 点击重置后查询条件被清空,列表恢复默认结果 | [AI修正: 对标团队用例补充空结果查询场景] |
|
||||
| PLT_NG_CFG_001 | 平台端-营销管理-新人有礼配置 | 验证活动时间非法时无法保存活动 | P1 | 功能测试 | 平台运营账号已登录;存在可选平台优惠券 | 1. 点击新建活动<br>2. 输入合法活动名称<br>3. 设置开始时间早于当前时间后尝试保存<br>4. 再设置结束时间早于开始时间后尝试保存 | 活动名称=平台新人礼A;开始时间=当前时间前 1 分钟;结束时间=开始时间前 1 秒 | 1. 页面对开始时间非法给出明确提示<br>2. 页面对结束时间非法给出明确提示<br>3. 活动保存失败<br>4. 后台 `new_gift` 主表不新增活动记录 | 边界值 |
|
||||
| PLT_NG_CFG_002 | 平台端-营销管理-新人有礼配置 | 验证平台端只能绑定 1 张符合条件的平台优惠券 | P0 | 功能测试 | 平台运营账号已登录;平台下存在 3 张券,分别为投放中可领券、已过期券、非用户领取券 | 1. 点击新建活动<br>2. 打开选择优惠券弹窗<br>3. 观察券列表范围<br>4. 选择 1 张投放中可领券后尝试继续追加选择第 2 张券<br>5. 保存活动 | 券A=投放中未过期用户领取券;券B=已过期券;券C=系统发放券 | 1. 弹窗仅展示平台可用且投放中、未过期、用户领取的券<br>2. 已过期券和非用户领取券不展示或不可选<br>3. 页面仅允许单选 1 张券<br>4. 保存成功后 `new_gift_detail` 仅存在 1 条券绑定记录 | [AI修正: 技术方案限定单券绑定] |
|
||||
| PLT_NG_CFG_003 | 平台端-营销管理-新人有礼配置 | 验证积分奖励当前不支持 | P1 | 功能测试 | 平台运营账号已登录 | 1. 点击新建活动<br>2. 进入活动奖品区域<br>3. 查看送积分配置入口<br>4. 若可通过前端或抓包提交积分类型则尝试保存 | gift_type=积分;积分值=100 | 1. 页面不允许启用积分奖品,或该入口展示为暂不支持<br>2. 若前端被绕过提交积分类型,后端拦截保存并返回错误提示<br>3. 后台不生成积分类型活动记录 | [AI修正: 范围外能力拦截] |
|
||||
| PLT_NG_CREATE_001 | 平台端-营销管理-新人有礼配置 | 验证平台端新建合法活动可保存成功 | P0 | 功能测试 | 平台运营账号已登录;存在 1 张投放中、未过期、用户领取类型的平台优惠券;当前无冲突中的平台活动 | 1. 点击新建活动<br>2. 填写活动名称、时间并选择 1 张合法平台券<br>3. 点击确定保存<br>4. 返回列表并进入详情页核对数据 | 活动名称=平台新人礼春季活动;开始时间=明天 10:00;结束时间=后天 10:00;券ID=PLT_COUPON_1001 | 1. 页面提示创建成功<br>2. 列表新增该活动记录,字段展示正确<br>3. 活动状态按时间口径展示为未开始<br>4. `new_gift` 和 `new_gift_detail` 新增对应活动及券绑定记录 | [AI修正: 对标团队用例补充后台正向新建链路] |
|
||||
| PLT_NG_EDIT_001 | 平台端-营销管理-新人有礼编辑 | 验证平台端编辑未开始活动可保存成功 | P1 | 功能测试 | 平台已存在 1 条未开始活动;平台运营账号已登录;存在 1 张新的合法平台优惠券 | 1. 在列表中点击编辑未开始活动<br>2. 修改活动名称、时间或绑定券<br>3. 点击确定保存<br>4. 刷新列表并进入详情查看 | 原活动名称=平台新人礼A;新活动名称=平台新人礼A-调整版;新券ID=PLT_COUPON_1002 | 1. 页面提示保存成功<br>2. 列表展示为修改后的名称和时间<br>3. 详情页展示最新配置<br>4. 后台活动主表和明细表更新为最新值,不产生重复活动记录 | [AI修正: 对标团队用例补充后台正向编辑链路] |
|
||||
| PLT_NG_POPUP_001 | 平台端-营销管理-优惠券选择弹窗 | 验证平台端选券弹窗支持搜索分页排序和单选反馈 | P1 | 功能测试 | 平台运营账号已登录;平台下存在 25 张符合或不符合条件的优惠券 | 1. 进入新建活动页面并打开优惠券选择弹窗<br>2. 点击刷新并观察列表加载<br>3. 输入优惠券名称执行搜索<br>4. 切换分页条数和页码<br>5. 观察列表排序和字段展示<br>6. 选择 1 张优惠券并确认返回 | 券名称关键字=新人礼;分页项=10/20;目标券=PLT_COUPON_1003 | 1. 弹窗可正常刷新数据<br>2. 名称搜索仅返回命中券<br>3. 分页、页码切换和排序行为正确<br>4. 列表展示券名称、有效期、领取方式等必要字段<br>5. 仅允许单选 1 张券,选中后页面回填正确的券信息 | [AI修正: 对标团队用例补充选券弹窗交互明细] |
|
||||
| PLT_NG_RULE_001 | 平台端-营销管理-新人有礼配置 | 验证平台维度同一时间仅允许一个进行中的新人礼活动 | P0 | 功能测试 | 已存在 1 条平台活动A,时间范围覆盖当前时刻且状态为进行中;平台运营账号已登录 | 1. 点击新建活动<br>2. 填写与活动A 时间重叠的新活动B信息<br>3. 选择合法平台优惠券并保存 | 活动A 时间=今天 10:00 到 明天 10:00;活动B 时间=今天 12:00 到 明天 12:00 | 1. 页面或接口提示当前已有进行中的平台新人礼活动<br>2. 活动B 保存失败<br>3. 后台不新增活动B 记录<br>4. 活动A 状态和绑定关系不受影响 | [AI修正: 按产品确认口径更新为平台维度唯一] |
|
||||
| PLT_NG_STATE_001 | 平台端-营销管理-新人有礼状态 | 验证活动失效后展示已失效并支持删除 | P1 | 功能测试 | 平台已存在 1 条未开始活动和 1 条进行中活动;平台运营账号已登录 | 1. 在列表中对活动执行失效操作<br>2. 刷新列表查看状态和操作按钮<br>3. 对已失效活动执行删除操作<br>4. 再次刷新列表 | 活动A=未开始;活动B=进行中 | 1. 失效后活动有效性展示为已失效<br>2. 失效活动的操作按钮切换为删除<br>3. 删除确认后页面提示删除成功<br>4. 列表中不再显示该活动<br>5. 后台活动记录被标记删除或按实现永久删除,不可继续被资格检查命中 | 状态流转 |
|
||||
| PLT_NG_STATE_002 | 平台端-营销管理-新人有礼状态 | 验证活动已结束且已失效时列表优先展示已失效 | P1 | 功能测试 | 平台存在 1 条活动,活动结束时间早于当前时间,且已执行失效操作;平台运营账号已登录 | 1. 进入平台端新人有礼列表<br>2. 查询该活动状态展示和操作按钮 | 活动A 结束时间=当前时间前 1 天;valid_status=已失效 | 1. 列表最终状态优先展示为已失效<br>2. 操作按钮按已失效口径展示删除,不按已结束展示<br>3. 页面状态展示与后台有效性字段一致 | [AI修正: 按产品确认口径补充状态优先级] |
|
||||
| MCH_NG_SCOPE_001 | 商家端-营销管理-新人有礼配置 | 验证商家端只能选择本店铺优惠券 | P0 | 功能测试 | 商家A 账号已登录;商家A 券A 为可领券;商家B 券B 为可领券 | 1. 商家A 进入新建活动页面<br>2. 打开优惠券选择弹窗<br>3. 搜索本店券A 和外店券B<br>4. 选择券A 保存活动 | 商家A ID=1001;商家B ID=1002;券A 属于商家A;券B 属于商家B | 1. 列表仅展示商家A 可用券<br>2. 搜索券B 无结果或不可选<br>3. 保存成功后活动绑定的券归属为商家A<br>4. 后台不存在跨店绑定关系 | [AI修正: 覆盖数据隔离与越权风险] |
|
||||
| MCH_NG_SCOPE_002 | 商家端-营销管理-新人有礼配置 | 验证篡改券 ID 无法越权绑定其他店铺优惠券 | P0 | 安全性测试 | 商家A 账号已登录;抓包工具可修改请求;商家B 存在 1 张有效券 | 1. 商家A 正常进入新建活动页面并选择商家A 自有券<br>2. 提交前抓包将券 ID 替换为商家B 券 ID<br>3. 提交保存请求 | 提交参数原券 ID=COUPON_A_01;篡改后券 ID=COUPON_B_01 | 1. 后端拦截越权绑定请求并返回错误提示<br>2. 页面保存失败<br>3. 后台不生成跨店活动与券绑定关系<br>4. 审计日志记录异常请求或失败原因 | [AI修正: 对应越权与价格篡改类历史风险] |
|
||||
| MCH_NG_RULE_001 | 商家端-营销管理-新人有礼配置 | 验证同一店铺仅允许一个进行中的门店新人礼活动但不同店铺可并存 | P0 | 功能测试 | 商家A 已存在 1 条进行中的门店活动A;商家B 无进行中活动;商家A、商家B 账号均可登录 | 1. 商家A 新建与活动A 时间重叠的门店活动A2并保存<br>2. 商家B 新建与活动A 同时段重叠的门店活动B并保存<br>3. 查询两家店铺活动列表 | 商家A ID=1001;商家B ID=1002;活动A2 与活动A 时间重叠;活动B 与活动A 时间重叠 | 1. 商家A 保存活动A2失败,并提示当前店铺已有进行中的新人礼活动<br>2. 商家B 保存活动B成功<br>3. 后台显示门店活动限制按店铺维度生效,不会因商家A 活动阻塞商家B 配置 | [AI修正: 按产品确认口径补充店铺维度唯一] |
|
||||
| MCH_NG_LIST_001 | 商家端-营销管理-新人有礼列表 | 验证商家端列表默认排序、分页、搜索和重置功能正确 | P1 | 功能测试 | 商家A 已存在 12 条新人礼活动数据,覆盖未开始、进行中、已结束、已失效状态;商家运营账号具备列表权限 | 1. 登录商家A 端进入新人有礼列表<br>2. 观察默认排序和分页条数<br>3. 输入活动名称关键字执行查询<br>4. 选择活动状态执行筛选<br>5. 输入无匹配关键字执行查询<br>6. 点击重置 | 店铺ID=1001;关键字=新人;状态=进行中;无匹配关键字=不存在的活动名 | 1. 列表默认按创建时间倒序展示<br>2. 默认每页展示 10 条并可切换分页项<br>3. 名称搜索和状态筛选仅返回当前店铺命中数据<br>4. 无匹配数据时展示空态或“暂无数据”提示<br>5. 点击重置后恢复默认列表 | [AI修正: 对标团队用例补充商家端列表基础能力] |
|
||||
| MCH_NG_LIST_002 | 商家端-营销管理-新人有礼列表 | 验证商家端列表字段和操作栏状态映射正确 | P1 | 功能测试 | 商家A 存在未开始、进行中、已结束、已失效四类活动;商家运营账号已登录 | 1. 进入商家A 新人有礼列表<br>2. 逐条检查活动名称、活动时间、活动状态、创建时间、操作栏<br>3. 对比不同状态下的操作按钮 | 活动A=未开始;活动B=进行中;活动C=已结束;活动D=已失效 | 1. 列表展示字段完整且内容正确<br>2. 未开始活动展示编辑、失效<br>3. 进行中活动展示查看、失效或按最终规则允许的编辑能力<br>4. 已结束和已失效活动展示删除或受限操作<br>5. 状态与按钮映射不串位 | [AI修正: 对标团队用例补充商家端状态按钮映射] |
|
||||
| MCH_NG_CREATE_001 | 商家端-营销管理-新人有礼配置 | 验证商家端新建合法活动可保存成功 | P0 | 功能测试 | 商家A 账号已登录;商家A 存在 1 张投放中、未过期、用户领取类型的店铺优惠券;当前店铺无冲突中的门店活动 | 1. 点击新建活动<br>2. 填写活动名称、时间并选择 1 张本店合法券<br>3. 点击确定保存<br>4. 返回列表并进入详情页核对数据 | 店铺ID=1001;活动名称=门店新人礼春季活动;券ID=SHOP_COUPON_1001 | 1. 页面提示创建成功<br>2. 列表新增该门店活动记录,字段展示正确<br>3. 活动状态按时间口径展示为未开始<br>4. `new_gift` 和 `new_gift_detail` 新增当前店铺对应活动及券绑定记录 | [AI修正: 对标团队用例补充商家端正向新建链路] |
|
||||
| MCH_NG_EDIT_001 | 商家端-营销管理-新人有礼编辑 | 验证商家端编辑未开始活动可保存成功 | P1 | 功能测试 | 商家A 存在 1 条未开始活动;商家A 账号已登录;存在 1 张新的本店合法券 | 1. 在列表中点击编辑未开始活动<br>2. 修改活动名称、时间或绑定券<br>3. 点击确定保存<br>4. 刷新列表并进入详情页核对 | 原活动名称=门店新人礼A;新活动名称=门店新人礼A-调整版;新券ID=SHOP_COUPON_1002 | 1. 页面提示保存成功<br>2. 列表和详情页展示最新配置<br>3. 后台活动主表和明细表更新为最新值<br>4. 不产生重复活动记录或跨店异常数据 | [AI修正: 对标团队用例补充商家端正向编辑链路] |
|
||||
| MCH_NG_POPUP_001 | 商家端-营销管理-优惠券选择弹窗 | 验证商家端选券弹窗支持搜索分页排序和单选反馈 | P1 | 功能测试 | 商家A 账号已登录;商家A 下存在 25 张符合或不符合条件的优惠券 | 1. 进入新建活动页面并打开优惠券选择弹窗<br>2. 点击刷新并观察列表加载<br>3. 输入优惠券名称执行搜索<br>4. 切换分页条数和页码<br>5. 观察列表排序和字段展示<br>6. 选择 1 张优惠券并确认返回 | 店铺ID=1001;券名称关键字=新人礼;分页项=10/20;目标券=SHOP_COUPON_1003 | 1. 弹窗可正常刷新数据<br>2. 搜索仅返回当前店铺命中的券<br>3. 分页、页码切换和排序行为正确<br>4. 列表展示券名称、有效期、领取方式等必要字段<br>5. 仅允许单选 1 张券,确认后页面正确回填券信息 | [AI修正: 对标团队用例补充商家端选券弹窗交互明细] |
|
||||
| MCH_NG_STATE_001 | 商家端-营销管理-新人有礼状态 | 验证商家端活动失效后展示已失效并支持删除 | P1 | 功能测试 | 商家A 已存在 1 条未开始活动和 1 条进行中活动;商家A 账号已登录 | 1. 在列表中对活动执行失效操作并确认<br>2. 刷新列表查看状态和操作按钮<br>3. 对已失效活动执行删除并确认<br>4. 再次刷新列表 | 店铺ID=1001;活动A=未开始;活动B=进行中 | 1. 失效后活动有效性展示为已失效<br>2. 已失效活动操作栏切换为删除<br>3. 删除确认后页面提示删除成功<br>4. 列表中不再显示该活动<br>5. 后台仅删除当前店铺对应活动,不影响其他店铺或平台活动 | [AI修正: 对标团队用例补充商家端失效删除链路] |
|
||||
| MCH_NG_VIEW_001 | 商家端-营销管理-新人有礼查看 | 验证商家端查看态页面所有字段只读不可编辑 | P1 | 功能测试 | 商家A 已存在 1 条新人礼活动;商家A 账号已登录 | 1. 在列表中点击查看<br>2. 观察活动名称、活动时间、活动奖品等字段状态<br>3. 尝试修改字段或提交 | 店铺ID=1001;活动ID=SHOP1001 | 1. 查看页所有字段均为只读态<br>2. 页面不提供可提交修改的入口<br>3. 用户无法通过查看态改写活动配置 | [AI修正: 对标团队用例补充商家端查看只读场景] |
|
||||
| C_NG_POP_001 | 用户端-首页-新人礼弹窗 | 验证平台新人登录平台首页时展示新人礼弹窗 | P0 | 冒烟测试 | 平台存在 1 条进行中的平台新人礼活动;用户U1 已注册登录且平台维度无下单记录;用户未领取过该活动 | 1. 用户U1 登录平台首页<br>2. 观察首页首屏弹窗 | 用户U1;平台活动=进行中;平台下单记录=0 | 1. 首页展示新人礼弹窗<br>2. 弹窗内容展示活动奖励信息和立即领取按钮<br>3. 后台资格检查接口返回命中活动和可领取状态 | 主流程 |
|
||||
| C_NG_POP_002 | 用户端-首页-新人礼弹窗 | 验证非平台新人登录平台首页时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U2 已注册登录且平台维度存在已下单记录 | 1. 用户U2 登录平台首页<br>2. 观察首页弹窗和资格检查结果 | 用户U2;平台已支付订单数=1 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面不出现立即领取入口 | 边界值 |
|
||||
| C_NG_POP_003 | 用户端-门店首页-新人礼弹窗 | 验证平台老用户但门店新用户进入门店首页时展示门店新人礼弹窗 | P0 | 功能测试 | 商家A 存在 1 条进行中的门店新人礼活动;用户U3 平台维度已有下单记录,但在商家A 维度无下单记录;用户未领取过商家A 活动 | 1. 用户U3 进入商家A 门店首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U3;平台订单数=1;商家A 订单数=0 | 1. 门店首页展示商家A 新人礼弹窗<br>2. 资格检查接口按门店维度返回可领取<br>3. 弹窗奖励信息与商家A 活动配置一致 | [AI修正: 覆盖平台新人和店铺新人差异口径] |
|
||||
| C_NG_POP_004 | 用户端-首页-弹窗优先级 | 验证存在广告弹窗时新人礼弹窗优先展示 | P1 | 功能测试 | 平台存在 1 条进行中的新人礼活动;首页同时配置普通广告弹窗;用户U1 满足平台新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首个弹窗<br>3. 关闭新人礼弹窗后继续观察 | 用户U1;广告弹窗=已配置 | 1. 首个弹窗为新人礼弹窗<br>2. 关闭新人礼弹窗后再展示广告弹窗<br>3. 整个过程中弹窗顺序与需求一致 | 交互优先级 |
|
||||
| C_NG_POP_005 | 用户端-首页-新人礼弹窗 | 验证历史订单均为交易关闭时仍识别为平台新人 | P0 | 功能测试 | 平台存在 1 条进行中的平台新人礼活动;用户U6 历史仅有未支付取消单、超时未付单或已退款订单,且无其他非关闭订单 | 1. 用户U6 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查结果 | 用户U6 历史订单状态=交易关闭、已退款、超时未付 | 1. 首页展示平台新人礼弹窗<br>2. 资格检查接口返回满足平台新人条件<br>3. 页面不因历史关闭单或已退款单而拦截新人资格 | [AI修正: 按产品确认口径补充交易关闭单仍算新人] |
|
||||
| C_NG_POP_006 | 用户端-首页-新人礼弹窗 | 验证未登录进入首页时不展示新人礼弹窗 | P0 | 功能测试 | 平台或门店存在进行中的新人礼活动;用户未登录 | 1. 未登录直接进入平台首页<br>2. 未登录直接进入门店首页<br>3. 观察页面弹窗与网络请求 | 访问端=H5/小程序;登录态=未登录 | 1. 平台首页和门店首页均不展示新人礼弹窗<br>2. 页面不进入领取流程<br>3. 若触发资格检查请求,应返回未登录拦截而非可领取结果 | [AI修正: 取自团队现有功能用例] |
|
||||
| C_NG_POP_007 | 用户端-首页-新人礼展示 | 验证首页展示的奖品信息与后台配置一致 | P0 | 功能测试 | 平台和商家端各存在 1 条进行中的新人礼活动,且分别绑定不同门槛和优惠内容的优惠券;用户满足资格 | 1. 平台新人登录平台首页查看弹窗奖品信息<br>2. 店铺新人进入门店首页查看弹窗奖品信息<br>3. 对比后台券配置 | 平台券=满100减20, 用券时间 2026-05-01 至 2026-05-31;店铺券=8折券, 上限 30 元 | 1. 平台首页弹窗展示的平台券门槛、优惠金额或折扣、用券时间与后台配置一致<br>2. 门店首页弹窗展示的商家券信息与商家端配置一致<br>3. 不出现平台券和商家券信息串位 | [AI修正: 取自团队现有功能用例] |
|
||||
| C_NG_POP_008 | 用户端-门店首页-新人礼弹窗 | 验证门店老用户进入门店首页时不展示门店新人礼弹窗 | P1 | 功能测试 | 商家A 存在 1 条进行中的门店新人礼活动;用户U9 已登录且在商家A 维度存在已支付订单 | 1. 用户U9 进入商家A 门店首页<br>2. 观察首页弹窗和资格检查结果 | 用户U9;店铺ID=1001;商家A 已支付订单数=1 | 1. 门店首页不展示门店新人礼弹窗<br>2. 资格检查接口返回不满足门店新人条件<br>3. 页面不出现立即领取入口 | [AI修正: 对标团队用例补充门店老用户负向场景] |
|
||||
| C_NG_SEND_001 | 用户端-首页-新人礼领取 | 验证点击立即领取成功后优惠券入账并写发放日志 | P0 | 冒烟测试 | 用户U1 满足平台新人资格;平台存在进行中活动且绑定有效券;用户未领取过该活动 | 1. 用户U1 在新人礼弹窗点击立即领取<br>2. 观察页面提示<br>3. 进入我的优惠券查询奖励<br>4. 查询发放日志 | 用户U1;活动ID=NG1001;券ID=PC1001 | 1. 页面提示领取成功<br>2. 我的优惠券列表新增对应优惠券<br>3. `new_gift_send_log` 新增 1 条成功记录,包含用户、活动、活动明细和发送状态<br>4. 该用户再次进入首页时不再展示同一活动弹窗 | 主流程 |
|
||||
| C_NG_SEND_002 | 用户端-首页-新人礼领取 | 验证同一用户重复点击立即领取时只发放一次 | P0 | 回归测试 | 用户U1 满足新人资格;平台存在进行中活动且绑定有效券;抓包或前端可模拟快速重复点击 | 1. 用户U1 打开新人礼弹窗<br>2. 在 1 秒内连续点击 3 次立即领取<br>3. 查询优惠券列表和发放日志 | 用户U1;活动ID=NG1001;重复点击次数=3 | 1. 页面最多显示 1 次领取成功提示<br>2. 用户仅新增 1 张优惠券<br>3. `new_gift_send_log` 仅有 1 条成功记录,其余请求被幂等拦截或返回已领取<br>4. 不出现重复发券 | [AI修正: 对应重复提交和重复支付类历史风险] |
|
||||
| C_NG_SEND_003 | 用户端-首页-新人礼领取 | 验证领取接口超时重试时不会重复发券 | P1 | 回归测试 | 用户U1 满足新人资格;模拟领取接口首个请求响应超时但后端已处理成功 | 1. 用户U1 点击立即领取<br>2. 将首个请求模拟为前端超时<br>3. 用户再次点击立即领取或页面自动重试<br>4. 查询优惠券列表和发放日志 | 首次请求后端处理成功;前端超时 5 秒 | 1. 页面提示处理中或可稍后刷新查看结果<br>2. 最终用户仅获得 1 张优惠券<br>3. 发放日志中仅 1 条成功记录,不存在多条成功发放<br>4. 页面最终状态与后台结果一致 | 非功能 |
|
||||
| C_NG_SEND_004 | 用户端-首页-新人礼领取 | 验证发券失败时记录失败原因且不出现半成功状态 | P1 | 功能测试 | 用户U4 满足新人资格;将发券接口模拟为失败 | 1. 用户U4 点击立即领取<br>2. 观察页面提示<br>3. 查询我的优惠券列表<br>4. 查询发放日志 | 券中心返回=库存不足或券失效 | 1. 页面提示领取失败及失败原因<br>2. 我的优惠券列表不新增该券<br>3. `new_gift_send_log` 记录失败状态和失败原因<br>4. 用户状态不被误标记为已领取 | [AI修正: 覆盖部分成功和异常记录风险] |
|
||||
| C_NG_SEND_005 | 用户端-首页-新人礼领取 | 验证同一账号双端并发领取时最终仅一次成功 | P1 | 功能测试 | 用户U5 满足新人资格;用户在手机端和 H5 端同时登录;平台存在进行中活动 | 1. 手机端和 H5 端同时打开新人礼弹窗<br>2. 两端几乎同时点击立即领取<br>3. 查询两端提示、优惠券列表和发放日志 | 用户U5;双端并发间隔小于 200ms | 1. 最终仅 1 次领取成功<br>2. 另一端返回已领取、处理中或重复请求提示<br>3. 用户优惠券列表仅新增 1 张券<br>4. 发放日志仅保留 1 条成功记录 | 并发 |
|
||||
| C_NG_SEND_006 | 用户端-门店首页-新人礼领取 | 验证用户领取平台新人礼后仍可继续领取门店新人礼 | P0 | 功能测试 | 用户U7 已成功领取平台新人礼;商家A 存在进行中的门店新人礼活动;用户U7 在商家A 维度无非关闭订单且未领取过门店活动 | 1. 用户U7 登录平台首页并确认已领取平台新人礼<br>2. 用户U7 进入商家A 门店首页<br>3. 观察门店弹窗并点击立即领取<br>4. 查询门店发放日志和优惠券列表 | 用户U7;平台活动ID=PLT1001;门店活动ID=SHOP1001 | 1. 门店首页仍展示门店新人礼弹窗<br>2. 用户可成功领取门店优惠券<br>3. 优惠券列表中同时存在平台新人礼券和门店新人礼券<br>4. 门店活动发放日志新增成功记录,不因已领取平台礼而被拦截 | [AI修正: 按产品确认口径补充平台礼与门店礼可并存] |
|
||||
| C_NG_CHECK_001 | 用户端-首页-资格检查 | 验证无进行中活动时不展示新人礼弹窗 | P1 | 功能测试 | 平台不存在进行中活动;用户U1 满足新人资格 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动列表=空或全部不命中资格检查条件 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动<br>3. 页面不出现错误提示或异常闪现弹窗 | [AI修正: 将状态负向场景拆分,提升定位性] |
|
||||
| C_NG_CHECK_002 | 用户端-首页-资格检查 | 验证活动未开始时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条未开始活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动开始时间=当前时间后 1 小时 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动未开始<br>3. 页面不出现提前曝光的领取入口 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| C_NG_CHECK_003 | 用户端-首页-资格检查 | 验证活动已结束时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条已结束活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动结束时间=当前时间前 1 小时 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动已结束<br>3. 页面不出现已结束活动的领取入口 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| C_NG_CHECK_004 | 用户端-首页-资格检查 | 验证活动已失效时不展示新人礼弹窗 | P1 | 功能测试 | 平台存在 1 条已失效活动;用户U1 满足新人资格;当前无其他进行中活动 | 1. 用户U1 登录平台首页<br>2. 观察首页弹窗<br>3. 查询资格检查接口返回 | 活动状态=已失效;valid_status=失效 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回无可领取活动或活动已失效<br>3. 页面状态与后台有效性字段一致 | [AI修正: 对标团队用例补充状态拆分场景] |
|
||||
| API_NG_PERF_001 | 用户端-资格检查-接口性能 | 验证资格检查接口在常规数据量下满足 RT 基线 | P2 | 性能测试 | 存在 100 条历史发放记录和 10 条活动数据;性能环境可统计接口耗时 | 1. 触发用户进入平台首页调用资格检查接口<br>2. 连续执行 30 次<br>3. 统计平均 RT 和 P95 | 接口=`/ua/newGift/check`;样本量=30 | 1. 常规场景下接口平均 RT 和 P95 满足 1000ms 基线或接近目标<br>2. 页面无明显卡顿或超时提示<br>3. 若超基线,应能定位是活动查询、资格判定还是日志判断链路耗时 | [AI修正: 技术方案给出 RT 1000ms] |
|
||||
| C_NG_RULE_001 | 用户端-资格判定-新人口径 | 验证存在已支付订单时不再识别为新人 | P1 | 功能测试 | 用户U8 存在 1 笔平台已支付订单;平台存在进行中活动 | 1. 用户U8 登录平台首页<br>2. 观察是否弹出新人礼<br>3. 查询资格检查返回 | 用户U8 历史订单状态=已支付 | 1. 首页不展示新人礼弹窗<br>2. 资格检查接口返回不满足新人条件<br>3. 页面展示与产品确认口径一致,不因已支付历史订单继续认定为新人 | [AI修正: 按产品确认口径更新新人判定] |
|
||||
| DATA_NG_SCOPE_001 | 平台端-商家端-数据隔离 | 验证平台端与商家端新人礼活动数据不互通 | P0 | 功能测试 | 平台端已配置 1 条平台新人礼活动;商家A 已配置 1 条门店新人礼活动;测试账号分别具备平台端和商家端权限 | 1. 在平台端查看新人礼活动列表<br>2. 在商家A 端查看新人礼活动列表<br>3. 对比两端列表数据 | 平台活动ID=PLT1001;商家活动ID=SHOP1001 | 1. 平台端仅展示平台活动数据,不展示商家活动<br>2. 商家端仅展示当前店铺活动数据,不展示平台活动<br>3. 两端数据查询、查看、编辑入口相互隔离 | [AI修正: 取自团队现有功能用例] |
|
||||
| VIEW_NG_READONLY_001 | 平台端-营销管理-新人有礼查看 | 验证查看态页面所有字段只读不可编辑 | P1 | 功能测试 | 平台已存在 1 条新人礼活动;平台运营账号已登录 | 1. 在列表中点击查看<br>2. 观察活动名称、活动时间、活动奖品等字段状态<br>3. 尝试修改字段或提交 | 活动ID=PLT1001 | 1. 查看页所有字段均为只读态<br>2. 页面不提供可提交修改的入口<br>3. 用户无法通过查看态改写活动配置 | [AI修正: 取自团队现有功能用例] |
|
||||
| PLT_NG_LIST_002 | 平台端-营销管理-新人有礼列表 | 验证列表展示字段和操作栏状态映射正确 | P1 | 功能测试 | 平台端存在未开始、进行中、已结束、已失效四类活动;平台运营账号已登录 | 1. 进入新人有礼列表<br>2. 逐条检查活动名称、活动时间、活动状态、创建时间、操作栏<br>3. 对比不同状态下的操作按钮 | 活动A=未开始;活动B=进行中;活动C=已结束;活动D=已失效 | 1. 列表展示字段完整且内容正确<br>2. 未开始活动展示编辑、失效<br>3. 进行中活动展示查看、失效或按最终规则允许的编辑能力<br>4. 已结束和已失效活动操作栏按需求展示删除或受限操作 | [AI修正: 取自团队现有功能用例] |
|
||||
Binary file not shown.
Reference in New Issue
Block a user