电商系统测试实战¶
概述
本项目以常见电商业务为背景,训练从需求分析到测试报告输出的完整流程。它适合作为第一阶段综合项目,用来串联测试理论、接口测试、数据库校验、抓包联调和自动化测试。
新手导读¶
| 项目 | 说明 |
|---|---|
| 适合人群 | 已学完测试理论、SQL、接口基础,想练完整测试流程的新手 |
| 前置知识 | 测试点拆分、用例编写、Postman 基础、简单 SQL 查询 |
| 最终产出 | 测试范围、测试用例、接口检查点、数据库校验、缺陷记录、测试结论 |
| 跟练方式 | 先按页面主流程手工走通,再补异常场景,最后用接口和数据库验证关键结果 |
| 常见卡点 | 只看页面提示、不查数据库;用例步骤太粗;金额、库存、权限场景漏测 |
第一次练习时不要追求覆盖所有模块。先把“登录 -> 搜索商品 -> 加购物车 -> 创建订单”这条主流程讲清楚、测清楚,再逐步补支付、优惠券、后台管理等扩展场景。
一、项目背景¶
假设团队正在开发一个简化版电商系统,核心目标是支持用户浏览商品、加入购物车、提交订单并完成支付。测试人员需要在上线前完成主流程验证、异常场景覆盖和关键数据校验。
如果你是新手,可以先把电商系统理解成一句话:
测试人员要做的事,不是只点一遍页面,而是确认每一步在正常、异常、边界、权限和数据层面都没有明显问题。
业务角色¶
| 角色 | 主要行为 |
|---|---|
| 游客 | 浏览商品、搜索商品、查看商品详情 |
| 注册用户 | 登录、加购物车、下单、查看订单 |
| 管理员 | 管理商品、查看订单、处理库存 |
核心模块¶
| 模块 | 说明 |
|---|---|
| 用户模块 | 注册、登录、退出、Token 鉴权 |
| 商品模块 | 商品列表、搜索、详情、上下架 |
| 购物车模块 | 添加商品、修改数量、删除商品 |
| 订单模块 | 创建订单、取消订单、查询订单 |
| 支付模块 | 发起支付、支付回调、支付状态查询 |
| 库存模块 | 下单扣减库存、取消恢复库存 |
二、新手先搞懂三个概念¶
2.1 业务流程¶
业务流程就是用户完成一件事的步骤。以下单为例:
你先能把这个流程讲清楚,再去写测试点。
2.2 测试点¶
测试点是“我要检查什么”。例如“加入购物车”可以检查:
- 未登录能不能加购物车。
- 商品下架后能不能加购物车。
- 库存不足时能不能加购物车。
- 重复添加同一商品,数量是否累加。
- 加购成功后数据库有没有生成购物车记录。
2.3 测试用例¶
测试用例是把测试点变成可执行步骤。一个完整用例至少包含:
测试点偏“想法”,测试用例偏“执行”。
三、需求分析¶
以“用户下单”为例,可以拆成下面的业务规则:
- 用户必须登录后才能创建订单。
- 商品必须处于上架状态。
- 商品库存必须大于购买数量。
- 订单金额应等于商品单价乘以数量,再叠加优惠、运费等规则。
- 创建订单成功后,库存应被扣减。
- 支付成功后,订单状态应变为已支付。
- 支付失败或超时后,订单状态不能误改为已支付。
- 取消未支付订单后,库存应恢复。
测试时不要只验证页面提示,还要关注接口响应、数据库状态、库存变化和订单状态流转。
四、从需求到测试点:完整示例¶
假设需求写的是:
新手不要急着写用例,先问问题:
| 问题 | 为什么要问 |
|---|---|
| 用户没登录怎么办 | 涉及鉴权 |
| 商品下架怎么办 | 涉及商品状态 |
| 库存不足怎么办 | 涉及边界和数据一致性 |
| 重复提交怎么办 | 涉及幂等和重复扣库存 |
| 创建订单失败时库存是否恢复 | 涉及事务一致性 |
| 用户能否查看别人订单 | 涉及越权 |
然后把问题转成测试点:
| 需求点 | 测试点 |
|---|---|
| 用户登录后才能下单 | 未登录下单、Token 过期下单、正常登录下单 |
| 商品必须上架 | 下架商品不可下单 |
| 商品必须有库存 | 库存为 0、库存不足、库存刚好等于购买数量 |
| 创建订单扣库存 | 订单成功后库存减少,订单失败后库存不变 |
| 订单状态待支付 | 创建后状态正确,不能直接变成已支付 |
最后再写测试用例。这个过程就是需求分析到测试设计的核心。
五、新手跟练步骤¶
按下面顺序练,不要跳步:
- 画出业务流程:登录、商品、购物车、订单、支付。
- 写出每个模块的正常流程。
- 为每个模块补异常场景。
- 为订单模块补数据一致性检查。
- 写 10 条 P0 测试用例。
- 选择 3 个核心接口用 Postman 调试。
- 写 2 个典型缺陷示例。
- 整理一份简短测试报告。
完成后,你应该能回答:
- 为什么库存不足是 P0 场景。
- 为什么订单查询要测越权。
- 为什么创建订单成功后要查数据库。
- 为什么支付回调不能只看页面提示。
六、测试范围¶
本轮测试范围¶
| 范围 | 覆盖内容 |
|---|---|
| 功能测试 | 登录、商品查询、购物车、创建订单、取消订单 |
| 接口测试 | 核心接口正向、异常、鉴权、参数校验 |
| 数据库校验 | 用户、商品、购物车、订单、库存数据 |
| 兼容性测试 | 主流浏览器基础验证 |
| 安全测试 | 越权、未登录访问、敏感信息泄露 |
暂不覆盖范围¶
| 范围 | 原因 |
|---|---|
| 真实支付渠道 | 需要第三方沙箱或联调环境 |
| 大规模性能压测 | 第一阶段重点是功能和接口闭环 |
| 后台复杂运营规则 | 可作为后续扩展项目 |
七、测试点拆解¶
7.1 登录模块¶
| 类型 | 测试点 |
|---|---|
| 正常场景 | 正确账号密码登录成功 |
| 异常场景 | 密码错误、账号不存在、账号禁用 |
| 安全场景 | 密码是否明文传输、Token 是否过期 |
| 数据校验 | 登录成功后是否生成有效会话或 Token |
7.2 商品模块¶
| 类型 | 测试点 |
|---|---|
| 列表查询 | 默认排序、分页、分类筛选 |
| 搜索 | 关键词搜索、无结果、特殊字符 |
| 详情 | 商品名称、价格、库存、上下架状态 |
| 异常 | 查询不存在商品、下架商品不可购买 |
7.3 购物车模块¶
| 类型 | 测试点 |
|---|---|
| 添加商品 | 首次添加、重复添加、添加多个商品 |
| 修改数量 | 增加、减少、改为 0、超过库存 |
| 删除商品 | 删除单个商品、清空购物车 |
| 数据校验 | 购物车数量、金额和数据库记录一致 |
7.4 订单模块¶
| 类型 | 测试点 |
|---|---|
| 创建订单 | 单商品、多商品、库存充足 |
| 异常创建 | 未登录、库存不足、商品下架 |
| 状态流转 | 待支付、已支付、已取消、超时关闭 |
| 数据校验 | 订单金额、订单明细、库存扣减 |
八、测试用例设计¶
| 编号 | 模块 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|
| TC001 | 登录 | 正确账号密码登录 | 用户已注册且状态正常 | 输入账号密码并提交 | 登录成功,返回 Token | P0 |
| TC002 | 登录 | 密码错误 | 用户已注册 | 输入正确账号和错误密码 | 登录失败,提示账号或密码错误 | P0 |
| TC003 | 商品 | 商品详情查看 | 商品已上架 | 打开商品详情页 | 展示名称、价格、库存、图片 | P0 |
| TC004 | 购物车 | 添加上架商品 | 用户已登录,商品有库存 | 点击加入购物车 | 添加成功,购物车数量增加 | P0 |
| TC005 | 购物车 | 添加超过库存数量 | 用户已登录,库存为 5 | 添加数量 6 | 添加失败或提示库存不足 | P0 |
| TC006 | 订单 | 创建订单成功 | 用户已登录,购物车有商品 | 提交订单 | 订单创建成功,状态为待支付 | P0 |
| TC007 | 订单 | 未登录创建订单 | 用户未登录 | 调用创建订单接口 | 返回 401 或未登录提示 | P0 |
| TC008 | 订单 | 库存不足创建订单 | 商品库存不足 | 提交订单 | 创建失败,库存不扣减 | P0 |
| TC009 | 支付 | 支付成功回调 | 订单待支付 | 模拟支付成功回调 | 订单状态变为已支付 | P1 |
| TC010 | 订单 | 取消未支付订单 | 订单待支付 | 点击取消订单 | 状态变为已取消,库存恢复 | P1 |
用例怎么写得更清楚¶
新手常见问题是“步骤太粗”。例如:
更好的写法:
1. 使用正常账号登录系统。
2. 搜索库存充足的上架商品。
3. 将商品加入购物车。
4. 在购物车中勾选该商品并点击结算。
5. 确认收货地址和金额后提交订单。
6. 查看订单详情和数据库订单记录。
预期结果也要具体:
九、接口测试设计¶
9.1 核心接口清单¶
| 接口 | 方法 | 关注点 |
|---|---|---|
/api/login |
POST | 参数校验、Token、错误提示 |
/api/products |
GET | 分页、筛选、搜索 |
/api/products/{id} |
GET | 商品存在、上下架、库存展示 |
/api/cart |
POST | 鉴权、库存、重复添加 |
/api/orders |
POST | 鉴权、库存扣减、金额计算 |
/api/orders/{id} |
GET | 订单归属、越权访问 |
/api/orders/{id}/cancel |
POST | 状态校验、库存恢复 |
9.2 创建订单接口用例¶
| 场景 | 请求数据 | 预期 |
|---|---|---|
| 正常下单 | 有效商品、数量小于库存 | 返回订单号,状态为待支付 |
| 未登录下单 | 不带 Token | 返回 401 |
| 商品不存在 | 商品 ID 不存在 | 返回商品不存在 |
| 商品下架 | 商品状态为下架 | 返回商品不可购买 |
| 库存不足 | 购买数量大于库存 | 返回库存不足 |
| 重复提交 | 同一请求短时间重复提交 | 不应重复扣库存或重复创建订单 |
9.3 断言重点¶
接口测试不要只断言状态码,还要断言:
- 响应业务码是否正确。
- 错误信息是否明确。
- 订单金额是否正确。
- 库存是否按预期变化。
- 用户是否只能访问自己的订单。
十、数据库校验¶
10.1 常见表设计¶
| 表 | 用途 |
|---|---|
users |
用户信息 |
products |
商品信息 |
cart_items |
购物车明细 |
orders |
订单主表 |
order_items |
订单明细 |
inventory |
库存信息 |
10.2 校验 SQL 示例¶
-- 查询订单主表
SELECT id, user_id, status, total_amount
FROM orders
WHERE id = 10001;
-- 查询订单明细
SELECT order_id, product_id, quantity, price
FROM order_items
WHERE order_id = 10001;
-- 查询商品库存
SELECT product_id, stock
FROM inventory
WHERE product_id = 20001;
10.3 数据校验重点¶
| 场景 | 校验点 |
|---|---|
| 创建订单成功 | 订单主表、订单明细、库存扣减一致 |
| 创建订单失败 | 不应生成脏订单,不应扣减库存 |
| 支付成功 | 订单状态、支付时间、支付流水一致 |
| 取消订单 | 订单状态取消,库存恢复 |
数据库校验怎么做¶
新手可以按“操作前查一次、操作后查一次”的方式练:
Step 1:下单前查询商品库存,例如库存是 10。
Step 2:提交 1 件商品订单。
Step 3:下单后再次查询库存,应该变成 9。
Step 4:查询订单表,应该新增一条待支付订单。
Step 5:查询订单明细表,商品 ID、数量、价格应该正确。
如果接口返回成功,但数据库没有变化,说明可能存在数据写入问题。
如果数据库变化了,但接口返回失败,说明可能存在事务或异常处理问题。
十一、缺陷示例¶
缺陷 1:库存不足仍能创建订单¶
| 字段 | 内容 |
|---|---|
| 标题 | 库存不足时仍能创建订单并扣减库存 |
| 严重级别 | 严重 |
| 前置条件 | 商品库存为 1 |
| 复现步骤 | 登录用户,购买数量输入 2,提交订单 |
| 实际结果 | 订单创建成功,库存变为负数 |
| 期望结果 | 提示库存不足,不创建订单,不扣库存 |
| 定位建议 | 检查创建订单接口的库存校验和事务处理 |
缺陷 2:用户可查看他人订单¶
| 字段 | 内容 |
|---|---|
| 标题 | 修改订单 ID 后可查看其他用户订单详情 |
| 严重级别 | 严重 |
| 前置条件 | 用户 A 和用户 B 均存在订单 |
| 复现步骤 | 用户 A 登录后请求用户 B 的订单 ID |
| 实际结果 | 返回用户 B 的订单详情 |
| 期望结果 | 返回无权限或订单不存在 |
| 定位建议 | 检查订单查询接口是否校验 user_id 归属 |
十二、测试报告示例¶
12.1 执行概况¶
| 项目 | 结果 |
|---|---|
| 测试范围 | 登录、商品、购物车、订单、支付回调 |
| 用例总数 | 80 |
| 执行通过 | 72 |
| 执行失败 | 6 |
| 阻塞 | 2 |
| 严重缺陷 | 2 |
| 一般缺陷 | 4 |
12.2 风险结论¶
- 订单创建存在库存一致性风险,需要修复后回归。
- 订单详情存在越权访问风险,属于上线阻塞问题。
- 支付回调异常场景覆盖不足,需要补充超时、重复回调和签名错误场景。
12.3 上线建议¶
当前不建议直接上线。需要优先修复库存不足下单和订单越权问题,完成回归测试后再评估发布。
十三、练习任务¶
请按下面任务完成一轮练习:
- 自己补充 10 条购物车模块测试用例。
- 自己补充 10 条订单模块测试用例。
- 找出 3 个你认为最严重的风险,并说明原因。
- 用 Postman 调试登录、商品详情、创建订单 3 个接口。
- 写一份不少于 200 字的测试结论。
完成标准:
- 用例步骤清楚,别人能照着执行。
- 预期结果具体,不写“正常”“正确”这种模糊词。
- 至少包含 1 个权限场景、1 个库存场景、1 个数据库校验场景。
十四、复盘与扩展¶
完成本项目后,可以继续扩展:
- 使用 Postman 完成核心接口 Collection。
- 使用 Python + Pytest 实现订单主流程自动化。
- 使用 Playwright 自动化登录、搜索、加购物车流程。
- 使用 JMeter 对商品查询和创建订单接口做基础压测。
- 将接口自动化接入 Jenkins 或 GitHub Actions。
项目实战的关键不是一次写完所有脚本,而是能把业务风险、测试设计、执行结果和问题定位说清楚。