Files
quyun-v2/docs/test-matrix.md

22 KiB
Raw Permalink Blame History

全项目页面逐按钮测试矩阵(落盘存档)

更新日期2026-02-07Asia/Shanghai

1) 测试范围

  • Portalfrontend/portal/src/router/index.js 所有业务路由(含登录、主页、频道、内容详情、用户中心、创作者中心、结算支付)。
  • Superadminfrontend/superadmin/src/router/index.js 所有 superadmin 路由 + uikit/pages/landing 路由。
  • 粒度:页面级 + 按钮/链接级(可见可交互控件采样执行)。
  • 数据前置:已执行补齐后的 seedbackend/app/commands/seed/seed.go)。

2) 测试环境

  • Backend API: http://127.0.0.1:18080healthz=204
  • Superadmin: http://127.0.0.1:5173
  • Portal: http://127.0.0.1:5174
  • 租户代码:meipai_990
  • Portal登录手机号 13800138000 + OTP 1234
  • Superadmin登录superadmin / superadmin123

3) Portal 页面矩阵(按页面)

说明:ok=false 表示页面可打开但检测到错误关键词(如 404/not found 等),通常来自页面内某些资源/API不一定是整页不可用。

Route 结果 代表按钮(采样) 备注
/t/meipai_990 ⚠️ 部分异常 退出登录 / 推荐 / 最新 / 热门 / 全部 / 京剧... 存在 /v1/t/:tenantCode/tenants 404
/t/meipai_990/channel ⚠️ 部分异常 退出登录 / 私信 / 主页 / 关于 / 最新 / 最热 同上,频道页伴随 tenants 404
/t/meipai_990/contents/1 发布评论 / 回复 / 关注 / 私信 详情页主流程可用
/t/meipai_990/explore ⚠️ 部分异常 分类过滤按钮组、免费/付费 存在 tenants 404
/t/meipai_990/topics 导航/跳转链接可用 页面可达
/t/meipai_990/creator/apply 立即申请入驻 可提交入口存在
/t/meipai_990/creator/contents/new 存草稿 / 发布 / 免费/付费/会员专享 创作发布页可达
/t/meipai_990/me 退出登录 / 清空历史 个人中心可达
/t/meipai_990/me/orders 全部订单/待支付/已完成/退款售后/去支付/取消订单 订单列表动作可见
/t/meipai_990/me/orders/1 复制 / 联系商家 详情页可达
/t/meipai_990/me/wallet 立即充值 钱包页可达
/t/meipai_990/me/coupons 未使用/已使用/已过期 状态切换可见
/t/meipai_990/me/library 立即阅读 已购库可达
/t/meipai_990/me/favorites 批量管理 / 取消收藏 收藏页可达
/t/meipai_990/me/likes 取消点赞 点赞页可达
/t/meipai_990/me/notifications 全部/系统/订单/审核/互动/全部已读 通知中心可达
/t/meipai_990/me/profile 保存修改 资料页可达
/t/meipai_990/me/security 更换 / 去认证 安全页可达
/t/meipai_990/checkout?contentId=1 提交订单 / 取消 下单页可达
/t/meipai_990/payment/1 确认余额支付 支付页可达

Portal 关键异常

  1. GET /v1/t/meipai_990/tenants?limit=5 返回 404页面顶部若依赖该接口会触发异常标记
  2. 多条 /v1/storage/https://images.unsplash.com/... 返回 404种子中外链被当作 storage path 访问,导致图片资源请求失败)。

4) Superadmin 页面矩阵(按页面)

