Files
yingqing/core/qa/test-reports/full-qa-2026-06-10.md
T
zycandClaude Fable 5 216a711291 后端生成闸+多项修复;前端全站更新;QA 审计与报告
后端:
- 新增 celery_health 生成前置闸——无 worker 在线时图片/视频生成入口
  一律 503,防"提交到 ARK 后无人轮询、结果悬空+额度冻结"的数据丢失
- 拼接导出:帧率跟随源众数、字幕逐句重映射、原声/BGM 混音修复
- 资金核算审计脚本 + genesis 账目回填 + 滞留预留清理命令
- 接入 yunqi provider 与豆包 TTS 模型(catalog/migrations/bootstrap 命令)

前端:全站页面更新(pipeline/library/products/projects/team/account 等),
新增共享 pager 分页组件

QA:刷新 function-audit 全量输出,新增 full-qa 报告
文档:BP 产品介绍资料、design/CLAUDE.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 10:06:15 +08:00

7.5 KiB

AirShelf/core 全站测试报告 · 2026-06-10

依据 test-agent.md 四层测试体系(A 代码 → B/E 浏览器 → D 端到端 → C 报告)。 数据策略:全真实数据(真实后端 127.0.0.1:8010 + 真实 SQLite,禁 mock)。 不重新生成视频(用户指定);其余链路全测,含团队 / 成员 / 消费多用户场景。

测试概览

范围 结果
A 代码 后端 Django test + 前端 tsc + vite build 后端 10/10(原 8 + 新增 2 充值权限回归)· tsc 0 错 · build 成功
B/E 浏览器 登录/工作台/商品/项目/资产/图片生成/团队/消费/消息/设置 + pipeline 五阶段 逐页控制台无 P0 报错,截图人审通过
D 端到端 多用户(owner+成员)权限 / 数据隔离 / 限额 / 账单归属 发现 1 个 P0 越权 bug 已修
E 移动端 iPhone 13 视口逐页 发现 2 个移动端 bug 已修

判定:首轮发现 9 个 bug(8 修复 + 1 确认非缺陷),全部复验通过。


Bug 清单(全部已修复并复验)

# 严重度 类型 描述 定位 复验
1 P0 权限越权 普通成员能给团队充值:POST /api/billing/recharge/ 只校验登录不校验角色,成员调用返回 201 并真实加钱(实测余额 ¥14906→¥15006) apps/billing/views.py:recharge 成员调用→403;owner→201;加回归测试 2 条
2 P1 功能缺失 设置页「退出登录」点确认无反应:onLogout 没从 App 传进 SettingsPage,确认按钮只关弹窗不退登 App.tsx + routes/settings.tsx 确认→清 token→跳 /login ✓
3 P1 移动端可用性 窄屏无法导航:@media(max-width:1100px) 把侧栏和收窄键都 display:none,移动端没有任何菜单入口 design-restraint.css + components/app-shell.tsx 新增汉堡键+抽屉+遮罩,点导航跳转并自动收起 ✓
4 P1 移动端布局 宽数据表被裁切:项目列表(715px)/成员表/账单表在窄屏溢出且无横向滚动,右侧列(状态/操作)点不到 design-restraint.css + projects/team/account.tsx overflow-x:auto 容器,表内横向滚动,页面不再侧滑 ✓
5 P2 文案 登录失败提示英文:错误密码/空提交弹后端原文 invalid credentials routes/auth-screen.tsx 映射成「邮箱或密码不正确」✓
6 P2 安全/体验 登录页预填设计稿假账号 li@shop.com / demo-1234,真实环境误导 routes/auth-screen.tsx 字段从空开始 + 前端必填校验 ✓
7 P2 体验 新建项目默认名固定 v1:连建多个项目重名,易混淆 routes/projects.tsx 按已有项目自动递增 v1→v2…实测「南卡·痛点种草·v2」✓
8 P2 体验 慢操作无反馈:新建项目「开始」、上传资产「上传资产」按钮点击后无 loading 态,用户疑似没点上 projects.tsx / library.tsx 加「创建中…」「上传中…」禁用态 ✓
9 P2 体验 建成员失败丢表单:用户名重复等失败时弹窗仍关闭并清空,要重填 routes/team.tsx 失败保留弹窗与已填内容,仅成功才清 ✓

移动端统计卡标签竖排("总/项/目")一并修复(加 .stat .lbl { white-space: nowrap })。


