feat: /qe-fleet run 安徽运八需求 + 系统坑修复
系统修复: - fleet_runner.py: Windows UTF-8 编码兼容(reconfigure stdout/stderr) - fleet_runner.py: run 命令自动生成合并清单供导出使用 - fleet_manifest.py: 新增 save_merged_manifest() 保存统一清单 - fleet_config.yml: 修复 YAML keywords 格式(block sequence → flow sequence) - 恢复被误删的知识库文件(payment_flow_cases, marketing_activity_cases) QE Fleet 产物 (安徽运八需求): - 153个测试点 + 53条可执行测试用例 - 需求分析/风险评估/测试策略/质量裁决(PASS) - Excel 导出 + 版本快照 v2 - 确认结论文件已归档
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# 安徽运八需求 测试用例
|
||||
|
||||
> 生成时间: 2026-07-13
|
||||
> 基于: 测试点矩阵、需求文档、风险评估报告、项目画像、历史缺陷、易漏场景清单
|
||||
> 验证标准: 每条用例同时覆盖 UI 反馈 + 数据状态变化
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :---: | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| TC-DB-001 | 上报运单看板 | 多条件组合查询(运单号模糊+上报阶段+核验状态+申诉状态) | P1 | 功能测试 | 1.已登录超管账号 2.系统存在多条不同状态的上报运单 | 1.进入看板 2.输入运单号部分字符 3.选上报阶段=第一次上报 4.选核验状态=通过 5.选申诉状态=未申诉 6.点查询 | 运单号部分字符、筛选条件组合 | UI:列表仅展示满足所有条件的运单,筛选条件保持选中。数据:后端返回结果AND匹配所有条件 | |
|
||||
| TC-DB-002 | 上报运单看板 | 重置按钮清空所有查询条件 | P2 | 功能测试 | 已设置任意查询条件 | 1.设置多个筛选条件 2.点重置按钮 | 任意筛选条件 | UI:所有条件恢复默认,列表刷新为全量数据。数据:查询接口参数为空或默认值 | |
|
||||
| TC-DB-003 | 上报运单看板 | 查询结果为空时显示友好提示 | P2 | 功能测试 | 已登录 | 1.输入不存在的运单号 2.点查询 | 运单号=NOTEXIST999999 | UI:显示空状态提示图标+文案,不显示空白表格或报错。数据:接口返回空数组,HTTP 200 | |
|
||||
| TC-DB-004 | 上报运单看板 | 列表字段完整性与异常项差异化展示 | P1 | 功能测试 | 1.存在核验通过运单 2.存在核验异常运单 | 1.进入看板 2.查看表头 3.对比两种状态运单行 | 核验通过运单、核验异常运单 | UI:表头含14个字段;通过行异常项为空;异常行异常项显示具体原因;合同金额千分位+2位小数。数据:接口字段与UI一一对应 | 合TP-DB-011, TP-DB-015 |
|
||||
| TC-DB-005 | 上报运单看板 | 导出Excel内容与筛选结果一致 | P2 | 功能测试 | 已设置筛选条件使结果集约50条 | 1.设置筛选条件 2.点导出 3.下载并打开Excel | 50条筛选结果 | UI:导出按钮可点击,下载Excel包含所有列表字段。数据:Excel行数=筛选结果数,字段顺序一致,金额为数字格式 | |
|
||||
| TC-DB-006 | 上报运单看板 | 特殊字符输入安全性(SQL注入/HTML/Emoji) | P2 | 安全性测试 | 已登录 | 1.输入`' OR '1'='1`点查询 2.输入`<script>alert(1)</script>`点查询 3.输入Emoji点查询 | SQL注入字符串、XSS字符串、Emoji表情 | UI:不报错不弹窗不异常页面。数据:后端返回空结果或正确转义,HTTP 200,无注入生效 | |
|
||||
| TC-FR-001 | 第一次上报 | 装货完成后系统自动触发第一次上报(全字段完整性) | P0 | 功能测试 | 1.运单已接单 2.车辆/司机/货物/托运方/收货方信息完整 3.司机完成装货确认 | 1.司机APP端确认装货完成 2.回管理端查看上报状态 | 完整运单数据(建单13+托运人7+收货方5+司机13+车辆19+货物+保险字段) | UI:列表出现该运单,状态:上传中(蓝)→已上传(绿);看板显示"第一次上报"。数据:上报接口被调用,请求体含完整子对象,HTTP 200,数据库状态更新 | |
|
||||
| TC-FR-002 | 第一次上报 | 必选字段缺失(从业资格证号)→上报异常 | P1 | 功能测试 | 司机从业资格证号为空 | 1.触发装货完成上报 2.查看上报结果 | 司机信息缺失从业资格证号 | UI:状态=异常(橙),操作列显示详情按钮;详情中异常原因含"从业资格证号缺失"。数据:接口返回校验失败,数据库记录状态=异常+异常原因 | |
|
||||
| TC-FR-003 | 第一次上报 | 可选字段为空(委托合同编号/运输里程/保险信息)→上报正常 | P1 | 功能测试 | 必选字段完整,可选字段均为空 | 1.触发装货完成上报 2.查看结果 | 可选字段均为空的运单 | UI:状态正常流转为"已上传"(绿)。数据:请求体可选字段值为null/空字符串,接口返回成功 | |
|
||||
| TC-FR-004 | 第一次上报 | 货物信息多条记录(≥2条)上报 | P2 | 功能测试 | 运单包含3条货物信息(钢材/木板/配件) | 1.触发上报 2.查看详情弹窗货物信息区 | 3条货物数据 | UI:详情弹窗展示3条货物记录各含4字段。数据:请求体goodsInfos数组length=3,接口成功 | |
|
||||
| TC-FR-005 | 第一次上报 | 核验通过后自动调用"修改第一次上报部分字段"更新实际里程 | P0 | 功能测试 | 1.第一次上报已触发 2.装货后实际里程变化(预估500→实际520km) | 1.上报成功核验通过 2.观察自动更新 3.查看运单里程字段 | 预估里程=500km, 实际里程=520km | UI:无人工干预下运单里程自动更新为520km;操作日志有"自动更新第一次上报字段"记录。数据:修改接口被调用,mileage=520,数据库运单里程更新 | |
|
||||
| TC-FR-006 | 第一次上报 | 上报失败→自动重试3次→站内信通知运营人员 | P1 | 功能测试 | 模拟安徽运八接口不可用(超时或500) | 1.触发上报 2.等待重试周期 3.观察最终结果 4.检查站内信 | 接口超时异常 | UI:状态流转:上传中→上传失败(红标签),出现"手动上传"按钮;运营收到站内信含运单号和失败原因。数据:接口调用4次(首+3重试),重试间隔递增;站内信表新增通知记录 | |
|
||||
| TC-FR-007 | 第一次上报 | 重试中手动触发上报→幂等性校验 | P1 | 功能测试 | 上报失败正处自动重试中 | 1.运单重试中 2.运营点"手动上传" | 重试中的运单 | UI:提示"上报处理中请勿重复操作"或排队等待;不出现两条上报记录。数据:同一运单在安徽运八平台仅一条记录 | |
|
||||
| TC-FR-008 | 第一次上报 | 第一次上报失败阻断后续第二、三次上报 | P0 | 功能测试 | 运单第一次上报失败(3次重试全败) | 1.确认第一次上报失败 2.尝试触发第二次上报 3.尝试触发第三次上报 | 第一次上报失败的运单 | UI:第二次上报按钮不可见/置灰提示"请先完成第一次上报";第三次同样阻断。数据:第二/三次接口调用被前置校验拦截,日志无记录 | |
|
||||
| TC-FR-009 | 第一次上报 | 详情弹窗8组字段分组展示与数据一致性 | P1 | 功能测试 | 存在已完成的第一次上报运单 | 1.点详情 2.逐一查看建单/托运人/收货方/司机/车辆/货物/保险/异常分组 3.与运单管理模块核对 | 完整上报数据 | UI:弹窗按8组展示,分组标题明确;无异常时显示"无异常";保险为空显示"-"。数据:弹窗字段值与上报请求体一致,与运单管理模块一致 | |
|
||||
| TC-FR-010 | 第一次上报 | 4种状态标签颜色验证 | P2 | 功能测试 | 准备4个运单分别处于上传中/已上传/上传失败/异常状态 | 1.进入列表 2.观察4条运单状态标签颜色 | 4种状态的运单 | UI:上传中=蓝标签;已上传=绿标签;上传失败=红标签;异常=橙标签。数据:状态字段值与颜色映射正确 | |
|
||||
| TC-SR-001 | 第二次上报 | 打款完成后自动触发上报(含资金流水+轨迹+7核验) | P0 | 功能测试 | 1.运单第一次上报已完成 2.财务完成打款 | 1.财务打款 2.查看第二次上报列表 | 完整打款数据(金额/流水号/时间/收款方/收款账号/账号类型) | UI:列表出现该运单状态"上传中"(蓝);展示承运运费/总金额/付款方式/时间/收款人/收款账号/账号类型。数据:上报接口被调用,请求体含资金流水+轨迹信息;流水数据与账户管理模块一致 | |
|
||||
| TC-SR-002 | 第二次上报 | 车辆轨迹点位边界值:2个点(起点+终点)→成功 | P1 | 功能测试 | 轨迹数据仅2个点位 | 1.触发第二次上报 2.查看结果 | 轨迹数据=[起点,终点] len=2 | UI:上报成功状态"已上传"。数据:请求体轨迹数组length=2,接口成功 | |
|
||||
| TC-SR-003 | 第二次上报 | 车辆轨迹点位边界值:1个点→失败 | P2 | 功能测试 | 轨迹数据仅1个点位 | 1.触发第二次上报 2.查看结果 | 轨迹数据=[单点] len=1 | UI:上报失败状态"异常"(橙);异常原因含"轨迹点位不足"。数据:接口返回校验失败提示轨迹点数需≥2 | |
|
||||
| TC-SR-004 | 第二次上报 | 运单重复上报→核验异常 | P0 | 功能测试 | 运单已完成第二次上报且核验通过 | 1.尝试再次上报同一运单 | 已通过的运单 | UI:系统提示"该运单已完成第二次上报"或被阻止;不产生新记录。数据:接口被前置校验拦截或安徽平台返回"运单重复";数据库无重复记录 | |
|
||||
| TC-SR-005 | 第二次上报 | 车辆资质核验:道路运输证有效期内→通过 | P1 | 功能测试 | 车辆道路运输证有效期至2026-12-31(有效期内) | 1.触发第二次上报 2.等待核验 3.查看核验结果 | 有效期内的道路运输证 | UI:核验状态"通过",无"车辆资质"异常项。数据:核验接口返回车辆资质=通过 | |
|
||||
| TC-SR-006 | 第二次上报 | 车辆资质核验:道路运输证已过期→异常 | P1 | 功能测试 | 车辆道路运输证有效期至2025-01-01(已过期) | 1.触发第二次上报 2.等待核验 | 过期的道路运输证 | UI:核验状态"异常"(橙);异常项显示"车辆资质核验"不通过;可发起申诉。数据:核验接口返回车辆资质=异常,原因"道路运输证过期" | |
|
||||
| TC-SR-007 | 第二次上报 | 资金流水单号重复→系统自动拦截 | P0 | 功能测试 | 系统中已存在流水号LS202607130001的记录 | 1.创建新运单打款但流水号重复 2.触发第二次上报 | 重复流水号=LS202607130001 | UI:系统上报前自动检测到重复,提示"流水单号已使用请核实";上报被阻止。数据:流水号唯一索引生效;接口未被调用;操作日志记录拦截 | |
|
||||
| TC-SR-008 | 第二次上报 | 资金流水金额不匹配(合同10000 vs 打款9500)→核验异常 | P1 | 功能测试 | 合同金额10000元,实际打款9500元 | 1.触发第二次上报 2.等待核验 | 合同金额=10000, 打款金额=9500 | UI:核验状态"异常";异常项含"资金流水核验"不通过,原因"金额不匹配"。数据:核验接口返回资金流水核验=异常 | |
|
||||
| TC-SR-009 | 第二次上报 | 车辆轨迹合规异常→补传轨迹→重新核验通过 | P1 | 功能测试 | 第二次上报后"车辆轨迹合规"核验异常 | 1.点"补传轨迹" 2.上传补充GPS点位文件 3.提交 4.等待重新核验 | 补充轨迹GPS文件 | UI:补传轨迹按钮可见可点击;上传后提示成功等待核验;核验通过后异常消除状态变"通过"。数据:补传轨迹追加到原数据;重调核验接口;核验结果更新为通过 | |
|
||||
| TC-SR-010 | 第二次上报 | 收款账号类型标签:个人=蓝色/对公=绿色 | P2 | 功能测试 | 两个运单:一个司机个人账户、一个企业对公账户 | 1.进入列表 2.查看收款账号类型标签 | 个人账户(司机银行卡)、对公账户(企业银行账号) | UI:个人账户=蓝标签"个人账户";对公账户=绿标签"对公账户"。数据:字段值正确对应 | |
|
||||
| TC-SR-011 | 第二次上报 | 重试3次全失败→告警通知运营人员 | P1 | 功能测试 | 模拟安徽运八接口不可用 | 1.触发第二次上报 2.等3次重试全失败 3.检查告警 | 接口不可用 | UI:状态变为"上传失败"(红);出现"手动上传"按钮;运营收到站内信通知含运单号/失败原因/重试次数。数据:重试次数=3;站内信表新增告警通知;操作日志记录完整 | |
|
||||
| TC-TR-001 | 第三次上报 | 开票完成后触发上报(含17字段发票+托运单号数组) | P0 | 功能测试 | 1.运单第二次上报已完成 2.发票已开具 | 1.开票审核模块完成开票 2.查看第三次上报列表 | 完整发票信息(17字段)+托运单号数组 | UI:列表出现该运单含发票号码/金额/开票日期;状态:上传中→已上传。数据:上报接口被调用;发票数据与开票审核模块一致 | |
|
||||
| TC-TR-002 | 第三次上报 | 第二次上报未完成时第三次上报被阻断 | P1 | 功能测试 | 运单仅完成第一次上报,第二次未完成 | 1.尝试开票并触发第三次上报 | 第二次未完成的运单 | UI:系统提示"请先完成第二次上报";上报按钮不可见/置灰。数据:第三次上报接口调用被前置校验拦截 | |
|
||||
| TC-TR-003 | 第三次上报 | 增值税发票验证失败→上报异常 | P1 | 功能测试 | 发票号码格式错误或与代码不匹配 | 1.触发第三次上报 2.查看结果 | 错误的发票号码/代码 | UI:上报状态"异常"(橙);原因提示"增值税发票验证失败"及具体原因。数据:接口返回发票验证失败业务错误码;数据库记录异常状态 | |
|
||||
| TC-TR-004 | 第三次上报 | 发票金额精度:价税合计保留2位小数四舍五入 | P2 | 功能测试 | 发票金额=12345.678元(超2位小数) | 1.触发第三次上报 2.查看列表发票金额 | 发票金额=12345.678 | UI:列表发票金额显示12,345.68(四舍五入)。数据:请求体invoiceAmount=12345.68,无浮点精度丢失 | |
|
||||
| TC-TR-005 | 第三次上报 | 油气发票多条记录上报 | P2 | 功能测试 | 运单关联2条油气发票 | 1.触发第三次上报 2.查看详情弹窗油气发票区 | 2条油气发票记录 | UI:油气发票区展示2条记录各含托运单号和发票文件。数据:请求体油气发票数组length=2 | |
|
||||
| TC-ETC-001 | ETC发票上传 | 税务抵扣完成后上传ETC发票(18字段/每张) | P1 | 功能测试 | 1.车辆完成高速运输 2.ETC发票已获取 3.税务抵扣完成 | 1.选运单 2.上传ETC发票信息 3.提交 | ETC发票完整18字段 | UI:上传成功状态"已上传"(绿);列表含ETC发票号码/金额/税率/上传状态。数据:请求体含18字段;税额=发票金额×3% | 合TP-ETC-001,003 |
|
||||
| TC-ETC-002 | ETC发票上传 | 税务抵扣未完成→上传被阻止 | P1 | 功能测试 | ETC发票存在但税务抵扣未完成 | 1.尝试上传ETC发票 | 抵扣未完成的ETC发票 | UI:系统提示"请先完成税务抵扣";上传被阻止。数据:上传接口调用被前置校验拦截 | |
|
||||
| TC-ETC-003 | ETC发票上传 | 税额计算:3%税率精度验证(1000元→30.00元) | P1 | 功能测试 | ETC发票金额1000.00元 | 1.上传1000元ETC发票 2.查看税额 | 发票金额=1000.00 | UI:税额显示30.00元。数据:taxAmount=1000.00×0.03=30.00,2位小数 | |
|
||||
| TC-ETC-004 | ETC发票上传 | 税额计算:大额发票100万元→30000.00元 | P2 | 功能测试 | ETC发票金额1000000元 | 1.上传100万元ETC发票 2.查看税额 | 发票金额=1000000.00 | UI:税额显示30,000.00元。数据:taxAmount=1000000.00×0.03=30000.00,无精度问题 | |
|
||||
| TC-ETC-005 | ETC发票上传 | ETC发票验证失败→上报异常提示检查发票 | P2 | 功能测试 | ETC发票号码/代码与实际不匹配 | 1.上传错误ETC发票 2.查看验证结果 | 错误的ETC发票号码/代码 | UI:状态"异常"(橙);原因提示"ETC发票验证失败请检查发票信息"。数据:接口返回ETC发票验证失败 | |
|
||||
| TC-AP-001 | 异常申诉 | 核验异常运单发起申诉(申诉原因+附件) | P1 | 功能测试 | 运单第二次上报核验异常(车辆轨迹合规异常) | 1.找到异常运单 2.点"申诉" 3.填原因:"实际路线因道路施工绕行" 4.上传附件(施工证明截图) 5.提交 | 申诉原因文本、路线施工证明截图 | UI:提交后提示"申诉已提交等待监管平台复核";申诉状态变"申诉中";列表新增申诉记录。数据:申诉表新增记录:申诉单号自动生成/异常项=车辆轨迹合规/原因已保存/附件已存储/状态=申诉中/时间=当前 | |
|
||||
| TC-AP-002 | 异常申诉 | 申诉原因必填校验→空值拦截 | P2 | 功能测试 | 存在可申诉异常运单 | 1.点申诉 2.不填原因 3.直接提交 | 申诉原因为空 | UI:输入框标红或提示"请填写申诉原因";提交按钮不响应或提示错误。数据:申诉接口未被调用;数据库无新记录 | |
|
||||
| TC-AP-003 | 异常申诉 | 申诉状态流转:申诉中→申诉通过(监管复核通过) | P1 | 功能测试 | 已提交申诉(申诉中状态) | 1.等待监管平台复核通过 2.查看申诉记录 | 申诉中的记录 | UI:申诉状态变"申诉通过"(绿);省平台反馈"复核通过";原运单异常项消除或已解决。数据:申诉记录状态更新;省平台反馈时间/结果/意见已记录;关联运单核验状态更新 | |
|
||||
| TC-AP-004 | 异常申诉 | 申诉状态流转:申诉中→申诉驳回→重新申诉 | P1 | 功能测试 | 申诉被监管平台驳回 | 1.查看驳回记录和原因 2.点"重新申诉" 3.补充材料修改原因 4.提交 | 驳回原因、补充材料 | UI:驳回记录显示"复核不通过"+反馈意见;"重新申诉"按钮可见;表单保留原内容可编辑;提交后状态变"申诉中"。数据:新申诉关联原单号;原记录保留不变;新申诉状态=申诉中 | |
|
||||
| TC-AP-005 | 异常申诉 | 详情弹窗:时间线展示处理记录(申诉→驳回→重申诉→通过) | P2 | 功能测试 | 申诉记录有多次操作历史 | 1.点"详情" 2.查看处理记录区 | 完整申诉历史数据 | UI:处理记录时间线展示从早到晚;每条含操作人/时间/类型/内容;类型区分清晰(发起申诉/省平台反馈/重新申诉/复核通过)。数据:数据库操作日志完整 | |
|
||||
| TC-AP-006 | 异常申诉 | 核验通过运单无申诉入口→越权防护 | P1 | 功能测试 | 运单核验状态为"通过" | 1.找到核验通过运单 2.查看操作列 3.尝试通过URL直接访问申诉接口 | 核验通过的运单 | UI:操作列不显示"申诉"按钮。数据:申诉接口返回"当前运单核验状态不允许申诉" | |
|
||||
| TC-LOG-001 | 上报日志 | 多条件日志查询(上报阶段+结果+时间范围) | P2 | 功能测试 | 系统存在多条不同阶段日志 | 1.进入上报日志 2.选阶段=第二次上报 3.选结果=失败 4.设时间范围近7天 5.点查询 | 筛选条件组合 | UI:列表展示满足条件的日志含10个字段(序号/货源单号/运单号/托运单号/上报阶段/上报结果/接口URL/HTTP状态码/响应时间/上报时间)。数据:查询条件正确传递;返回数据与筛选一致 | |
|
||||
| TC-LOG-002 | 上报日志 | 失败日志详情弹窗:完整请求/响应报文(JSON格式化) | P2 | 功能测试 | 存在一条失败的第二次上报日志 | 1.点失败日志"详情" 2.查看请求和响应报文 | 失败日志记录 | UI:弹窗展示完整请求报文(JSON格式化含所有字段)和响应报文(含错误码/错误信息);报文可复制。数据:展示报文与实际上报接口请求/响应一致 | |
|
||||
| TC-CM-001 | 通用跨模块 | 金额精度:多次计算无累积浮点误差 | P1 | 功能测试 | 运单合同金额=12345.67元 | 1.第一次上报看合同金额 2.第二次上报看总金额 3.第三次上报看发票金额 4.对比三次精度 | 合同金额=12345.67 | UI:所有金额显示2位小数千分位正确无精度丢失。数据:DB存DECIMAL(18,2);接口返回2位小数字符串;计算无浮点误差 | 来源:风险矩阵+易漏场景 |
|
||||
| TC-CM-002 | 通用跨模块 | 重复提交防抖:快速多次点击手动上传→仅一次请求 | P1 | 功能测试 | 存在上传失败运单 | 1.连续快速点击"手动上传"3次 2.等待结果 | 上传失败运单 | UI:按钮首次点击后变loading/置灰防重复点击;仅产生一次上报请求。数据:上报接口仅调用1次;上报日志仅1条记录 | 来源:易漏场景 |
|
||||
| TC-CM-003 | 通用跨模块 | 未登录直接URL访问上报看板→拦截跳转登录 | P2 | 安全性测试 | 退出登录状态 | 1.清除登录态 2.地址栏直接输入看板URL 3.观察页面 | 看板URL | UI:重定向到登录页或显示"请先登录";不展示上报数据。数据:上报API返回401 Unauthorized | |
|
||||
| TC-CM-004 | 通用跨模块 | 权限隔离:司机账号(15188888888)无法访问上报管理 | P1 | 安全性测试 | 司机账号15188888888/88888888 | 1.司机登录管理端 2.尝试访问看板/申诉管理等页面 | 司机账号凭证 | UI:菜单无"安徽运八"入口;直接URL访问重定向或"无权限";不展示上报数据。数据:上报API返回403 Forbidden | |
|
||||
| TC-CM-005 | 通用跨模块 | 第一次上报与运单管理模块数据一致性 | P1 | 功能测试 | 运单在运单管理模块已有完整数据 | 1.记录运单管理模块关键字段 2.触发第一次上报 3.在详情弹窗核对 | 货源单号/运单号/托运单号/车牌号/司机姓名/托运方/货物/装货地址/卸货地址/运输里程 | UI:上报详情字段值与运单管理一致。数据:上报请求体值来源于运单管理DB记录,数据一致 | |
|
||||
| TC-CM-006 | 通用跨模块 | 第二次上报资金流水与账户管理支付流水数据一致性 | P1 | 功能测试 | 运单已完成打款,支付流水号已知 | 1.在账户管理→支付流水查看打款数据 2.触发第二次上报 3.在上报详情核对资金流水 | 支付金额/流水号/支付时间/收款方 | UI:第二次上报详情中资金流水与账户管理模块一致。数据:上报请求体资金流水与支付流水表数据一致;流水号完全匹配 | |
|
||||
| TC-CM-007 | 通用跨模块 | 司机信息上报(13字段)与司机审核模块数据一致性 | P1 | 功能测试 | 司机已在审核管理模块通过审核 | 1.记录司机审核模块司机信息 2.触发第一次上报 3.核对上报详情司机信息 | 司机姓名/身份证号/驾驶证号/从业资格证号/手机号等13字段 | UI:上报详情司机13字段与审核模块一致。数据:上报请求体driverInfo来源于司机审核表 | |
|
||||
| TC-CM-008 | 通用跨模块 | 上报接口超时(>30s)→前端Loading+超时提示 | P2 | 功能测试 | 模拟上报接口响应超30秒 | 1.触发上报 2.观察前端表现 | 超时接口 | UI:按钮Loading状态(转圈/禁用);超30秒后显示"上报超时请稍后查看结果";不白屏不假死。数据:接口超时后后端异步处理或标记超时;DB状态=上传失败/原因=超时 | |
|
||||
|
||||
> 用例总数: 53 (P0:7 / P1:26 / P2:20)
|
||||
@@ -1,47 +0,0 @@
|
||||
# 新人礼需求测试用例
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| 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修正: 取自团队现有功能用例] |
|
||||
Reference in New Issue
Block a user