买家门户与交易测试记录 迭代2 - xiaochu-dev/online-shopping-group5 GitHub Wiki

买家门户与交易测试记录(迭代 2)

日期:2026-10-22。对应代码:iter2-java @ c48a13a。 环境:Windows · JDK 17.0.20 · Maven 3.9.9 · Spring Boot 3.3.5 · SQLite(测试用临时库)。

本页记录 T2-13~T2-18 六个任务的全部自动化用例与真实页面证据。逐条结果由 Maven Surefire 原始报告直接渲染,未做筛选。

一、执行方式与全量结果

$env:JAVA_HOME="D:\Java\jdk-17"
& "...\mvn.cmd" -B test                                        # 全量 83 项
& "...\mvn.cmd" -B -Dtest=PortalFlowTest+SellerTradeFlowTest+MyOrdersFlowTest test   # 本模块 26 项

本次最后全量执行结束于 2026-10-22 10:00:83 项,失败 0、错误 0、跳过 0,BUILD SUCCESS。

全量自动化回归总览

测试类 模块 · 负责人 用例 失败 错误 耗时
AuthFlowTest 账号与客户 · 胡成溯 15 0 0 6.20s
BuyerAuthTest 买家账号 · 胡成溯 18 0 0 1.50s
CommonLayerTest 公共层 · 胡成溯 6 0 0 1.21s
ProductCenterTest 商品中心 · 黄程宇 14 0 0 4.50s
ProductMigrationTest 商品迁移 · 黄程宇 2 0 0 0.19s
SchemaIdempotencyTest 表结构幂等 · 黄程宇 2 0 0 1.77s
PortalFlowTest 买家门户 · 周到 14 0 0 3.05s
SellerTradeFlowTest 卖家交易 · 周到 9 0 0 1.87s
MyOrdersFlowTest 我的订单 · 周到 3 0 0 1.00s
合计 83 0 0

本模块 26 项 = 14 + 9 + 3,包含在全量 83 项之内。

必须用 JDK 17 跑

项目运行在 Java 17。用系统默认的 JDK 25 执行会整类失败,报错并不是用例本身:

MockitoException: Could not modify all classes [... BuyerContext]
Caused by: Java 25 (69) is not supported by the current version of Byte Buddy
           which officially supports Java 23 (67)

@MockBean BuyerContext 依赖 Mockito 改字节码,Byte Buddy 版本上限是 Java 23。此时 Surefire 会把整个类记成 Tests run: 1, Errors: 1,看起来像用例全红,实际一个都没执行。指定 JAVA_HOME 指向 JDK 17 即恢复正常。

二、本模块 26 条用例逐条结果

26 条用例实测结果

用例与任务的对应

任务 用例 断言什么
T2-13 列表 首页公开可访问且只显示在售商品 未登录 200、视图为 portal/product-list、model 有 pageResult/categoryTree/categoryNames;HTML 含在售商品名,不含已下架与交易中的商品
分类筛选只返回该分类商品 只出现该二级分类下商品
分页参数非法时回落到默认值而不报错 ?page=0&size=-5 仍 200,model 里 pageResult 正常生成,不抛异常
在售商品详情可访问且显示排队人数 200,含「当前有 N 人在排队」
已下架与不存在的商品详情返回 404 两种都 404,不区分(不泄露存在性)
交易中的商品详情可见但下单按钮不可用 200,含「该商品正在交易中,暂时无法提交意向」,不含提交表单 action
T2-14 搜索 关键词搜索命中名称也命中描述 名称匹配、描述匹配都能查到
关键词无匹配时显示空态提示 200,含空态文案,不含商品卡片
T2-15 提交意向 未登录提交意向跳买家登录页并带回跳地址 302 → /buyer/login?redirect= 且 redirect 含原商品路径
已登录下单成功并落库买家快照 302 回详情;库里 intent 行有 buyer_id 与联系方式快照
同一买家对同一商品重复提交被拒 第二次 302 回详情并带 error;该买家在该商品的未结束意向仍为 1 条
未填写交易地点时使用注册时的默认地点 落库地点 = 注册默认地点
已下架商品不接受新意向 302 回详情并带 error 参数,不进入排队
交易地点与默认地点都为空时拒绝下单 拒绝并提示补地点,不落库
T2-16 我的订单 未登录访问我的订单跳买家登录页 302 到登录页
只显示已有结果的订单且按交易时间倒序 进行中的不出现;两笔已结束按时间倒序
换号看不到别人的订单 换一个 buyer 登录后,HTML 不含他人商品
T2-17 卖家看客户 未登录访问意向管理被拦截到登录页 302 到 /login
卖家商品列表显示待处理意向数 每个商品显示待处理数,与库中 pending 计数一致
队列页只展示未结束的意向 已成功/已失败的意向不出现在队列
跳过队首确认被拒 跳过第 1 位直接确认第 2 位,被拒且状态不变
T2-18 确认交易 确认队首后进入交易中且商品冻结 intent.status=trading、商品 status=frozen,且库存仍为 3(此时不扣)
商品交易中不能同时开第二笔 第二笔确认被拒
标记交易成功订单结束且商品解冻 success、trade_result=success、finished_at 已落库;商品回 on_sale,库存 3 → 2 真实扣减
交易失败作废后商品回到在售且库存不动 failed 且记下失败原因,商品回 on_sale,库存仍是 2 不扣
交易失败可把买家塞回队尾 该买家重新排到队尾,位次不前移

三个测试类的设计取舍

做法 原因
每个类用独立 SQLite 临时库(target/test-portal-<时间戳>.db) 跑多少遍都互不污染,也不碰课程原库
登录态用 @MockBean BuyerContext 顶替 登录归账号与客户模块,门户只消费 current() 的结果;这样测的是"拿到身份之后门户做什么"
断言 HTML 片段而不只看状态码 例如交易中的商品必须能看到商品名,否则买家以为商品丢了;同时断言不含提交表单
类内用 @Order 递进 状态是链式的:先下单(10),才能验证重复提交被拒(11)

三、真实页面验证(本地 8080 实跑)

自动化之外,把系统真跑起来走了完整链路,逐页截图。以下图片均为实际页面,未做修饰。

浏览

商品列表:免登录可浏览

关键词搜索:命中名称与描述

分类筛选

详情:在售,显示排队人数

下单

未登录下单 → 跳登录并带回跳地址

已登录的下单表单

提交成功提示

交易

交易中的商品无法下单

我的订单:只显示已有结果的单

卖家:商品与未结束意向数

卖家:队列与三个动作

买家门户的 55 秒操作录屏见 周到-第2次个人汇报 第四章。

四、没有覆盖的部分

未覆盖 说明
同一件商品并发抢购 属商品中心库存范围,已在 商品中心测试记录-迭代2 用 5 个并发任务验证(库存 3 → 恰好 3 成功)
会话过期与登出 归账号与客户模块,门户只消费 BuyerContext.current()
真实支付、物流 不在迭代 2 的挑战需求 A 范围内
移动端与浏览器兼容 本迭代未作要求,模板按桌面宽度设计
卖家重复点击「确认」 现状是第二次点击被"商品交易中"规则拦下,有业务保护,但没有专门的幂等用例

五、源码位置


相关文档:买家门户与交易模块-迭代2(模块设计与路由表)、第2次阶段性评审报告、周到-第2次个人汇报

⚠️ **GitHub.com Fallback** ⚠️