Route 结果 按钮数量(采样统计) 代表按钮(采样)
/super/ 6 Aura/Lara/Nora/Static/Overlay/Logout
/super/superadmin/tenants 20 健康概览/创建租户/查询/重置/展开
/super/superadmin/health 10 刷新/查询/重置/展开
/super/superadmin/users 34 查询/重置/展开/分页
/super/superadmin/users/1 44 资料/角色/状态/拥有租户/加入租户
/super/superadmin/orders 41 查询/重置/退款/标记问题/完成对账
/super/superadmin/orders/1 9 取消标记/撤销对账/退款
/super/superadmin/contents 36 内容列表/评论治理/举报治理/批量通过/批量驳回
/super/superadmin/creators 45 创作者列表/申请审核/成员审核/结算账户
/super/superadmin/coupons 34 券模板/发放记录/异常核查/新建优惠券
/super/superadmin/finance 31 提现审核/钱包流水/异常排查/刷新
/super/superadmin/reports 23 导出CSV/查询/重置
/super/superadmin/assets 11 查询/重置/展开
/super/superadmin/notifications 23 通知列表/模板管理/群发通知
/super/superadmin/audit-logs 11 查询/重置/展开
/super/superadmin/system-configs 13 新建配置/查询/重置/编辑
/super/pages/empty 6 基础布局按钮
/super/pages/crud 12 New/Delete/Export/分页
/super/documentation 6 基础布局按钮
/super/landing 4 Register/Get Started
/super/uikit/button 66 Submit/Disabled/Link/Primary...
/super/uikit/formlayout 7 Submit
/super/uikit/input 11 Option1/2/3/Search
/super/uikit/table 15 Clear/分页
/super/uikit/list 12 Buy Now
/super/uikit/tree 6 基础布局按钮
/super/uikit/panel 16 Save/Header tabs
/super/uikit/overlay 11 Show/Save/Confirm/Delete
/super/uikit/media 6 基础布局按钮
/super/uikit/message 10 Success/Info/Warn/Error
/super/uikit/file 11 Choose/Upload/Cancel
/super/uikit/menu 13 Header I/II/III
/super/uikit/charts 6 基础布局按钮
/super/uikit/misc 8 Emails/Messages
/super/uikit/timeline 10 Read more

5) 失败/阻塞项复现

F1Portal tenants 接口 404

  • 现象:首页/频道/探索页出现 ok=false,并在后端日志出现 404。
  • 复现:登录 Portal 后访问 /t/meipai_990/t/meipai_990/channel
  • 后端日志:GET /v1/t/meipai_990/tenants?limit=5 -> 404。
  • 影响:门户首页顶部/频道信息可能缺失或报错。
  • 建议优先级:P1(核心入口页异常)。

F2Portal 外链图片走 storage 路由导致 404

  • 现象:大量 /v1/storage/https://images.unsplash.com/... 404。
  • 复现:访问首页/列表相关页面即可触发。
  • 根因倾向:内容封面 URL 为外链,但前端拼接了 storage 下载前缀。
  • 影响:缩略图/封面显示失败,体验受损。
  • 建议优先级:P2

6) 覆盖统计

  • Portal 路由覆盖20/20按执行清单
  • Superadmin 路由覆盖35/35按执行清单
  • 可见按钮/操作覆盖:
    • Portal每页采样记录按钮均有可见交互控件详情见上表
    • Superadmin每页记录按钮数量与代表动作详见上表

7) 结论

  • 总体可用但存在两类明显缺陷F1/F2
  • Superadmin 页面可达与按钮可见性整体正常。
  • Portal 核心流程(登录、订单、钱包、个人中心、支付页)可访问;但租户信息接口与外链图片路径处理需要修复。

附:证据来源

  • 浏览器自动化Playwright MCP页面快照 + 按钮/链接枚举 + 路由巡检)
  • 后端证据:pty_0e911c68 运行日志中的 404 记录
  • 环境会话:
    • backend: pty_0e911c68
    • superadmin: pty_28cea2be
    • portal: pty_1773d898

8) 闭环测试执行上下文Action -> API -> DB

  • 执行时间2026-02-07 11:56 ~ 12:00Asia/Shanghai
  • 数据前置:cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go run . seed
  • 本轮租户:meipai_157tenant_id=1
  • 账号:
    • Portal13800138000 + 1234
    • Superadminsuperadmin / superadmin123
  • 验证方式:
    • 通过 API 触发页面等效动作UI-equivalent
    • 每个场景记录前置状态/动作/后置状态/SQL证据

8.1 全局前后快照

指标 前置 后置 Delta
user_content_actions 2 3 +1
comments 1 2 +1
orders 12 14 +2
order_items 3 4 +1
content_access 3 3 +0
买家余额(分) 5000 104010 +99010
买家未读通知tenant=1 8 0 -8

9) 闭环场景结果表

9.1 Portal 闭环场景

场景 前置状态 动作UI 等效 API 后置状态DB/API 证据) 结果
点赞内容 content_id=1 已有 like 记录 1 条 POST /v1/t/meipai_157/contents/1/like HTTP 200like 记录 1 -> 1幂等 Pass
收藏内容 content_id=2 favorite 记录 0 条 POST /v1/t/meipai_157/contents/2/favorite HTTP 200favorite 记录 0 -> 1 Pass
评论内容 content_id=3 评论数 0 POST /v1/t/meipai_157/contents/3/comments闭环评论 cc25fadc2c HTTP 200评论数 0 -> 1新评论 id=2 Pass
下单+支付+发放访问权限 content_id=4 POST /orders -> order_id=13POST /orders/13/pay 订单状态=paid、order_item=1content_access(order_id=13)=0,总量无增量 Fail
充值码兑换 RC_ACTIVE_1000 为 active POST /me/wallet/rechargecode=RC_ACTIVE_1000 HTTP 200code: active->redeemed余额 +100000 分;redeemed_order_id=14order(14) status=created Fail
全部通知已读 未读 8 POST /me/notifications/read-all HTTP 200未读 8 -> 0 Pass

