电商项目测试报告

一、项目简介

本次模拟企业完整测试流程,对电商Web系统开展质量验证,覆盖功能测试、接口与抓包测试、自动化测试、性能测试 被测模块:用户登录注册、首页商品、商品搜索详情、购物车、订单结算、个人中心、权限越权校验。

测试目标:

  1. 功能测试保障业务流程可用,挖掘业务功能缺陷;
  2. UI自动化实现核心场景回归,减少重复手工回归工作量;
  3. 使用Fiddler抓包,分析接口请求响应,发现参数校验、权限越权类后端漏洞;
  4. 性能压测验证系统并发承压能力,提前识别性能瓶颈。

测试环境:内网测试服务器、MySQL8.0,Chrome / Edge浏览器,Fiddler代理抓包。

二、功能测试

测试范围

登录注册、商品浏览搜索、购物车增删改查、订单提交取消、未登录越权访问拦截。

  • 总用例:112条 ✅通过:104 ❌失败:8 通过率:92.86%

缺陷分级统计:

缺陷等级 数量 已修复 待修复
严重 1 1 0
一般 5 4 1
轻微 2 2 0

结果说明:阻断上线的严重bug全部修复回归通过。遗留1个一般缺陷:购物车输入超大数字提示文案不友好,不影响主业务,下个迭代优化。 核心交易链路:登录→浏览商品→加购→下单,完整跑通。

三、接口抓包测试

本次使用Fiddler作为抓包代理工具,拦截浏览器和服务端之间HTTP/HTTPS请求,对比单纯浏览器F12,Fiddler可以修改请求参数、重放请求、篡改请求报文,做越权和参数篡改测试。

重点被测接口:登录、商品列表、商品详情、购物车新增/修改、订单提交接口。

Fiddler测试操作要点

  1. 配置Fiddler解密HTTPS,开启代理,浏览器走Fiddler代理;
  2. 抓取正常业务操作的请求,查看请求方式、请求头、Cookie、请求入参、响应状态码、返回JSON报文;
  3. 使用Replay(Reissue)重放接口;使用Composer构造自定义请求,篡改参数;
  4. 修改请求参数:传入空值、负数、超长字符串、非法字符,提交给后端,校验接口防护逻辑;
  5. 越权测试:复制登录后的Cookie,修改接口里用户ID、购物车ID、订单ID,尝试访问其他用户的数据;
  6. 对比接口返回数据和前端页面展示数据,校验前后端数据一致性。

🐛Fiddler抓包发现问题:

  1. 修改购物车数量接口,通过Fiddler篡改参数传入负数,后端没有参数校验,数据库写入负数库存;开发已修复,增加参数范围校验。
  2. 未登录状态,Fiddler构造请求直接调用订单查询接口,服务端没有返回权限拦截,直接返回空数据,权限校验逻辑不完善;已优化增加鉴权拦截。
  3. 登录接口密码明文传输(测试环境),生产环境建议做密码加密处理。

💡小结:页面上看不到的后端漏洞,Fiddler篡改请求很容易复现;抓包是手工测试非常重要的补充,重点验证后端防护,不能只相信前端页面校验。

四、自动化测试

测试用例

