第1次测试记录 - xiaochu-dev/online-shopping-group5 GitHub Wiki

第1次测试记录(交叉测试)

项目 内容
测试人 周到(产品经理)
被测人 胡成溯(组长)—— 卖家后台模块(FR-01 / FR-05 / FR-07 / FR-08)
测试日期 2026-10-07
测试方式 自动化(fastapi.testclient TestClient)+ 代码走查
测试依据 《需求规格说明书-第5组》第 6 章「MVP 功能验收清单」14 条
被测代码 main.py(后台路由)、auth.py(登录/会话/改密)
测试脚本 卖家后台/test_cross_review.py(本次新增,独立视角编写,非重复已有用例)

闭环互测规则:周到测胡成溯。此前 test_smoke 30/30、test_b_module 18/18、test_d_module 10/10 均已通过; 本次交叉测试为独立视角,按 14 条验收清单重新逐条对照,不重复已有测试。


一、验收清单对照表

序号 验收项 测试结果 测试要点说明
1 卖家登录 ✅ 通过 正确凭据(admin)登录返回 303 并签发 seller_session 签名 cookie,可进入后台;错误密码返回「用户名或密码错误」;未登录访问 /admin 被 303 重定向到 /login
2 商品发布 ✅ 通过 接口契约简测:POST /admin/product 发布后提示「商品发布成功」,商品进入 on_sale 在售状态(字段级校验由黄程宇模块测试覆盖,此处不重复)
3 商品浏览 ✅ 通过 买家无需登录访问 /product,可见商品名称、描述、价格(¥12.50 两位小数格式正确)
4 提交意向 ✅ 通过 缺姓名 / 缺电话均被「姓名与联系电话均为必填项」拦截且不入库;合法提交成功,8 位十六进制口令码当场显示,且与库中 token_code 一致
5 排队规则 ✅ 通过 3 个意向在后台按提交时间正序排列(甲→乙→丙);非队首请求进入交易被「仅队首」拒绝;后台仅队首「进入交易」按钮可点,其余禁用
6 撤销意向 ✅ 通过 凭口令码撤销中间意向成功,状态转 cancelled 并移出队列;后续意向位次自动前移,剩余队列保持正序
7 查看意向人 ✅ 通过 后台列表含「姓名 / 联系电话 / 提交时间」表头与对应数据,提交时间与库中 created_at 一致
8 冻结 ✅ 通过 手动冻结与进入交易自动冻结均生效(同一 frozen 状态);冻结期商品对买家仍可见并显示「商品交易中」;冻结期提交新意向被拒且不入库
9 解冻 ✅ 通过 手动解冻提示「商品已解冻,恢复在售」,状态恢复 on_sale,随后新意向提交成功
10 标记成功 ✅ 通过 标记成功后商品撤下转 delisted,写入 traded_at 与 final_result='成功';队首意向转 success;买家页显示「暂无商品在售」
11 标记失败 ✅ 通过 两个分支均验证:队列非空时队首转 failed、下一位自动递补为 trading、商品保持冻结;队列清空时商品恢复 on_sale
12 历史记录 ✅ 通过 造 6 条历史(1 条真实成交 + 5 条构造):列表按交易时间倒序,商品级字段(名称/价格/最终结果/发布时间/交易时间)完整;每页 5 条,第 2 页显示最早 1 条,页码「第 1/2 页(共 6 条)」正确;详情页商品级(名称/描述/价格/时间/结果)+ 意向人级(姓名/电话/提交时间/每人交易结果:成功/失败/已撤销)完整
13 修改密码 ✅ 通过 原密码错误被拒;7 位新密码被「不得少于 8 位」拒绝;合法修改成功后新密码可登录、旧密码失效;测完已改回 admin12345
14 范围核对 ✅ 通过 买家页、后台页、历史页 HTML 均无「评价」字样;对 main.py 路由表全量比对:15 个路由(13 个业务路由 + /static 挂载 + FastAPI 默认 /openapi.json,docs/redoc 已关闭)与预期完全一致,无 App/小程序/评价相关路由

汇总:14 通过 / 0 失败(共 14 项)。


二、bug 记录表

编号 发现问题 严重度 根因 处理
— 本轮未发现缺陷,14 条全部一次通过 — — —

测试说明:本次交叉测试按 14 条验收清单逐条独立设计场景(含撤销顺位前移、递补两分支、6 条历史翻页、改密回滚等此前用例未覆盖的组合路径),被测代码 main.py / auth.py 未做任何修改,全部一次通过。


三、结论

本次交叉测试(周到 → 胡成溯,卖家后台 FR-01/05/07/08)全部 14 条验收项一次通过,未发现缺陷。被测模块的登录鉴权、意向人管理、交易结果标记(含递补两分支)、历史记录(含分页与两级字段)均符合《需求规格说明书》第 6 章验收标准。测试后回归运行 test_smoke.py,结果 30/30 无回归。

残留风险与建议

  1. FR-06-6 与实现口径不一致(建议需求侧确认):SRS FR-06-6 字面为「卖家在交易进行中亦可手动解冻」,而实现约定交易进行中禁止解冻(services_state.py 的 unfreeze_product 主动拦截,代码中有设计说明:防止破坏「仅队首进入交易」的队列语义),本次交叉测试按实现口径验证通过。该行为更稳妥,但属于对需求条目字面的偏离,建议在第 2 次评审前与助教确认,并在 SRS 中补一条修订记录。
  2. 历史记录「倒序」时间字段:当前按交易时间(traded_at)倒序,与 SRS 第 8 章「待确认事项 #3」的暂定方案一致,待需求方正式确认。
  3. 建议下轮迭代补齐交易中禁止解冻这一约束在后台界面上的前置提示(当前为操作后报错提示,体验上可提前 disabled 置灰——后台已有 disabled 处理,属锦上添花项)。

尾注:测试脚本 test_cross_review.py 已入库(卖家后台目录),执行 python test_cross_review.py 可复跑复现;测试库写入系统临时目录,不污染交付数据;改密用例测完自动改回 admin12345。