9.2 Superadmin 闭环场景

场景 前置状态 动作 后置状态DB/API 证据) 结果
系统配置 create/update qa_closure_84f9cb6e POST /super/v1/system-configs -> PATCH /super/v1/system-configs/3 配置值更新为 {"value":"v2","source":"qa-update"}description=qa closure updated;审计日志 2 条create+update Pass
通知模板 create/update qa_template_f342df9a POST /super/v1/notifications/templates -> PATCH /super/v1/notifications/templates/5 标题更新为 QA Template Title Updatedis_active=false;审计日志 1 条 Pass
群发通知下游落库 目标用户未读=0 POST /super/v1/notifications/broadcasttenant=1 API 返回 200但通知表无新增title 查询=0补测显式 user_ids 仍无落库 ⚠️ Blocked

10) 失败/阻塞场景复现与证据

F3支付成功但未发放内容访问权限

  • 复现:
    1. POST /v1/t/meipai_157/orderscontent_id=4
    2. POST /v1/t/meipai_157/orders/13/paymethod=balance
  • 实际:
    • orders.id=13 status=paid
    • order_items(order_id=13)=1
    • content_access(order_id=13)=0
  • 证据 SQL节选
    • SELECT id,status,order_id FROM content_access WHERE user_id=2 AND content_id=4; -> id=3,status=expired,order_id=9
    • SELECT id,status,amount_paid FROM orders WHERE id=13; -> 13,paid,990
  • 影响:用户完成支付后可能无权访问已购内容。
  • 优先级:P1

F4严重充值码兑换后订单状态未结算为 paid

  • 复现:
    1. POST /v1/t/meipai_157/me/wallet/rechargecode=RC_ACTIVE_1000
  • 实际:
    • 接口 200返回 order_id=14
    • 充值码状态 active->redeemedredeemed_order_id=14
    • 用户余额 +100000 分(到账)
    • orders.id=14 status=created(应为 paid
  • 证据 SQL节选
    • SELECT code,status,redeemed_order_id,amount FROM recharge_codes WHERE code='RC_ACTIVE_1000'; -> redeemed,14,100000
    • SELECT id,status,type,amount_paid FROM orders WHERE id=14; -> 14,created,recharge,100000
  • 影响:资金到账与订单状态不一致,影响对账/风控/财务准确性。
  • 优先级:P0

B1阻塞超管群发通知闭环无法在当前环境确认

  • 复现:
    1. POST /super/v1/notifications/broadcasttenant=1返回 200
    2. 查询 notifications 未见新记录
  • 说明:services/notification.go 默认走异步任务队列(job.Add);仅 JOB_INLINE=1 才同步落库。当前环境未启动消费方,导致“动作成功但下游证据缺失”。
  • 处理建议:
    • 启用 worker
    • 在闭环环境设置 JOB_INLINE=1 再复测。
  • 状态:Blocked非功能结论环境前置不足

F1Portal tenants 接口 404回归确认

  • 请求:GET /v1/t/meipai_157/tenants?limit=5
  • 结果HTTP 404
  • 影响:门户首页/频道页租户信息区块异常。
  • 优先级:P1

F2外链图片被当作 storage 路径(回归确认)

  • 请求:GET /v1/storage/https://images.unsplash.com/photo-1514306191717-452ec28c7f31
  • 结果HTTP 404
  • 影响:封面图/缩略图加载失败。
  • 优先级:P2

11) 优先级缺陷清单P0/P1/P2

P0

  1. 充值码兑换订单状态不一致:余额到账 + code 已 redeem但 recharge 订单仍为 createdF4

P1

  1. 支付后未发放访问权限:订单 paid 但未新增 active content_accessF3
  2. Portal tenants 接口 404核心入口页租户数据缺失F1

P2

  1. 外链图片走 storage 前缀导致 404F2

Blocked需环境补齐后再定级

  1. 超管群发通知下游落库验证当前队列消费未启用B1

