跳转至

电商系统测试实战

概述

本项目以常见电商业务为背景,训练从需求分析到测试报告输出的完整流程。它适合作为第一阶段综合项目,用来串联测试理论、接口测试、数据库校验、抓包联调和自动化测试。


新手导读

项目 说明
适合人群 已学完测试理论、SQL、接口基础,想练完整测试流程的新手
前置知识 测试点拆分、用例编写、Postman 基础、简单 SQL 查询
最终产出 测试范围、测试用例、接口检查点、数据库校验、缺陷记录、测试结论
跟练方式 先按页面主流程手工走通,再补异常场景,最后用接口和数据库验证关键结果
常见卡点 只看页面提示、不查数据库;用例步骤太粗;金额、库存、权限场景漏测

第一次练习时不要追求覆盖所有模块。先把“登录 -> 搜索商品 -> 加购物车 -> 创建订单”这条主流程讲清楚、测清楚,再逐步补支付、优惠券、后台管理等扩展场景。


一、项目背景

假设团队正在开发一个简化版电商系统,核心目标是支持用户浏览商品、加入购物车、提交订单并完成支付。测试人员需要在上线前完成主流程验证、异常场景覆盖和关键数据校验。

如果你是新手,可以先把电商系统理解成一句话:

用户找到想买的商品,把商品放进购物车,确认商品和金额后生成订单,最后完成支付。

测试人员要做的事,不是只点一遍页面,而是确认每一步在正常、异常、边界、权限和数据层面都没有明显问题。

业务角色

角色 主要行为
游客 浏览商品、搜索商品、查看商品详情
注册用户 登录、加购物车、下单、查看订单
管理员 管理商品、查看订单、处理库存

核心模块

模块 说明
用户模块 注册、登录、退出、Token 鉴权
商品模块 商品列表、搜索、详情、上下架
购物车模块 添加商品、修改数量、删除商品
订单模块 创建订单、取消订单、查询订单
支付模块 发起支付、支付回调、支付状态查询
库存模块 下单扣减库存、取消恢复库存

二、新手先搞懂三个概念

2.1 业务流程

业务流程就是用户完成一件事的步骤。以下单为例:

登录
搜索商品
进入商品详情
加入购物车
提交订单
支付或取消订单

你先能把这个流程讲清楚,再去写测试点。

2.2 测试点

测试点是“我要检查什么”。例如“加入购物车”可以检查:

  • 未登录能不能加购物车。
  • 商品下架后能不能加购物车。
  • 库存不足时能不能加购物车。
  • 重复添加同一商品,数量是否累加。
  • 加购成功后数据库有没有生成购物车记录。

2.3 测试用例

测试用例是把测试点变成可执行步骤。一个完整用例至少包含:

编号
模块
场景
前置条件
操作步骤
预期结果
优先级

测试点偏“想法”,测试用例偏“执行”。


三、需求分析

以“用户下单”为例,可以拆成下面的业务规则:

  1. 用户必须登录后才能创建订单。
  2. 商品必须处于上架状态。
  3. 商品库存必须大于购买数量。
  4. 订单金额应等于商品单价乘以数量,再叠加优惠、运费等规则。
  5. 创建订单成功后,库存应被扣减。
  6. 支付成功后,订单状态应变为已支付。
  7. 支付失败或超时后,订单状态不能误改为已支付。
  8. 取消未支付订单后,库存应恢复。

测试时不要只验证页面提示,还要关注接口响应、数据库状态、库存变化和订单状态流转。


四、从需求到测试点:完整示例

假设需求写的是:

用户登录后,可以把上架且有库存的商品加入购物车,并提交订单。订单创建成功后,系统扣减库存,订单状态为待支付。

新手不要急着写用例,先问问题:

问题 为什么要问
用户没登录怎么办 涉及鉴权
商品下架怎么办 涉及商品状态
库存不足怎么办 涉及边界和数据一致性
重复提交怎么办 涉及幂等和重复扣库存
创建订单失败时库存是否恢复 涉及事务一致性
用户能否查看别人订单 涉及越权

然后把问题转成测试点:

需求点 测试点
用户登录后才能下单 未登录下单、Token 过期下单、正常登录下单
商品必须上架 下架商品不可下单
商品必须有库存 库存为 0、库存不足、库存刚好等于购买数量
创建订单扣库存 订单成功后库存减少,订单失败后库存不变
订单状态待支付 创建后状态正确,不能直接变成已支付

最后再写测试用例。这个过程就是需求分析到测试设计的核心。


五、新手跟练步骤

按下面顺序练,不要跳步:

  1. 画出业务流程:登录、商品、购物车、订单、支付。
  2. 写出每个模块的正常流程。
  3. 为每个模块补异常场景。
  4. 为订单模块补数据一致性检查。
  5. 写 10 条 P0 测试用例。
  6. 选择 3 个核心接口用 Postman 调试。
  7. 写 2 个典型缺陷示例。
  8. 整理一份简短测试报告。

完成后,你应该能回答:

  • 为什么库存不足是 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. 查看订单详情和数据库订单记录。

预期结果也要具体:

错误写法:订单正常。
正确写法:订单创建成功,订单状态为待支付,订单金额正确,库存减少 1。

九、接口测试设计

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 上线建议

当前不建议直接上线。需要优先修复库存不足下单和订单越权问题,完成回归测试后再评估发布。


十三、练习任务

请按下面任务完成一轮练习:

  1. 自己补充 10 条购物车模块测试用例。
  2. 自己补充 10 条订单模块测试用例。
  3. 找出 3 个你认为最严重的风险,并说明原因。
  4. 用 Postman 调试登录、商品详情、创建订单 3 个接口。
  5. 写一份不少于 200 字的测试结论。

完成标准:

  • 用例步骤清楚,别人能照着执行。
  • 预期结果具体,不写“正常”“正确”这种模糊词。
  • 至少包含 1 个权限场景、1 个库存场景、1 个数据库校验场景。

十四、复盘与扩展

完成本项目后,可以继续扩展:

  1. 使用 Postman 完成核心接口 Collection。
  2. 使用 Python + Pytest 实现订单主流程自动化。
  3. 使用 Playwright 自动化登录、搜索、加购物车流程。
  4. 使用 JMeter 对商品查询和创建订单接口做基础压测。
  5. 将接口自动化接入 Jenkins 或 GitHub Actions。

项目实战的关键不是一次写完所有脚本,而是能把业务风险、测试设计、执行结果和问题定位说清楚。