# 数字能量小程序测试清单 > 所属角色: `shu-zi-neng-liang-test-engineer` > 基于: phase1-product-plan.md, phase1-user-stories.md, system-spec.md > 版本: v1.0 --- ## 模块清单 | 模块 | 文件/组件 | 优先级 | |------|-----------|--------| | 首页输入 | index.js + index.wxml + index.wxss | P0 | | 三角形命盘 | chart.js + chart.wxml + chart.wxss + triangle组件 | P0 | | AI解读 | reading.js + reading.wxml + reading.wxss | P0 | | 付费订阅 | subscribe.js + subscribe.wxml + subscribe.wxss | P0 | | 个人中心 | profile.js + profile.wxml + profile.wxss | P1 | | 分销面板 | distribution.js + distribution.wxml + distribution.wxss | P1 | | 计算引擎 | calculator.js | P0 | | App全局 | app.js + app.wxss + app.json | P1 | | 云函数: 用户注册 | registerUser/index.js | P1 | | 云函数: 会话检查 | checkSession/index.js | P1 | | 云函数: AI解读 | generateReading/index.js | P0 | | 云函数: 支付创建 | createPayment/index.js | P0 | | 云函数: 佣金查询 | getCommission/index.js | P1 | | 云函数: 提现申请 | applyWithdraw/index.js | P1 | | 云函数: 二维码 | getQRCode/index.js | P1 | | 云函数: 上级查询 | getReferrerInfo/index.js | P1 | | 云函数: 支付回调 | paymentCallback/index.js | P0 | --- ## 测试用例清单 ### TC-01: 计算引擎 (P0) | # | 用例 | 输入 | 预期结果 | |---|------|------|---------| | 1.1 | 个位数原样返回 | reduceToDigit(5) | 5 | | 1.2 | 两位数归约 | reduceToDigit(10) | 1 | | 1.3 | 多位数归约 | reduceToDigit(99) | 9 | | 1.4 | 多位数归约链 | reduceToDigit(999) | 9 | | 1.5 | 卓越数11保留 | reduceToDigit(11) | 11 | | 1.6 | 卓越数22保留 | reduceToDigit(22) | 22 | | 1.7 | 卓越数33保留 | reduceToDigit(33) | 33 | | 1.8 | 完整命盘-已知日期 | calculateTriangle(1990, 1, 1) | 手算验真15个位置 | | 1.9 | 完整命盘-月份两位数 | calculateTriangle(1985, 12, 25) | D=3, E=7 | | 1.10 | 完整命盘-日两位数 | calculateTriangle(2000, 6, 15) | D=6, E=6 | | 1.11 | 完整命盘-年份奇数 | calculateTriangle(2001, 3, 8) | A=2, B=0, C=1 | | 1.12 | 主性格卓越数 | calculateTriangle(1994, 5, 12) | O 可能是22/33 | | 1.13 | 五区sum值 | 各场景 | sum=reduceToDigit(各位置值和) | | 1.14 | 数字含义1-9完整 | 1-9 | 均有title和trait | | 1.15 | 卓越数字含义 | 11, 22, 33 | 有特殊含义 | ### TC-02: 页面交互与状态 (P0) | # | 用例 | 步骤 | 预期结果 | |---|------|------|---------| | 2.1 | 未登录用户可输入 | 打开首页,填写日期 | 可操作,不强制登录 | | 2.2 | 推广链接打开 | URL带?ref=ABC123 | 底部显示分享者信息,缓存推广码 | | 2.3 | 免费用户3次限制 | 连续生成4次命盘 | 第4次弹出"次数已用完"引导订阅 | | 2.4 | 能量师无限生成 | 能量师身份不限次 | 不会触发次数限制 | | 2.5 | 跨午夜重置 | 00:00后检查 | 免费配额重置为0/3 | | 2.6 | 无效日期输入 | 月份=13, 日期=32 | 显示验证错误提示 | | 2.7 | 空字段提交 | 不选择年月日直接点生成 | 提示"请填写完整的出生日期" | | 2.8 | chart页历史id查找 | 点击历史记录中的命盘 | 正确加载对应命盘数据 | | 2.9 | chart页无效id | URL手动修改为不存在id | 显示空状态/错误提示 | | 2.10 | 免费用户解读限制 | 免费用户查看AI解读 | 仅显示主性格概要 | | 2.11 | 能量师完整解读 | 能量师查看AI解读 | 显示主性格+五区完整内容 | | 2.12 | 解读缓存 | 两次进入同一命盘解读页 | 第二次不调用云函数,使用本地缓存 | | 2.13 | 解读加载状态 | 首次进入解读页 | 显示骨架屏/loading动画 | | 2.14 | 解读内容折叠展开 | 点击章节标题 | 正确折叠/展开内容卡片 | | 2.15 | 免责声明存在 | 解读页底部 | 显示"本解读由AI生成,仅供参考" | ### TC-03: Canvas可视化 (P0) | # | 用例 | 步骤 | 预期结果 | |---|------|------|---------| | 3.1 | 五层十五格绘制 | 生成命盘 → chart页 | 5层15个数字卡片完整绘制 | | 3.2 | 连接线 | 检查线条 | 底层→顶层所有连接线正确 | | 3.3 | 数字颜色 | 1-9每个数字 | 颜色与DIGIT_COLORS配置一致 | | 3.4 | 卓越数高亮 | 主性格=11/22/33 | 金底+星标+边框加粗 | | 3.5 | 位置标签 | 每个数字下方 | 显示getPositionName的对应名称 | | 3.6 | 点击交互 | 点击数字卡片 | 弹出含义面板(title+trait+position) | | 3.7 | 区域背景色 | 五区 | 使用ZONE_COLORS颜色区分 | | 3.8 | 姓名生日显示 | 命盘上方 | 显示姓名和出生日期 | | 3.9 | 320px宽屏幕 | iPhone SE | 不溢出,数字不重叠 | | 3.10 | 414px宽屏幕 | iPhone Plus | 布局适配 | | 3.11 | 2x倍屏 | devicePixelRatio=2 | 渲染清晰无锯齿 | | 3.12 | 3x倍屏 | devicePixelRatio=3 | 渲染清晰无锯齿 | ### TC-04: 云函数 - generateReading (P0) | # | 用例 | 输入 | 预期结果 | |---|------|------|---------| | 4.1 | 正常请求 | 完整chartData + name | code=0, 6段解读字符串非空 | | 4.2 | 缺少positions | {} | code=400, error="缺少命盘数据" | | 4.3 | LLM超时 | 模拟超时 | 触发_fallbackReading降级解读 | | 4.4 | LLM返回非JSON | 非法响应 | code=0, mainCharacter=原始文本 | | 4.5 | LLM返回JSON in markdown | ```json ... ``` | 正确解析JSON内容 | | 4.6 | 缓存读取 | 第二次请求同命盘 | 不走云函数,从本地存储读取 | ### TC-05: 支付订阅 (P0) | # | 用例 | 步骤 | 预期结果 | |---|------|------|---------| | 5.1 | 未登录跳转支付 | 未登录用户点击订阅 | 引导登录或正常跳转 | | 5.2 | 支付loading | 点击"立即开通" | 按钮变为loading状态,不可重复点击 | | 5.3 | 支付成功 | 模拟支付成功回调 | role→practitioner, expireAt→+1年 | | 5.4 | 支付后推广码 | 支付成功后的checkSession | referralCode非空(6位) | | 5.5 | 支付取消 | 用户取消支付 | 停留在当前页,角色不变 | | 5.6 | 支付失败 | 模拟支付失败 | 显示"支付失败,请重试" | | 5.7 | 功能对比表 | 订阅页内容 | 正确展示免费vs能量师差异 | | 5.8 | 价格显示 | 订阅页 | ¥398/年,¥1.09/天正确 | ### TC-06: 分销链路 (P1) | # | 用例 | 步骤 | 预期结果 | |---|------|------|---------| | 6.1 | 推广码自动生成 | 支付成功后 | 6位字母+数字唯一码 | | 6.2 | 推广码持久化 | 重新登录 | 推广码不变 | | 6.3 | 分享卡片携带ref | 能量师分享 | path包含?ref=CODE | | 6.4 | 推广链接打开参数 | onLoad(options) | 正确读取ref并缓存 | | 6.5 | 注册时绑定上级 | 新用户带ref注册 | invitedBy=上级openid | | 6.6 | 上级统计更新 | 新用户注册 | directCount+1 | | 6.7 | 关系终身锁定 | 第二次通过他人链接注册 | 不覆盖原有invitedBy | | 6.8 | 自邀请不绑定 | 自己扫自己的码 | invitedBy为空 | | 6.9 | 一级佣金结算 | 下级付费¥398 | 佣金=¥119.4, status=available | | 6.10 | 二级佣金结算 | 下级的下级付费 | 佣金=¥39.8, status=available | | 6.11 | 佣金取值精确 | 浮动计算 | 两位小数精确 | | 6.12 | 佣金状态流转 | pending→available→completed | 按业务规则流转 | | 6.13 | 提现条件验证 | 可提现金额<¥100 | "申请提现"不可点击 | | 6.14 | 提现申请提交 | 金额合法 | 记录创建status=pending | | 6.15 | 提全额按钮 | 点击"全部提现" | 输入框填充可提现金额 | | 6.16 | 超额提现拦截 | 输入>可提现 | 提示"超出可提现金额" | ### TC-07: 用户体系与历史记录 (P1) | # | 用例 | 步骤 | 预期结果 | |---|------|------|---------| | 7.1 | 微信登录 | 点击微信登录 | 获取用户信息,创建/查询用户 | | 7.2 | 重复登录 | 同一用户再次登录 | 返回isNew=false | | 7.3 | 登录后状态持久化 | 关闭重开小程序 | token有效时自动登录 | | 7.4 | 会话过期 | token无效 | 自动跳转为未登录状态 | | 7.5 | 历史列表显示 | 个人中心页 | 按时间倒序,显示姓名/生日/主性格 | | 7.6 | 历史点击跳转 | 点击历史记录 | 跳转到对应chart页 | | 7.7 | 免费用户7天限制 | 8天前的记录 | 不显示 | | 7.8 | 能量师全部历史 | 所有记录 | 全部显示 | | 7.9 | 历史记录超100条 | 生成101+命盘 | 仅保留最近100条 | | 7.10 | 订阅状态显示 | 个人中心 | 能量师显示"已开通"+到期日 | ### TC-08: 边界与异常 (P0/P1) | # | 用例 | 预期结果 | |---|------|---------| | 8.1 | 年月日全部为空 | 提示填写完整日期 | | 8.2 | 年份=1899 | 日期选择器不可选 | | 8.3 | 年份=2100 | 不可选(超过当前年份) | | 8.4 | 月份=0 | picker限制不可选 | | 8.5 | 月份=13 | picker限制不可选 | | 8.6 | 日期=0 | picker限制不可选 | | 8.7 | 日期=32 | picker限制不可选 | | 8.8 | 闰年2/29 | 合法输入,正常计算 | | 8.9 | 非闰年2/29 | picker不可选 | | 8.10 | 姓名20字符 | 截断处理 | | 8.11 | 姓名全空格 | 显示"未知" | | 8.12 | 姓名特殊字符 | 正常显示 | | 8.13 | 命盘id含特殊字符 | 能正确查找 | | 8.14 | 弱网场景(3G模拟) | 云函数超时能有降级UI | | 8.15 | 断网场景 | 提示网络错误,不崩溃 | | 8.16 | 存储空间满 | 存储失败时的降级 | ### TC-09: 合规检查 (P0) | # | 检查项 | 通过标准 | |---|--------|---------| | 9.1 | 首页文案 | 不含"算命、占卜、预测、占星" | | 9.2 | AI解读免责声明 | 末尾包含"本解读由AI生成,仅供参考" | | 9.3 | 用户协议链接 | 可点击,打开的页面有效 | | 9.4 | 隐私政策链接 | 可点击,打开的页面有效 | | 9.5 | 不得收集敏感信息 | 无身份证/银行卡输入 | | 9.6 | 支付合规 | 微信支付规范无违规文案 | | 9.7 | 分销合规 | 两级分销,无团队计酬,无入门费 | --- ## 测试环境要求 | 项目 | 配置 | |------|------| | 微信基础库 | 3.7.1+ | | iOS | iPhone 13/14/15, iOS 16+ | | Android | 华为/小米/OPPO, Android 12+ | | 微信版本 | 8.0+ | | 云开发环境 | test/dev独立环境(非production) | | 测试账号 | 至少3个:普通用户A、能量师B、普通用户C(从B邀请注册) | ## 严重等级定义 | 等级 | 定义 | 响应时间 | |------|------|---------| | S0-Critical | 核心链路阻塞(无法生成命盘/支付/解读) | 立即修复 | | S1-Major | 功能严重异常(计算错误/状态错乱/数据丢失) | 24h内 | | S2-Minor | 功能可用但体验缺陷(UI错位/文案错误) | 下一迭代 | | S3-Trivial | 视觉/文案微调建议 | 积攒修复 |