D 层 · 多用户 / 消费链路验证(真实数据)

验证项 方法 结果
建成员 团队页创建 qa-member-0610,月限额 ¥1 落库,成员表出现
成员登录 该成员凭证登录 进工作台,身份=成员、团队=同团队
数据共享(同团队) 成员可见团队 8 商品 TeamScopedViewSetMixin 按 team 过滤
数据隔离(跨团队) 各团队 product/project queryset 按 team 隔离 结构性强隔离
权限·改他人限额 成员 PATCH owner 限额 403
权限·建成员 成员 POST members 403
权限·充值 成员 POST recharge 修复前 201(bug#1),修复后 403
月限额拦截 _enforce_member_monthly_limit 限额 ¥1 ¥1 任务放行、¥2 拦截
账单归属 ledger 带 user/user_label,成员列消费可追溯 每笔扣费挂触发人

测试数据已清理:QA 成员已删、误充 ¥100 已回退(余额复原 ¥14906)、QA 测试商品/项目/音频资产均删除。


A 层 · 代码测试输出

后端:python manage.py test --settings=airshelf.settings.test
  Ran 10 tests — OK(新增 RechargePermissionTests: owner 可充值 / 成员 403 余额不变)
前端:tsc --noEmit → 0 errors
       vite build → 成功

环境

服务 状态 说明
后端 Django 127.0.0.1:8010 .venv/bin/python · SQLite · StatReloader 热载
前端 Vite 127.0.0.1:5173 真实 /api 代理
Playwright headed chromium MCP 驱动,iPhone 13 视口测移动端

资金核算深度审计(2026-06-11 补)

用户追问"数据流转、金额核算有没有出错"。写了核算审计脚本 qa/audit_billing.py,对真实 DB 17 个团队账户逐条验证 8 项账目不变量。

不变量 含义 结果
I1 余额=流水终点 account.balance == 末条动账流水 balance_after 全过
I2 冻结自洽 reserved_balance == Σ(ACTIVE 预留) 全过
I3 非负&可用 balance/reserved ≥ 0 且 balance ≥ reserved 全过
I4 预留闭环 reservation 状态与扣费/释放流水一致,扣费 ≤ 预留 全过
I5 失败不扣费 失败/取消 task 的预留不得为 CHARGED 全过
I6 无重复扣费 同 task 不得多扣(净额=预留) 全过
I7 逐笔差分自洽 每条 balance_after == 前一条 ± 本笔金额 全过
I8 流水完整 开户额度有 genesis 凭证(可从首条对账) 修复后全过

结论:金额核算零错误。 每个账户余额、冻结、逐笔差分账都精确自洽,无多扣/少扣/重复扣/冻结泄漏。

审计中查实的两件事

  1. 历史双扣(已自愈,账平):E2E 桥接测试团队 task 8b9745b8 在 2026-06-10 03:08:25 同秒两条 ¥1 扣费(并发竞态历史脏数据),但 06:32 已有一条 adjustment +¥1 回冲,净扣 ¥1=预留 ¥1。当前 charge_reserved_credit 已加 select_for_update 锁内重读幂等,不会复发。

  2. Bug #10(P1 可审计性)· 开户赠送额度不进流水:注册开户(accounts/serializers.py)给 DEFAULT_TRIAL_CREDITS 试用额度直接写进 balance,不记任何 ledger。后果:这笔钱在账单流水里查无凭证,无法对账、无法向用户解释余额来源(17 个账户全中)。

    • 余额数字本身没错(初始额度 + 流水净额 = 真实余额,逐团队核对分毫不差),纯属可审计性缺陷。
    • 修复:开户时补记一条 recharge 赠送流水(balance_after=赠送额),加回归测试 test_register_trial_grant_is_recorded_in_ledger;历史 17 个账户用 qa/backfill_genesis_ledger.py 回填 genesis 凭证(只补凭证,不动余额)。回填后审计 I8 全过。

复跑审计:cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development .venv/bin/python ../qa/audit_billing.py✓ 全部账户账目自洽,无金额核算错误。后端测试 11/11。


遗留 / 未测(用户指定跳过)

  • 视频生成 / 拼接导出:用户指定不重跑。pipeline 五阶段页面渲染、弹窗、控制台已查,生成动作本身未触发。
  • 真实第三方(火山 ARK / TOS)出图出片未联网触发。