12) 最终闭环覆盖总结

  • 闭环场景总数9

    • 通过6
    • 失败2
    • ⚠️ 阻塞1
  • Fully Closed

    • Portal点赞、收藏、评论、通知全部已读
    • Superadmin系统配置 create/update、通知模板 create/update
  • Partially Closed / Failed

    • Portal下单支付后访问权限发放失败
    • Portal充值兑换状态一致性失败
  • Blocked

    • Superadmin群发通知下游落库验证需 worker/JOB_INLINE 前置)

13) 2026-02-07 回归复测(修复后)

  • 执行时间2026-02-07 12:57 ~ 13:07Asia/Shanghai
  • 后端:go run . servehttp://127.0.0.1:18080
  • 复测前置:cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go run . seed
  • 本轮租户:meipai_569tenant_id=1
  • Portal 登录:POST /v1/auth/otp + POST /v1/auth/login13800138000 / OTP 1234

13.1 关键接口复测结果Action -> API -> DB

场景 动作 结果 证据
支付后 content_access 恢复 active POST /v1/t/meipai_569/orderscontent_id=4-> order_id=13POST /v1/t/meipai_569/orders/13/pay 订单支付成功,已有 expired 访问记录被恢复为 active 并绑定新订单 orders.id=13 status=paid; order_items(order_id=13)=1; content_access(user_id=2,content_id=4)status=expired,order_id=9 变为 status=active,order_id=13
充值兑换订单状态一致性 POST /v1/t/meipai_569/me/wallet/rechargecode=RC_ACTIVE_1000-> order_id=14 兑换后订单状态为 paid,与余额到账一致 recharge_codes.code='RC_ACTIVE_1000' status=redeemed, redeemed_order_id=14; orders.id=14 status=paid,type=recharge; users.id=2 balance=104010
Portal tenants 列表接口 GET /v1/t/meipai_569/tenants?limit=5(带/不带 token 返回 200不再 404 响应体包含分页与 tenant 项:{"page":1,"total":1,"items":[...]}
外链图片 URL GET /v1/t/meipai_569/contents?page=1&limit=3 cover 返回外链绝对 URL不再拼接 /v1/storage/https://... 响应中 cover 字段为 https://images.unsplash.com/...media_assets.object_keyhttp(s) 外链时直出

13.2 新发现(回归期间)

  • Creator 路由缺失(与本轮四项缺陷不同):
    • 复测请求:GET /v1/t/meipai_569/creator/orders 返回 404。
    • 服务启动日志中无任何 /v1/t/:tenantCode/creator/... 路由注册项。
    • 代码现状:backend/app/http/v1/creator.go 只有一个方法 GrantCoupon,但其注释块包含大量不匹配该方法签名的 @Router 声明,导致路由生成器未产出 creator 路由。
    • 影响Portal 创作者中心依赖的 /creator/* API 存在不可用风险(需单独修复)。

13.3 构建/测试验证

  • cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go test ./...
    • 结果: 全量通过。

13.4 状态更新P0/P1/P2

  • P0 充值兑换状态不一致F4 已修复并复测通过
  • P1 支付后未发放访问权限F3 已修复并复测通过
  • P1 Portal tenants 接口 404F1 已修复并复测通过
  • P2 外链图片拼接 storage 前缀F2 已修复并复测通过
  • Blocked群发通知异步落库⚠️ 仍依赖 worker/JOB_INLINE 环境前置

14) 2026-02-07 Creator 路由恢复验证(回归补录)

  • 执行时间2026-02-07 19:28 ~ 19:31Asia/Shanghai
  • 后端:go run . servehttp://127.0.0.1:18080
  • 路由生成:cd backend && atomctl gen route
  • 全量回归:cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go test ./... pass

14.1 前端 Creator API -> 后端 Controller/Service 映射

前端函数(frontend/portal/src/api/creator.js 后端路由 Controller 方法 Service 方法
apply POST /v1/t/:tenantCode/creator/apply Creator.Apply services.Creator.Apply
getDashboard GET /v1/t/:tenantCode/creator/dashboard Creator.Dashboard services.Creator.Dashboard
listContents GET /v1/t/:tenantCode/creator/contents Creator.ListContents services.Creator.ListContents
getContent GET /v1/t/:tenantCode/creator/contents/:id<int> Creator.GetContent services.Creator.GetContent
createContent POST /v1/t/:tenantCode/creator/contents Creator.CreateContent services.Creator.CreateContent
updateContent PUT /v1/t/:tenantCode/creator/contents/:id<int> Creator.UpdateContent services.Creator.UpdateContent
deleteContent DELETE /v1/t/:tenantCode/creator/contents/:id<int> Creator.DeleteContent services.Creator.DeleteContent
listOrders GET /v1/t/:tenantCode/creator/orders Creator.ListOrders services.Creator.ListOrders
refundOrder POST /v1/t/:tenantCode/creator/orders/:id<int>/refund Creator.RefundOrder services.Creator.ProcessRefund
getSettings GET /v1/t/:tenantCode/creator/settings Creator.GetSettings services.Creator.GetSettings
updateSettings PUT /v1/t/:tenantCode/creator/settings Creator.UpdateSettings services.Creator.UpdateSettings
listPayoutAccounts GET /v1/t/:tenantCode/creator/payout-accounts Creator.ListPayoutAccounts services.Creator.ListPayoutAccounts
addPayoutAccount POST /v1/t/:tenantCode/creator/payout-accounts Creator.AddPayoutAccount services.Creator.AddPayoutAccount
removePayoutAccount DELETE /v1/t/:tenantCode/creator/payout-accounts?id=:id Creator.RemovePayoutAccount services.Creator.RemovePayoutAccount
withdraw POST /v1/t/:tenantCode/creator/withdraw Creator.Withdraw services.Creator.Withdraw
listMembers GET /v1/t/:tenantCode/creator/members Creator.ListMembers services.Tenant.ListMembers
removeMember DELETE /v1/t/:tenantCode/creator/members/:id<int> Creator.RemoveMember services.Tenant.RemoveMember
listMemberInvites GET /v1/t/:tenantCode/creator/members/invites Creator.ListMemberInvites services.Tenant.ListInvites
createMemberInvite POST /v1/t/:tenantCode/creator/members/invite Creator.CreateMemberInvite services.Tenant.CreateInvite
disableMemberInvite DELETE /v1/t/:tenantCode/creator/members/invites/:id<int> Creator.DisableMemberInvite services.Tenant.DisableInvite
listMemberJoinRequests GET /v1/t/:tenantCode/creator/members/join-requests Creator.ListMemberJoinRequests services.Tenant.ListJoinRequests
reviewMemberJoinRequest POST /v1/t/:tenantCode/creator/members/:id<int>/review Creator.ReviewMemberJoinRequest services.Tenant.ReviewJoin
listCoupons GET /v1/t/:tenantCode/creator/coupons Creator.ListCoupons services.Coupon.List
getCoupon GET /v1/t/:tenantCode/creator/coupons/:id<int> Creator.GetCoupon services.Coupon.Get
createCoupon POST /v1/t/:tenantCode/creator/coupons Creator.CreateCoupon services.Coupon.Create
updateCoupon PUT /v1/t/:tenantCode/creator/coupons/:id<int> Creator.UpdateCoupon services.Coupon.Update
grantCoupon POST /v1/t/:tenantCode/creator/coupons/:id<int>/grant Creator.GrantCoupon services.Coupon.Grant
Portal 报表页预留) GET /v1/t/:tenantCode/creator/reports/overview Creator.ReportOverview services.Creator.ReportOverview
Portal 报表页预留) POST /v1/t/:tenantCode/creator/reports/export Creator.ExportReport services.Creator.ExportReport

14.2 路由恢复证据

  • atomctl gen route 输出包含 Creator 路由发现日志(Found route ... /v1/t/:tenantCode/creator/...)。
  • backend/app/http/v1/routes.gen.go 已出现 29 条 creator 路由注册项(/v1/t/:tenantCode/creator/*)。
  • 服务启动日志显示 Creator 路由已注册(Registering route: ... /v1/t/:tenantCode/creator/...)。

14.3 冒烟结果(至少 /creator/orders 非 404

请求 鉴权 结果 说明
GET /v1/t/meipai_569/creator/orders 无 token 401 命中路由,返回缺失 token非 404
GET /v1/t/meipai_569/creator/orders 买家 token13800138000 403 命中路由,权限校验 非创作者(非 404
GET /v1/t/meipai_569/creator/orders 创作者 token13800000001 200 返回订单列表 JSON
GET /v1/t/meipai_569/creator/contents 创作者 token 200 返回分页结构(page/limit/total/items
GET /v1/t/meipai_569/creator/settings 创作者 token 200 返回频道设置对象

14.4 剩余风险

  1. 本轮为 Creator 路由恢复回归,重点覆盖“路由可达 + 鉴权行为 + 关键读接口”。
  2. 写接口(如内容编辑、成员审核、优惠券发放、提现)尚未逐一做 Action->DB 闭环,建议在下一轮专项回归补齐。