一、项目简介
本次模拟企业完整测试流程,对电商Web系统开展质量验证,覆盖功能测试、接口与抓包测试、自动化测试、性能测试 被测模块:用户登录注册、首页商品、商品搜索详情、购物车、订单结算、个人中心、权限越权校验。
测试目标:
- 功能测试保障业务流程可用,挖掘业务功能缺陷;
- UI自动化实现核心场景回归,减少重复手工回归工作量;
- 使用Fiddler抓包,分析接口请求响应,发现参数校验、权限越权类后端漏洞;
- 性能压测验证系统并发承压能力,提前识别性能瓶颈。
测试环境:内网测试服务器、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测试操作要点
- 配置Fiddler解密HTTPS,开启代理,浏览器走Fiddler代理;
- 抓取正常业务操作的请求,查看请求方式、请求头、Cookie、请求入参、响应状态码、返回JSON报文;
- 使用
Replay(Reissue)重放接口;使用Composer构造自定义请求,篡改参数; - 修改请求参数:传入空值、负数、超长字符串、非法字符,提交给后端,校验接口防护逻辑;
- 越权测试:复制登录后的Cookie,修改接口里用户ID、购物车ID、订单ID,尝试访问其他用户的数据;
- 对比接口返回数据和前端页面展示数据,校验前后端数据一致性。
🐛Fiddler抓包发现问题:
- 修改购物车数量接口,通过Fiddler篡改参数传入负数,后端没有参数校验,数据库写入负数库存;开发已修复,增加参数范围校验。
- 未登录状态,Fiddler构造请求直接调用订单查询接口,服务端没有返回权限拦截,直接返回空数据,权限校验逻辑不完善;已优化增加鉴权拦截。
- 登录接口密码明文传输(测试环境),生产环境建议做密码加密处理。
💡小结:页面上看不到的后端漏洞,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
失败原因分析:
- 页面提示文案迭代修改,脚本断言预期字符串没有同步更新,断言失败。
- 商品详情页面加载慢,单纯隐式等待不足以等待元素渲染,出现元素找不到。
✅解决方案:更新断言文本,引入显式等待优化脚本。
实战感悟:自动化不是写完就一劳永逸,页面改动就要维护脚本;自动化主要用来做版本回归,不能完全替代手工测试。
五、性能测试
压测核心接口:登录、商品列表、商品详情、添加购物车、提交订单。 加压策略:阶梯线程组,分别模拟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% |
压测结论
- 查询类接口200并发全部达标;
- 订单提交接口存在性能拐点:200并发CPU超过85%,响应时间明显上涨,数据库写入压力大;系统100并发以内满足业务指标。
💡优化建议:订单提交引入消息队列削峰,增加数据库索引,缓解数据库写入压力。
六、遗留风险
- 测试时间有限,部分极端边界场景覆盖不全,存在细节体验风险;
- 高并发下单场景存在性能瓶颈,大促流量突增可能响应变慢,上线需要重点监控;
- 当前仅使用Fiddler手工抓包测试,暂未开发接口自动化脚本。
七、测试总结与上线评估
✅ 核心业务功能全部通过,严重缺陷全部修复,版本可以上线。
上线后重点关注:订单链路CPU指标、线上报错日志、用户交易反馈。
📈后续迭代优化计划:
- 维护自动化脚本,补充显式等待,扩充用例;
- 优化订单接口性能,增加消息队列;
- 修复遗留UI文案缺陷;
- 将Fiddler验证过的核心接口,补充接口自动化脚本。