在线购物系统首轮验收测试用例 - casf73/Software-Engineering-Practice GitHub Wiki
在线购物系统首轮验收测试用例
本文档列出首轮验收的 17 个测试用例:T01–T10 为后端自动化用例,U01–U07 为网页和持久化人工检查。现为每个用例建立 3 个独立测试实例,共 51 个实例;后端自动化执行其中 30 个功能实例,另校验全部 51 个实例文件的结构。
| 项目 | 单卖家排队购物系统 |
|---|---|
| 文档范围 | 首轮验收;自动化 T01–T10,人工检查 U01–U07 |
| 整理日期 | 2026 年 10 月 14 日 |
测试用例总览
T 类为后端自动化,U 类为网页与持久化人工检查;每个编号下均有 3 个具体实例。
| 编号 | 用例内容 |
|---|---|
| T01 | 卖家登录、鉴权和退出 |
| T02 | 商品校验、发布、编辑和单件限制 |
| T03 | 购买意向、口令码和先进先出队列 |
| T04 | 交易冻结与撤销边界 |
| T05 | 交易失败并作废 |
| T06 | 交易失败并重新排队 |
| T07 | 交易成功后的商品与意向收尾 |
| T08 | 卖家主动下架 |
| T09 | 图片上传与首轮单图限制 |
| T10 | 旧版多图记录的首轮展示 |
| U01 | 买家空状态与无图商品 |
| U02 | 买家表单与口令码查询 |
| U03 | 队列顺序与队首交易 |
| U04 | 冻结期间等待者与交易者的撤销 |
| U05 | 服务重启后的数据保留 |
| U06 | 页面上传限制与无图发布 |
| U07 | 桌面与窄屏页面显示 |
测试实例总览
下表的文件路径以 tests/验收测试数据 为起点。T09 每个实例目录还包含 sample.png、sample.jpg、invalid.txt 和 oversized.png;U 类 21 个实例经用户确认全部测试通过。
| 实例 | 输入或操作 | 预期结果 | 实例文件 |
|---|---|---|---|
| T01-01 | 错误密码与未登录拦截 | 未登录和错误密码均为 401;正确登录后可访问,退出后失效 | T01/第1个测试实例/instance.json |
| T01-02 | 另一组错误密码 | 错误密码不能创建会话;正确登录及退出流程正常 | T01/第2个测试实例/instance.json |
| T01-03 | 大小写错误密码 | 密码区分大小写,错误登录 401,退出后后台仍为 401 | T01/第3个测试实例/instance.json |
| T02-01 | 商品甲发布与编辑;价格 88 | 必填校验 400;单件限制 409;公开查询返回更新商品甲 | T02/第1个测试实例/instance.json |
| T02-02 | 商品乙发布与编辑;价格 99 | 发布状态 ON_SALE;编辑和公开查询一致 | T02/第2个测试实例/instance.json |
| T02-03 | 商品丙发布与编辑;价格 120 | 第二件商品被拒绝;首件编辑成功 | T02/第3个测试实例/instance.json |
| T03-01 | 138 号码三人队列;电话前缀 1380000000 | 唯一口令码;撤销、重排、作废后排位和有效性正确 | T03/第1个测试实例/instance.json |
| T03-02 | 139 号码三人队列;电话前缀 1390000000 | 按提交先后排队;撤销和作废使口令码失效 | T03/第2个测试实例/instance.json |
| T03-03 | 137 号码三人队列;电话前缀 1370000000 | 重新排队移至队尾并保留原口令码 | T03/第3个测试实例/instance.json |
| T04-01 | 138 号码冻结边界;电话前缀 1381000000 | 只选队首;交易者不能撤销,等待者可以撤销 | T04/第1个测试实例/instance.json |
| T04-02 | 139 号码冻结边界;电话前缀 1391000000 | 交易中拒绝新意向和直接下架 | T04/第2个测试实例/instance.json |
| T04-03 | 137 号码冻结边界;电话前缀 1371000000 | 等待者撤销后后续排位前移 | T04/第3个测试实例/instance.json |
| T05-01 | 138 号码失败作废;电话前缀 1382000000 | 商品恢复在售;失败买家原码失效;下一位仍排队 | T05/第1个测试实例/instance.json |
| T05-02 | 139 号码失败作废;电话前缀 1392000000 | 失败后不自动开始下一笔交易 | T05/第2个测试实例/instance.json |
| T05-03 | 137 号码失败作废;电话前缀 1372000000 | 卖家记录为 TRADE_FAILED,等待计数保持 | T05/第3个测试实例/instance.json |
| T06-01 | 138 号码失败重排;电话前缀 1383000000 | 原码继续有效;原买家回到队尾 | T06/第1个测试实例/instance.json |
| T06-02 | 139 号码失败重排;电话前缀 1393000000 | 另一位买家升为队首;商品恢复在售 | T06/第2个测试实例/instance.json |
| T06-03 | 137 号码失败重排;电话前缀 1373000000 | 重排后没有进行中交易 | T06/第3个测试实例/instance.json |
| T07-01 | 138 号码成交收尾;电话前缀 1384000000 | 成交商品下架;其余意向失败;所有口令码失效 | T07/第1个测试实例/instance.json |
| T07-02 | 139 号码成交收尾;电话前缀 1394000000 | 成交后可发布下一件商品 | T07/第2个测试实例/instance.json |
| T07-03 | 137 号码成交收尾;电话前缀 1374000000 | 卖家记录成功与失败状态正确 | T07/第3个测试实例/instance.json |
| T08-01 | 138 号码主动下架;电话前缀 1385000000 | 商品不可浏览;等待意向口令码失效 | T08/第1个测试实例/instance.json |
| T08-02 | 139 号码主动下架;电话前缀 1395000000 | 下架后可发布下一件商品 | T08/第2个测试实例/instance.json |
| T08-03 | 137 号码主动下架;电话前缀 1375000000 | 相关意向记录仍存在于后端数据库 | T08/第3个测试实例/instance.json |
| T09-01 | 红色样图上传 | JPG/PNG 可上传,错误格式与超 5 MB 被拒绝,商品只允许一张 | T09/第1个测试实例/instance.json |
| T09-02 | 绿色样图上传 | 上传后返回 /uploads/ 地址,双图关联返回 400 | T09/第2个测试实例/instance.json |
| T09-03 | 蓝色样图上传 | 文件类型、大小和单图限制均生效 | T09/第3个测试实例/instance.json |
| T10-01 | 旧数据两张图片;首图 /uploads/old-first-a.jpg | 公开接口仅返回第一张图片 | T10/第1个测试实例/instance.json |
| T10-02 | 旧数据另一组图片;首图 /uploads/old-first-b.png | 首轮接口不展示第二张图片 | T10/第2个测试实例/instance.json |
| T10-03 | 旧数据混合格式;首图 /uploads/old-first-c.jpg | 数据库旧记录保留,读取时限制为首图 | T10/第3个测试实例/instance.json |
| U01-01 | 没有商品的首页;清空当前商品后打开买家首页 | 显示空状态,不要求登录 | U01/第1个测试实例/instance.json |
| U01-02 | 无图商品页面;卖家发布不带图片的商品;刷新买家首页 | 显示商品信息和无图占位 | U01/第2个测试实例/instance.json |
| U01-03 | 有图商品页面;卖家发布一张图片的商品;刷新买家首页 | 只显示这一张图片 | U01/第3个测试实例/instance.json |
| U02-01 | 缺少姓名;姓名留空、电话填写后点击提交 | 页面阻止提交并提示姓名必填 | U02/第1个测试实例/instance.json |
| U02-02 | 缺少电话;填写姓名、电话留空后点击提交 | 页面阻止提交并提示电话必填 | U02/第2个测试实例/instance.json |
| U02-03 | 完整提交与查询;填写姓名电话并提交;保存口令码后凭码查询 | 口令码仅在成功提示中显示一次,可查询排位 | U02/第3个测试实例/instance.json |
| U03-01 | 两人顺序;两位买家依次提交;卖家查看侧边目录中的队列 | 后台依提交顺序显示两人 | U03/第1个测试实例/instance.json |
| U03-02 | 三人队首交易;三位买家依次提交;卖家点击开始交易 | 只有第一位买家进入交易 | U03/第2个测试实例/instance.json |
| U03-03 | 队首退出后的顺序;第二位买家撤销;卖家查看剩余队列 | 后续买家排位前移 | U03/第3个测试实例/instance.json |
| U04-01 | 等待者撤销;开始队首交易;等待买家凭码撤销 | 等待买家退出队列且原口令码失效 | U04/第1个测试实例/instance.json |
| U04-02 | 交易者撤销;开始队首交易;交易中买家尝试撤销 | 撤销被拒绝,交易仍保持 | U04/第2个测试实例/instance.json |
| U04-03 | 新买家提交;开始队首交易;新买家尝试提交意向 | 页面提示商品交易中,不接受新意向 | U04/第3个测试实例/instance.json |
| U05-01 | 商品重启保留;发布商品;停止并重启后端;重新打开买家页 | 当前商品仍存在 | U05/第1个测试实例/instance.json |
| U05-02 | 队列重启保留;两位买家提交;停止并重启后端;查询两人排位 | 原意向及队列顺序保留 | U05/第2个测试实例/instance.json |
| U05-03 | 口令码重启保留;记录有效口令码;停止并重启后端;凭原码查询 | 原码仍可查到同一意向 | U05/第3个测试实例/instance.json |
| U06-01 | 无图发布;卖家不选择图片并发布商品 | 商品可发布,买家页显示无图占位 | U06/第1个测试实例/instance.json |
| U06-02 | 选择第二张图片;先选择一张图片,再尝试增加第二张 | 页面只允许保留一张图片 | U06/第2个测试实例/instance.json |
| U06-03 | 非法图片与超限;选择 TXT 文件,再选择大于 5 MB 的图片 | 页面分别提示格式和大小错误 | U06/第3个测试实例/instance.json |
| U07-01 | 桌面买家页;设置浏览器宽度约 1440 像素;查看买家商品页 | 内容可读、按钮可操作 | U07/第1个测试实例/instance.json |
| U07-02 | 窄屏买家页;设置浏览器宽度约 375 像素;查看买家商品页 | 无横向遮挡,表单可操作 | U07/第2个测试实例/instance.json |
| U07-03 | 窄屏卖家页;设置浏览器宽度约 375 像素;查看卖家登录页和侧边目录 | 登录和菜单可操作,内容不重叠 | U07/第3个测试实例/instance.json |
执行记录说明
后端测试使用 MockMvc 和独立内存 H2 数据库。2026 年 10 月 14 日运行 30 个自动化功能实例及 1 个实例文件完整性检查,共 31 项通过、0 项失败。经用户确认,新增的 21 个 U 类页面与重启检查实例也已全部人工执行并通过。
自动化运行:在项目根目录执行 tests\run-tests.cmd;脚本进入 project\mvp-v1.0\backend 后运行 mvn test。测试实例文件位于 tests\验收测试数据,测试数据库不会清空日常运行数据。
后端自动化测试用例
T01–T10 对应 StoreFlowIntegrationTest.java 中的 10 个参数化测试方法,每个方法读取本用例的 3 份 instance.json 并分别执行;每个实例执行前清理独立测试数据库。
T01 卖家登录 鉴权和退出
测试目的:检查卖家后台的会话权限,防止未登录用户操作后台。
前置条件:使用独立测试数据库,初始未登录。
操作步骤:
-
未登录访问卖家工作台;使用错误密码登录。
-
使用正确账号密码登录,查询会话状态并访问工作台。
-
退出登录后,再使用原会话访问工作台。
预期结果:
• 未登录访问及错误密码登录均返回 401。
• 正确登录后 authenticated 为 true,工作台可访问。
• 退出接口返回 204,原会话再次访问工作台返回 401。
T02 商品校验 发布 编辑和单件限制
测试目的:验证商品必填项、正数价格以及同一时间只能上架一件商品。
前置条件:卖家已登录,当前没有商品。
操作步骤:
-
查询当前商品;分别用空名称、缺少价格、价格为 0 的数据尝试发布。
-
发布一件无图片商品,再尝试发布第二件。
-
编辑当前商品的名称和价格,随后通过公开接口查询商品。
预期结果:
• 无商品时查询返回 404;三种无效数据均返回 400。
• 首次发布成功且状态为 ON_SALE,图片列表为空;第二次发布返回 409。
• 编辑成功,公开接口读到修改后的名称。
T03 购买意向 口令码和先进先出队列
测试目的:检查提交、排位、撤销、重排和作废后的状态与口令码。
前置条件:卖家已登录且已发布一件在售商品。
操作步骤:
-
分别用空姓名、空电话提交意向。
-
甲、乙、丙依次提交,记录口令码并查询排位。
-
乙撤销意向;卖家将甲排到队尾,再作废丙。
预期结果:
• 无效数据返回 400;甲、乙、丙初始排位依次为 1、2、3。
• 乙撤销后口令码失效,丙升至第 2 位。
• 甲重排后原码有效,丙为第 1 位、甲为第 2 位;丙作废后原码失效,甲成为第 1 位。
T04 交易冻结与撤销边界
测试目的:保证交易只选队首,并区分交易中的买家和仍在等待的买家。
前置条件:商品在售,甲、乙、丙依次排队。
操作步骤:
-
卖家开启交易,查询甲及商品状态。
-
新买家丁尝试提交,甲尝试撤销,卖家尝试下架。
-
仍在等待的乙撤销,查询乙口令码及丙的排位。
预期结果:
• 系统自动选择甲;甲与商品均处于 IN_TRADE。
• 丁提交、甲撤销和交易中下架均返回 409。
• 乙可以撤销,原口令码失效;丙成为等待队列第 1 位。
T05 交易失败并作废
测试目的:确认失败后商品恢复在售,同时不会自动开始下一笔交易。
前置条件:甲正在交易,乙仍在等待。
操作步骤:
-
卖家将甲的交易登记为失败,并选择 VOID。
-
查询甲、乙口令码、商品状态和卖家工作台。
预期结果:
• 甲状态为 TRADE_FAILED,口令码失效。
• 乙仍可查询且排位为 1;商品恢复 ON_SALE;工作台无进行中的交易。
T06 交易失败并重新排队
测试目的:确认失败买家无需重新提交资料,原口令码继续使用。
前置条件:甲正在交易,乙仍在等待。
操作步骤:
-
卖家将甲的交易登记为失败,并选择 REQUEUE。
-
使用甲、乙原口令码查询状态、排位和商品状态。
预期结果:
• 甲恢复 WAITING,排到第 2 位且原码有效;乙为第 1 位。
• 商品恢复 ON_SALE,当前无进行中的交易。
T07 交易成功后的商品与意向收尾
测试目的:确认成交商品下架,未轮到买家的意向结束且口令码失效。
前置条件:甲正在交易,乙仍在等待。
操作步骤:
-
卖家登记甲交易成功。
-
查询当前商品及甲、乙口令码,并检查已保存的意向状态。
-
尝试发布下一件商品。
预期结果:
• 当前商品查询返回 404;甲为 TRADE_SUCCESS、乙为 TRADE_FAILED。
• 甲、乙口令码均失效;卖家可以发布下一件在售商品。
T08 卖家主动下架
测试目的:确认主动下架后商品不可继续浏览,相关口令码失效。
前置条件:商品在售,甲已有等待中的购买意向。
操作步骤:
-
卖家主动下架当前商品。
-
查询公开商品和甲的口令码,再发布下一件商品。
预期结果:
• 下架接口返回 204;公开商品查询返回 404,甲口令码失效。
• 卖家可以发布下一件在售商品。
T09 图片上传与首轮单图限制
测试目的:检查上传接口的文件类型、大小限制及商品图片数量限制。
前置条件:卖家已登录,已有一件在售商品。
操作步骤:
-
分别上传标记为 PNG、JPEG 的文件,记录返回地址。
-
编辑商品,先关联 1 张图片,再尝试关联 2 张。
-
分别上传 text/plain 文件和超过 5 MB 的 PNG 文件。
预期结果:
• PNG、JPEG 上传成功并返回 /uploads/ 开头的地址。
• 关联 1 张图片成功,关联 2 张返回 400。
• 不支持的类型和超大文件均返回 400。
T10 旧版多图记录的首轮展示
测试目的:检查已有多图记录在首轮接口中只展示第一张。
前置条件:卖家已发布商品;在测试数据库中模拟旧版多图记录。
操作步骤:
-
向商品记录写入两条旧图片地址。
-
调用公开接口查询当前商品的 images 列表。
预期结果:
• 接口只返回第一张图片地址,列表长度为 1。
• 本测试只断言接口返回内容,未检查磁盘文件清理。
网页与持久化人工检查用例
U01–U07 是页面与持久化人工用例,每项包含 3 个具体实例。经用户确认,共 21 个实例已完成测试并全部通过;逐项截图和执行时间未提供。
U01 买家空状态与无图商品
测试目的:检查商品发布前后的买家页面。
前置条件:浏览器可访问前端与后端;初始无当前商品。
操作步骤:
-
不登录打开买家首页。
-
卖家登录并发布无图片商品,刷新买家页面。
预期结果:
• 发布前显示空状态;发布后显示商品名称、价格和无图片占位。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U02 买家表单与口令码查询
测试目的:检查免注册提交的空值提示和口令码查询体验。
前置条件:已有在售商品。
操作步骤:
-
分别不填姓名或电话尝试提交。
-
填写完整信息后提交并保存口令码。
-
使用口令码查询排位。
预期结果:
• 空值有提示;提交成功后展示口令码;凭码能查询当前排位。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U03 队列顺序与队首交易
测试目的:检查后台展示顺序和卖家开启交易后的对象。
前置条件:已有在售商品。
操作步骤:
-
两位买家先后提交购买意向。
-
卖家查看后台队列并开启交易。
预期结果:
• 后台依次显示姓名、电话、提交时间和状态;只有队首进入交易。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U04 冻结期间等待者与交易者的撤销
测试目的:检查交易中不同买家的撤销权限与排位变化。
前置条件:一位买家正在交易,另一位买家仍在等待。
操作步骤:
-
让等待中的买家撤销。
-
让正在交易的买家尝试撤销,刷新页面查看排位。
预期结果:
• 等待者撤销成功并退出队列;交易者不能撤销;页面排位更新。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U05 服务重启后的数据保留
测试目的:检查文件型数据库重启后的持久化。
前置条件:已有商品及仍然有效的买家口令码。
操作步骤:
-
记录商品、有效意向及顺序。
-
关闭并重新启动后端,再凭原口令码查询。
预期结果:
• 商品、有效意向和排队顺序在重启后保留。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U06 页面上传限制与无图发布
测试目的:检查首轮图片数量、文件类型和大小提示。
前置条件:卖家已登录并打开商品编辑弹窗。
操作步骤:
-
选择一张图片后尝试再选第二张。
-
尝试上传错误格式和大于 5 MB 的图片。
-
移除图片或不选图片,尝试发布商品。
预期结果:
• 商品最多显示、保存一张图片;错误格式和超大图片有提示;无图片仍可发布。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。
U07 桌面与窄屏页面显示
测试目的:检查买家页、卖家登录页和后台侧边目录的基本可用性。
前置条件:前端页面可在浏览器中打开。
操作步骤:
-
分别使用桌面宽度和窄屏宽度查看三个页面。
-
检查文字、输入框、按钮和侧边目录。
预期结果:
• 内容可阅读,按钮可操作,无明显遮挡。
实际结果:通过(用户确认对应的 3 个实例均已测试通过)。