关联场景:
../user-scenarios/01-guest.md。对应 e2e:../e2e/roles/*(登录类)。
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-01 | G-1 | 启动/首页 | 游客 | P1 | 功能 | 清除登录态 | 1. 冷启动进入 splash/home 2. 观察首页与入口 | 显示引流首页,不进入任何业务页;明显展示微信/手机号/邀请登录入口 | JwtInterceptor 拦截 /api/** |
e2e/roles/child/login.spec.js(反向) |
| TC-G-02 | G-2 | 认证 | 游客 | P0 | 接口 | 微信授权可用(test-mode) | 1. 点微信一键登录 2. POST /api/auth/wechat-login |
返回 Result 含 token+用户信息;角色默认 parent;跳转家长首页;首次登录建 User+family_members(memberType=login) |
AuthController/API_REFERENCE 1.1 |
e2e/roles/parent/../login |
| TC-G-03 | G-3 | 认证 | 游客 | P0 | 接口 | 有效手机号 13800000001 | 1. POST /api/auth/send-code 2. POST /api/auth/phone-login(验证码) 3. 重复错误验证码 |
验证码正确→登录下发 token;错误→提示失败且不产生会话;限流生效 | 统一 POST/JWT | — |
| TC-G-04 | G-4 | 家庭/邀请 | 游客 | P1 | 功能 | 家长已 POST /api/family/invite/generate 生成邀请 |
1. 扫码/落地页进入 2. POST /api/auth/register-with-invite(带令牌) |
登录后自动归属对应家庭,成员列表出现该用户;令牌失效→「邀请已失效」 | FamilyInviteController |
e2e/roles/teacher/family-binding.spec.js(参考) |
| TC-G-05 | G-5 | 权限 | 游客 | P0 | 权限 | 无 token;已知业务路由 | 1. 直接请求 /pages/family/index 等(无 Authorization) 2. POST /api/product/list、/api/articles/list 3. 点商品/文章详情需登录项 |
业务页→401 跳登录,登录后回跳;商城/文章列表可见(公开);需登录详情被拦截 | JWT;8 公开路径白名单(1.1) | e2e/debug-control.spec.js(参考) |
/api/** 接口统一 401,前端统一跳登录。| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-06 | SC-G-06 | 权限 | 游客 | P0 | 权限 | 无 token;已知业务路由 | 1. 直接请求 /api/** 受保护接口(如 /api/family/member/list) |
JwtInterceptor 拦截(8 个公开路径除外);缺 token→401/403,不泄露内部错误堆栈 |
JwtInterceptor |
e2e/debug-control.spec.js(参考) |
| TC-G-07 | SC-G-07 | 测试模式 | 游客 | P2 | 功能 | wechat.test-mode:true |
1. 用模拟数据登录 | 仅测试环境生效;生产强制真授权;模拟登录不建真实微信绑定 | AGENTS.md 测试模式 | — |
| TC-G-08 | SC-G-08 | 环境切换 | 游客 | P2 | 功能 | 多环境(develop/trial/release) | 1. uni.getAccountInfoSync() 判定环境 2. 切对应 API 地址 |
环境识别失败回退默认地址;接口地址正确 | config.js |
— |
| TC-G-09 | SC-G-09 | 认证 | 游客 | P1 | 功能 | 已登录 | 1. 个人中心→退出 2. 清 token 回登录页 | 退出后本地缓存敏感数据清除;再次进入需登录 | AuthController |
— |
| TC-G-10 | SC-G-10 | 注册 | 游客 | P1 | 功能 | 未注册账号 | 1. 登录失败提示「未注册」 2. 引导注册流程 | 引导至注册;已注册账号不重复建档 | AuthController |
— |
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-11 | G-11 | 协议页/AgreementController | 游客 | P2 | 功能 | 未登录/游客态 | 1. 按场景流程执行:进入 → 查看协议全文 → 同意/返回 2. 观察结果 | 达成目标:合规告知;边界:未同意不可进入注册/核心流程 | 协议页/AgreementController | — |
| TC-G-12 | G-12 | config.js | 游客 | P2 | 功能 | 未登录/游客态 | 1. 按场景流程执行:H5 打开 → 环境探测 → 提示在微信内打开或降级静态页 2. 观察结果 | 达成目标:非微信浏览器打开小程序链接;边界:探测失败给出明确引导 | config.js | — |
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-01-E | G-1 | 启动/首页 | 游客 | P2 | 异常 | 清除登录态 | 1. 输入非法参数/网络中断/请求超时 2. 观察降级 | 系统给出明确错误提示而非 500;关键操作可重试或回滚;不泄露内部堆栈 | JwtInterceptor 拦截 /api/** |
— |
| TC-G-02-E | G-2 | 认证 | 游客 | P2 | 异常 | 微信授权可用(test-mode) | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | AuthController/API_REFERENCE 1.1 |
— |
| TC-G-03-E | G-3 | 认证 | 游客 | P2 | 异常 | 有效手机号 13800000001 | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | 统一 POST/JWT | — |
| TC-G-04-E | G-4 | 家庭/邀请 | 游客 | P2 | 异常 | 家长已 POST /api/family/invite/generate 生成邀请 |
1. 输入非法参数/网络中断/请求超时 2. 观察降级 | 系统给出明确错误提示而非 500;关键操作可重试或回滚;不泄露内部堆栈 | FamilyInviteController |
— |
| TC-G-05-E | G-5 | 权限 | 游客 | P2 | 异常 | 无 token;已知业务路由 | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | JWT;8 公开路径白名单(1.1) | — |
| TC-G-06-E | SC-G-06 | 权限 | 游客 | P2 | 异常 | 无 token;已知业务路由 | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | JwtInterceptor |
— |
| TC-G-07-E | SC-G-07 | 测试模式 | 游客 | P3 | 异常 | wechat.test-mode:true |
1. 输入非法参数/网络中断/请求超时 2. 观察降级 | 系统给出明确错误提示而非 500;关键操作可重试或回滚;不泄露内部堆栈 | AGENTS.md 测试模式 | — |
| TC-G-08-E | SC-G-08 | 环境切换 | 游客 | P3 | 异常 | 多环境(develop/trial/release) | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | config.js |
— |
| TC-G-09-E | SC-G-09 | 认证 | 游客 | P2 | 异常 | 已登录 | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | AuthController |
— |
| TC-G-10-E | SC-G-10 | 注册 | 游客 | P2 | 异常 | 未注册账号 | 1. 未登录/过期 token/非法切换 2. 观察拦截 | token 过期/缺失统一 401 跳登录;孩子端无切回家长入口;越权切换被拒;模拟登录仅测试环境生效 | AuthController |
— |
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-11-E | G-11 | 协议页/AgreementController | 游客 | P2 | 异常 | 未登录/游客态 | 1. 输入非法格式/重复/越界值 2. 观察处理 | 字段格式校验拦截;重复去重;最小权限保底;保存失败不污染既有数据 | 协议页/AgreementController | — |
| TC-G-12-E | G-12 | config.js | 游客 | P2 | 异常 | 未登录/游客态 | 1. 输入非法格式/重复/越界值 2. 观察处理 | 字段格式校验拦截;重复去重;最小权限保底;保存失败不污染既有数据 | config.js | — |
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-01-P | G-1 | 启动/首页 | 游客 | P1 | 权限 | 清除登录态 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | JwtInterceptor 拦截 /api/** |
— |
| TC-G-02-P | G-2 | 认证 | 游客 | P1 | 权限 | 微信授权可用(test-mode) | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | AuthController/API_REFERENCE 1.1 |
— |
| TC-G-03-P | G-3 | 认证 | 游客 | P1 | 权限 | 有效手机号 13800000001 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | 统一 POST/JWT | — |
| TC-G-04-P | G-4 | 家庭/邀请 | 游客 | P1 | 权限 | 家长已 POST /api/family/invite/generate 生成邀请 |
1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | FamilyInviteController |
— |
| TC-G-05-P | G-5 | 权限 | 游客 | P1 | 权限 | 无 token;已知业务路由 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | JWT;8 公开路径白名单(1.1) | — |
| TC-G-06-P | SC-G-06 | 权限 | 游客 | P1 | 权限 | 无 token;已知业务路由 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | JwtInterceptor |
— |
| TC-G-07-P | SC-G-07 | 测试模式 | 游客 | P2 | 权限 | wechat.test-mode:true |
1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | AGENTS.md 测试模式 | — |
| TC-G-08-P | SC-G-08 | 环境切换 | 游客 | P2 | 权限 | 多环境(develop/trial/release) | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | config.js |
— |
| TC-G-09-P | SC-G-09 | 认证 | 游客 | P1 | 权限 | 已登录 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | AuthController |
— |
| TC-G-10-P | SC-G-10 | 注册 | 游客 | P1 | 权限 | 未注册账号 | 1. 以当前角色调用他人/非绑定家庭数据接口(报告/任务/方案/订单/能量) 2. 观察 | 非归属数据访问统一 403/401,不泄露他人数据;横向越权被拒 | AuthController |
— |
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-11-P | G-11 | 协议页/AgreementController | 游客 | P2 | 权限 | 未登录/游客态 | 1. 未登录直接调用受保护接口(报告/任务/方案/订单/能量/管理端) 2. 观察拦截 | 统一 401/403,不泄露内部错误与数据;8 个公开路径除外 | 协议页/AgreementController | — |
| TC-G-12-P | G-12 | config.js | 游客 | P2 | 权限 | 未登录/游客态 | 1. 未登录直接调用受保护接口(报告/任务/方案/订单/能量/管理端) 2. 观察拦截 | 统一 401/403,不泄露内部错误与数据;8 个公开路径除外 | config.js | — |
非功能维度:性能(大文件/并发/限流)、兼容(多端/多浏览器/主题)、安全(IDOR/XSS/上传/鉴权/SSRF)。编号后缀
-N与正常流/异常流(-E)/权限流(-P)并列。
| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-G-N01 | SC-G-01 | 落地页 | 游客 | P2 | 性能 | 弱网/首次访问 | 1. 打开落地页/邀请页 2. 测首屏时间 | 首屏 ≤ 3s;骨架屏生效;CDN 资源命中;无白屏 | 落地页/邀请 | — |
| TC-G-N02 | SC-G-03 | 浏览转化 | 游客 | P2 | 兼容 | 微信内 H5 / Safari / Chrome / 小程序 webview | 1. 各端浏览内容 2. 触发登录 | 布局一致;微信授权正常;兜底登录可用;无错位 | 登录注册 | — |
| TC-G-N03 | SC-G-12 | 非微信H5 | 游客 | P2 | 兼容 | 非微信浏览器(Chrome PC) | 1. 打开 H5 2. 走手机号兜底登录 | 功能可用;无微信 SDK 依赖报错;流程闭环 | H5 兜底 | — |
| TC-G-N04 | SC-G-01 | 落地页 | 游客 | P0 | 安全 | 未登录态(无 token) | 1. 直接调 /api/family/*、/api/health/report/list 等受保护接口 |
返回 401;不泄露数据与结构 | 接口鉴权 | e2e/api/nonfunc-security.spec.js |
| TC-G-N05 | SC-G-02 | 登录注册 | 游客 | P0 | 安全 | 爆破/重放工具 | 1. 高频错误密码登录 2. 验证码重放 | 触发限流/锁定;验证码一次性;防爆破;无撞库成功 | 登录限流 | — |