# 新人礼需求测试用例

| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| 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修正: 取自团队现有功能用例] |