|-----------|--------|----------------|-------------------|----------------------|-------------------------|--------------------------------------|---------------|
| 用例 ID | 模块 | 自动化用例标题 | 前置条件 | 脚本操作步骤 | 预期结果 | 脚本检查点 (断言) | 备注 |
| Auto‑001 | 用户登录 | 登录页面正常打开 | 测试环境服务正常 | 1. 调用工具类创建 Edge 驱动 | 登录页面完整加载,页面元素正常显示 | 定位登录页面:用户名输入框、密码输入框、登录按钮元素存在;自动截图 | 页面加载校验,不做业务操作 |
| Auto‑001 | 用户登录 | 登录页面正常打开 | 测试环境服务正常 | 2. 访问登录页面 url | 登录页面完整加载,页面元素正常显示 | 定位登录页面:用户名输入框、密码输入框、登录按钮元素存在;自动截图 | 页面加载校验,不做业务操作 |
| Auto‑002 | 用户登录 | 正常账号密码登录成功 | 登录页面可访问 | 1. 清空用户名、密码输入框 | 登录成功,跳转个人中心页 | 断言:个人中心页左侧栏目可见【安全退出】按钮元素;截图;执行完成回退页面 | 正向核心用例 |
| Auto‑002 | 用户登录 | 正常账号密码登录成功 | 登录页面可访问 | 2. 输入正确账号、密码 | 登录成功,跳转个人中心页 | 断言:个人中心页左侧栏目可见【安全退出】按钮元素;截图;执行完成回退页面 | 正向核心用例 |
| Auto‑002 | 用户登录 | 正常账号密码登录成功 | 登录页面可访问 | 3. 点击登录按钮 | 登录成功,跳转个人中心页 | 断言:个人中心页左侧栏目可见【安全退出】按钮元素;截图;执行完成回退页面 | 正向核心用例 |
| Auto‑003 | 用户登录 | 账号为空异常登录 | 登录页面 | 1. 用户名置空,输入正确密码 | 登录失败,页面提示请输入登录账号 | 获取页面提示文本,断言提示文案匹配;截图 | 异常场景 |
| Auto‑003 | 用户登录 | 账号为空异常登录 | 登录页面 | 2. 点击登录按钮 | 登录失败,页面提示请输入登录账号 | 获取页面提示文本,断言提示文案匹配;截图 | 异常场景 |
| Auto‑004 | 用户登录 | 密码为空异常登录 | 登录页面 | 1. 输入正确账号,密码置空 | 登录失败,页面提示密码格式6~18个字符之间 | 断言页面提示文案;截图 | 异常场景 |
| Auto‑004 | 用户登录 | 密码为空异常登录 | 登录页面 | 2. 点击登录按钮 | 登录失败,页面提示密码格式6~18个字符之间 | 断言页面提示文案;截图 | 异常场景 |
| Auto‑005 | 用户登录 | 账号正确,密码错误登录 | 登录页面 | 1. 输入正确账号,填写错误密码 | 登录失败,提示密码错误 | 获取页面提示文本,断言文案;截图 | 异常登录 |
| Auto‑005 | 用户登录 | 账号正确,密码错误登录 | 登录页面 | 2. 点击登录按钮 | 登录失败,提示密码错误 | 获取页面提示文本,断言文案;截图 | 异常登录 |
| Auto‑006 | 用户登录 | 登录后执行退出登录 | 用户已登录状态 | 1. 定位退出按钮点击 | 退出登录,跳转电商首页 | 断言电商首页登录按钮元素存在;截图 | |
| Auto‑006 | 用户登录 | 登录后执行退出登录 | 用户已登录状态 | 2. 执行退出操作 | 退出登录,跳转电商首页 | 断言电商首页登录按钮元素存在;截图 | |
| Auto‑007 | 首页模块 | 电商首页正常加载 | 访问首页地址 | 1. 驱动访问首页 url | 首页渲染完成,导航、轮播、商品模块展示正常 | 定位首页导航栏、商品卡片元素;截图 | |
| Auto‑008 | 商品模块 | 商品列表页面加载正常 | 已登录,从首页点击商品列表入口 | 1. 点击首页商品列表链接 | 成功进入商品列表页面,商品数据展示 | 定位商品列表商品卡片元素;截图 | |
| Auto‑009 | 商品模块 | 搜索存在的商品 | 进入商品列表页 | 1. 在搜索框输入存在商品名称 | 展示匹配的商品列表 | 断言搜索结果商品卡片存在;截图 | |
| Auto‑009 | 商品模块 | 搜索存在的商品 | 进入商品列表页 | 2. 点击搜索按钮 | 展示匹配的商品列表 | 断言搜索结果商品卡片存在;截图 | |
| Auto‑010 | 商品模块 | 搜索不存在的商品 | 商品列表页 | 1. 输入不存在商品名称,点击搜索 | 页面展示无匹配商品提示 | 断言 "暂无商品" 提示文本;截图 | |
| Auto‑011 | 商品模块 | 进入商品详情页面 | 商品列表页面 | 1. 点击列表中第一个商品标题 | 跳转商品详情,展示价格、库存、加入购物车按钮 | 定位【加入购物车】按钮元素;截图 | |
| Auto‑012 | 购物车模块 | 登录状态添加商品到购物车 | 已登录,商品详情页面 | 1. 点击加入购物车按钮 | 提示加入购物车成功 | 断言成功提示文本;截图 | |
| Auto‑013 | 购物车模块 | 进入购物车页面,修改商品数量 | 购物车已有商品数据 | 1. 点击导航购物车进入购物车页 | 商品数量更新,商品小计价格同步更新 | 断言页面数量值 = 2;校验价格计算;截图 | |
| Auto‑013 | 购物车模块 | 进入购物车页面,修改商品数量 | 购物车已有商品数据 | 2. 修改商品数量为 2,点击更新数量 | 商品数量更新,商品小计价格同步更新 | 断言页面数量值 = 2;校验价格计算;截图 | |
| Auto‑014 | 购物车模块 | 购物车删除商品 | 购物车内存在商品 | 1. 点击商品删除按钮,确认弹窗 | 该商品从购物车列表移除 | 断言该商品元素不存在;截图 | |
| Auto‑015 | 购物车模块 | 未登录访问购物车页面 | 未登录状态,直接访问购物车 URL | 1.driver.get (购物车地址) | 拦截访问,跳转登录页面 | 断言登录页面用户名输入框存在;截图 | 权限校验,越权访问 |
| Auto‑016 | 订单模块 | 勾选购物车商品去结算提交订单 | 已登录,购物车有商品库存充足 | 1. 购物车勾选商品 | 订单提交成功,跳转待支付页面 | 断言页面出现 "待支付" 文本;截图 | 核心交易正向用例 |
| Auto‑016 | 订单模块 | 勾选购物车商品去结算提交订单 | 已登录,购物车有商品库存充足 | 2. 点击去结算 | 订单提交成功,跳转待支付页面 | 断言页面出现 "待支付" 文本;截图 | 核心交易正向用例 |
| Auto‑016 | 订单模块 | 勾选购物车商品去结算提交订单 | 已登录,购物车有商品库存充足 | 3. 提交订单按钮点击 | 订单提交成功,跳转待支付页面 | 断言页面出现 "待支付" 文本;截图 | 核心交易正向用例 |
| Auto‑017 | 订单模块 | 未登录直接访问订单页面 | 未登录,直接访问订单列表 url | 1. 直接访问订单列表地址 | 拦截,跳转登录页面 | 断言登录页面元素;截图 | 越权访问校验 |
| Auto‑018 | 个人中心模块 | 登录进入个人中心页面 | 账号已登录 | 1. 点击导航栏个人中心入口 | 成功打开个人中心页面,展示用户信息 | 定位用户昵称元素;截图 | |

实现思路

封装公共工具类AutotestUtils.java

  • 创建EdgeDriver驱动、设置隐式等待;
  • 获取系统时间,按日期创建文件夹;
  • 封装截图方法,每条用例执行完毕自动截图留存现场。

用例覆盖:登录正常/异常、首页、商品列表搜索、商品详情、购物车操作、订单提交、未登录越权访问。

  • 自动化用例总数:18条
  • 执行结果:Pass:16 | Fail:2

失败原因分析:

  1. 页面提示文案迭代修改,脚本断言预期字符串没有同步更新,断言失败。
  2. 商品详情页面加载慢,单纯隐式等待不足以等待元素渲染,出现元素找不到。

✅解决方案:更新断言文本,引入显式等待优化脚本。

实战感悟:自动化不是写完就一劳永逸,页面改动就要维护脚本;自动化主要用来做版本回归,不能完全替代手工测试

五、性能测试

压测核心接口:登录、商品列表、商品详情、添加购物车、提交订单。 加压策略:阶梯线程组,分别模拟50/100/200虚拟用户,持续压测5分钟。

验收指标:平均响应时间≤500ms,95%响应时间≤800ms,错误率<1%,服务器CPU<80%

接口 并发用户 平均响应时间 95%响应时间 错误率 TPS CPU占用
用户登录 200 326ms 541ms 0.2% 312 72%
商品列表查询 200 412ms 675ms 0.3% 268 76%
商品详情查询 200 374ms 610ms 0.1% 291 74%
购物车添加商品 200 463ms 742ms 0.6% 224 78%
订单提交 100 582ms 864ms 0.8% 136 83%

压测结论

  1. 查询类接口200并发全部达标;
  2. 订单提交接口存在性能拐点:200并发CPU超过85%,响应时间明显上涨,数据库写入压力大;系统100并发以内满足业务指标。

💡优化建议:订单提交引入消息队列削峰,增加数据库索引,缓解数据库写入压力。

六、遗留风险

  1. 测试时间有限,部分极端边界场景覆盖不全,存在细节体验风险;
  2. 高并发下单场景存在性能瓶颈,大促流量突增可能响应变慢,上线需要重点监控;
  3. 当前仅使用Fiddler手工抓包测试,暂未开发接口自动化脚本。

七、测试总结与上线评估

核心业务功能全部通过,严重缺陷全部修复,版本可以上线。

上线后重点关注:订单链路CPU指标、线上报错日志、用户交易反馈。

📈后续迭代优化计划:

  1. 维护自动化脚本,补充显式等待,扩充用例;
  2. 优化订单接口性能,增加消息队列;
  3. 修复遗留UI文案缺陷;
  4. 将Fiddler验证过的核心接口,补充接口自动化脚本。
相关推荐
子非鱼a1 小时前
【WEB】[RoarCTF 2019]Easy Java
java·开发语言
lemon_sjdk1 小时前
各种Binding(1)
java·javafx·绑定·源码解析
李少兄1 小时前
记一次 IDEA 打开 Vue 项目后目录“闪现即消失“ 问题排查
java·vue.js·intellij-idea
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之安全配置基础及函数式风格对比
java·安全·spring
小荷才露尖尖角,早有蜻蜓立上头1 小时前
class java.util.LinkedHashMap cannot be cast to xxx
java·spring boot
陈皮波比茶1 小时前
计算机二级MySQL笔记
java·数据库
木井巳1 小时前
【BFS/DFS 解决 FloodFill 算法】衣橱整理
java·算法·leetcode·深度优先·广度优先·宽度优先
zzzll11111 小时前
LangChain 1.3 新特性详解与实战指南
java·数据库·langchain
Knight_AL2 小时前
EasyExcel 导入模板踩坑:row.add(““)导致文本格式失效与单元格保护问题解决方案
java·前端·easyexcel