🎄欢迎来到@边境矢梦°的csdn博文🎄
🎄追求开源思想和学无止境思想一直在提升技术的路上 🎄
🌈涉及的领域有:Java、Python、微服务架构和分布式架构思想、基本算法编程🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,让我们一起在变成的路上相伴而行🎆
本文主要记录自己的项目二手交易平台的测试过程和测试主要内容,该项目是基于SpringCloud、MybatisPlus、MySQL、Redis、Maven、docker、RabbitMQ实现的高效稳定的交易系统,不仅可以理解业务主要内容而且部分模块非常锻炼测试的能力和测试的技术提升。
一、环境搭建
在Linux上结合Docker进行环境的搭建
- 在Windows上安装VM虚拟机
- 使用VM安装CentOS7.6镜像
- 启动Linux系统并配置必要信息
- 在Linux中安装Docker
- 给Docker配置国内的镜像源
- 在Docker中下载必需的镜像
- 使用镜像生成容器方便后续的项目启动
ELK相关环境部署
- 在Docker中安装并运行Elasticsearch容器
- 在Docker中安装并运行Logstash容器,并进入容器内部,安装
json_lines
插件;- 在Docker中安装并运行Kibana容器
- 搭建完成就可以访问Kibana的界面了
其他需要的组件可以在Java的Maven中通过依赖的方式导入,Mysql使用Navicat进行操作,Redis使用RedisDesktopManager进行操作,MQ在Maven中进行依赖配置即可。
二、项目搭建
1. 准备工作
为了方便版本控制使用 git 进行项目托管
- 使用git在远程仓库先创建仓库,然后再将仓库克隆到本地文件夹
- 接下来本地文件夹中就会有一个.git 文件,说明我们克隆成功
新建项目
- 在克隆成功的文件夹下新建后台管理项目 STrade
- 打开IDEA在STrade文件下新建maven项目
快速搭建脚手架
- 为了方便开发和测试,使用当下最常用的微服务脚手架搭建项目(若依、人人fast)
- 将不用的模块删除,留下基本模块和 Mybatis-Plus 为了后续使用它的功能
创建需要的数据库和表
商品相关的表
管理系统中信息管理的相关表
2.列出项目业务模块
主要业务
- 搜索模块即ElasticSearch实现的搜索功能
- 秒杀模块,商品秒杀模块
- 数据同步模块即Canal将Mysql中的数据同步到ElasticSearch和Redis中
业务模块,模块之间的关系
- 登录模块/注册模块
- 购物车模块,商品添加到购物车
- 秒杀模块,需要登录并获取到秒杀链接,然后再生成订单
- 登录
- 生产订单
- 清除购物车
- 订单支付模块
- 搜索模块
测试的流程
- 需求评审
- 编写测试计划和测试方案
- 编写测试用例与评审
- 测试执行与BUG跟踪
- 编写测试报告
三、功能测试
基本要求:覆盖需求,需求文档,产品原型图,UI设计图,以用户角度测试软件的可见功能
设计步骤:需求分析 → 测试点 → 测试用例
1.登录测试
1. 账号:必填,已经注册手机号或邮箱2. 密码:必填,注册账号的密码
1、分析需求2、设计测试点,覆盖需求(维度参考质量模型)3、将测试点转为可执行用例文档4、执行测试5、缺陷管理(提交-验证-关闭)
1、划分有效等价类:满足需求的数据集合2、划分无效等价类:不满足需求的数据集合3、每类中选取代表数据
功能需求(测试点):
1、输入正确的用户名,正确的密码,验证是否登录成功
2、输入正确的用户名,不正确的密码,验证是否登录失败,并提示用户名或者密码不正确
3、输入不正确的用户名,正确的密码,验证是否登录失败,并显示提示信息正确
4、输入不正确的用户名,不正确的密码,验证是否登录失败,并显示提示信息正确
5、用户名和密码两者之一为空,验证是否登录失败,并显示提示信息正确
6、用户名和密码都为空,验证是否登录失败,并显示提示信息正确
编写测试用例
2.注册测试
需求说明与测试点
编写测试用例
等价类划分,测试用例尽量覆盖全部的有效等价类,每个无效等价类都需要一条测试用例
3.购物车测试
需求分析
测试用例
4.商品展示测试
测试项目 | 测试子项 | 测试步骤 | 预期结果 |
商品列表展示 - 信息完整性 | 商品图片显示 | 打开秒杀商品列表页面,查看每个商品的图片 | 所有商品图片显示正常,无加载失败、变形或模糊情况 |
商品列表展示 - 信息完整性 | 商品关键信息显示 | 查看每个商品是否显示名称、原价、秒杀价、剩余数量、秒杀开始和结束时间(如有) | 所有商品的上述关键信息完整显示,无信息缺失 |
商品列表展示 - 信息准确性 | 商品名称准确性 | 对比商品原始数据与列表中商品名称 | 商品名称与原始数据完全一致 |
商品列表展示 - 信息准确性 | 价格准确性 | 对比商品原价、秒杀价与预设值 | 原价和秒杀价与预设值相符 |
商品列表展示 - 信息准确性 | 数量准确性 | 对比商品剩余数量与实际库存情况 | 剩余数量与实际库存一致 |
商品列表展示 - 信息准确性 | 时间准确性 | 查看秒杀开始和结束时间格式与预设值 | 时间显示准确,格式符合习惯 |
商品列表展示 - 显示格式与布局 | 整体布局合理性 | 查看商品列表布局,注意商品间间距 | 布局合理,信息排列整齐、易于阅读,间距合适 |
商品列表展示 - 显示格式与布局 | 信息显示格式 | 查看商品信息字体大小、颜色等 | 字体大小、颜色统一且美观,特殊商品有标识 |
商品详情展示 - 信息完整性与准确性 | 商品描述完整性 | 进入商品详情页,查看商品描述内容 | 商品描述完整、通顺,包含关键信息,相关图片正常显示 |
商品详情展示 - 信息完整性与准确性 | 规格参数完整性 | 查看商品详情页规格参数部分 | 详细列出商品各项参数,参数值准确 |
商品详情展示 - 信息完整性与准确性 | 售后服务条款完整性 | 查看售后服务条款内容 | 退换货政策、保修期限、客服联系方式等内容清晰明确 |
商品详情展示 - 图片展示 | 主图和细节图质量 | 查看商品详情页主图和细节图 | 图片清晰、完整展示商品外观和细节,可放大查看(如有功能)且放大后质量好 |
商品详情展示 - 图片展示 | 图片加载速度 | 查看商品详情页图片加载情况 | 图片加载速度在可接受范围内 |
搜索框查询 - 搜索准确性 | 准确名称搜索 | 在搜索框输入商品准确名称 | 准确显示与输入名称相关的秒杀商品 |
搜索框查询 - 搜索准确性 | 关键词搜索 | 在搜索框输入商品关键词 | 准确显示与关键词相关的秒杀商品 |
搜索框查询 - 搜索准确性 | 品牌名搜索 | 在搜索框输入商品品牌名 | 准确显示该品牌的秒杀商品 |
搜索框查询 - 搜索准确性 | 多音字、同义词处理 | 在搜索框输入商品的多音字或同义词 | 能搜索到相应商品 |
搜索框查询 - 搜索结果排序 | 排序规则准确性 | 输入搜索词后,查看搜索结果排序情况;切换排序方式后再次查看 | 搜索结果按相关性、销量、价格等设定规则排序,切换排序方式后结果准确 |
搜索框查询 - 搜索提示功能 | 提示相关性 | 在搜索框输入部分关键词 | 显示与输入相关且有引导性的搜索提示 |
分类查询 - 分类准确性 | 一级分类准确性 | 点击不同的一级商品分类标签 | 准确筛选出该分类下的秒杀商品,无商品错分 |
分类查询 - 分类准确性 | 多级分类准确性 | 对于有多级分类的商品,点击各级分类标签 | 准确通过多级分类筛选出目标商品,层级关系正确 |
分类查询 - 全部分类显示 | 全部分类功能 | 点击“全部分类”选项(如有) | 正确显示所有秒杀商品,不受分类筛选影响 |
用例编号 | 测试项目 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 | 优先级 | 备注 |
1 | 商品列表展示 - 信息完整性 - 商品图片显示 | 查看商品列表中商品图片显示情况 | 1. 打开秒杀商品列表页面 | 所有商品图片正常显示,无加载失败、变形、模糊问题 | / | 未执行 | 高 | / |
2 | 商品列表展示 - 信息完整性 - 商品关键信息显示 | 检查商品列表中各商品关键信息完整性 | 1. 打开秒杀商品列表页面 | 所有商品关键信息完整显示,无缺失 | / | 未执行 | 高 | / |
3 | 商品列表展示 - 信息准确性 - 商品名称准确性 | 核对商品列表中商品名称准确性 | 1. 打开秒杀商品列表页面 | 商品名称与原始数据完全一致 | / | 未执行 | 高 | / |
4 | 商品列表展示 - 信息准确性 - 价格准确性 | 核对商品原价和秒杀价准确性 | 1. 打开秒杀商品列表页面 | 原价和秒杀价与预设值相符 | / | 未执行 | 高 | / |
5 | 商品列表展示 - 信息准确性 - 数量准确性 | 核对商品剩余数量准确性 | 1. 打开秒杀商品列表页面 | 剩余数量与实际库存一致 | / | 未执行 | 高 | / |
6 | 商品列表展示 - 信息准确性 - 时间准确性 | 核对商品秒杀开始和结束时间准确性 | 1. 打开秒杀商品列表页面 | 时间显示准确,格式符合习惯 | / | 未执行 | 高 | / |
7 | 商品列表展示 - 显示格式与布局 - 整体布局合理性 | 检查商品列表整体布局合理性 | 1. 打开秒杀商品列表页面 | 布局合理,信息排列整齐、易于阅读,间距合适 | / | 未执行 | 中 | / |
8 | 商品列表展示 - 显示格式与布局 - 信息显示格式 | 检查商品信息显示格式 | 1. 打开秒杀商品列表页面 | 字体大小、颜色统一且美观,特殊商品有标识 | / | 未执行 | 中 | / |
9 | 商品详情展示 - 信息完整性与准确性 - 商品描述完整性 | 检查商品详情页商品描述完整性 | 1. 在商品列表中点击一个商品进入详情页 | 商品描述完整、通顺,包含关键信息,相关图片正常显示 | / | 未执行 | 高 | / |
10 | 商品详情展示 - 信息完整性与准确性 - 规格参数完整性 | 检查商品详情页规格参数完整性 | 1. 在商品列表中点击一个商品进入详情页 | 详细列出商品各项参数,参数值准确 | / | 未执行 | 高 | / |
11 | 商品详情展示 - 信息完整性与准确性 - 售后服务条款完整性 | 检查商品详情页售后服务条款完整性 | 1. 在商品列表中点击一个商品进入详情页 | 退换货政策、保修期限、客服联系方式等内容清晰明确 | / | 未执行 | 高 | / |
12 | 商品详情展示 - 图片展示 - 主图和细节图质量 | 检查商品详情页主图和细节图质量 | 1. 在商品列表中点击一个商品进入详情页 | 图片清晰、完整展示商品外观和细节,可放大查看(如有功能)且放大后质量好 | / | 未执行 | 高 | / |
13 | 商品详情展示 - 图片展示 - 图片加载速度 | 检查商品详情页图片加载速度 | 1. 在商品列表中点击一个商品进入详情页 | 图片加载速度在可接受范围内 | / | 未执行 | 中 | / |
14 | 搜索框查询 - 搜索准确性 - 准确名称搜索 | 通过商品准确名称搜索商品 | 1. 在搜索框输入商品准确名称 | 准确显示与输入名称相关的秒杀商品 | / | 未执行 | 高 | / |
15 | 搜索框查询 - 搜索准确性 - 关键词搜索 | 通过商品关键词搜索商品 | 1. 在搜索框输入商品关键词 | 准确显示与关键词相关的秒杀商品 | / | 未执行 | 高 | / |
16 | 搜索框查询 - 搜索准确性 - 品牌名搜索 | 通过商品品牌名搜索商品 | 1. 在搜索框输入商品品牌名 | 准确显示该品牌的秒杀商品 | / | 未执行 | 高 | / |
17 | 搜索框查询 - 搜索准确性 - 多音字、同义词处理 | 通过商品多音字或同义词搜索商品 | 1. 在搜索框输入商品的多音字或同义词 | 能搜索到相应商品 | / | 未执行 | 中 | / |
18 | 搜索框查询 - 搜索结果排序 - 排序规则准确性 | 检查搜索结果排序规则准确性 | 1. 在搜索框输入搜索词 | 搜索结果按相关性、销量、价格等设定规则排序,切换排序方式后结果准确 | / | 未执行 | 高 | / |
19 | 搜索框查询 - 搜索提示功能 - 提示相关性 | 检查搜索提示相关性 | 1. 在搜索框输入部分关键词 | 显示与输入相关且有引导性的搜索提示 | / | 未执行 | 中 | / |
20 | 分类查询 - 分类准确性 - 一级分类准确性 | 通过一级分类标签筛选商品 | 1. 点击不同的一级商品分类标签 | 准确筛选出该分类下的秒杀商品,无商品错分 | / | 未执行 | 高 | / |
21 | 分类查询 - 分类准确性 - 多级分类准确性 | 通过多级分类标签筛选商品 | 1. 对于有多级分类的商品,点击各级分类标签 | 准确通过多级分类筛选出目标商品,层级关系正确 | / | 未执行 | 高 | / |
22 | 分类查询 - 全部分类显示 - 全部分类功能 | 使用全部分类功能显示所有商品 | 1. 点击“全部分类”选项(如有) | 正确显示所有秒杀商品,不受分类筛选影响 | / | 未执行 | 高 | / |
四、非功能测试
1.秒杀测试
业务描述:
- 秒杀活动开始之前有个活动倒计时,时间到了则会放开秒杀的权限,并生成一个验证码展示在前面页面,并把验证结果存在redis中,这里利用redis有过期时间的特性,也给验证码的缓存加了个过期时间。这里的redis缓存用的是redis的string类型。
- 在秒杀之前先要填一个验证码verifyCode,点击秒杀按钮时,先发送ajax请求到后台获取真实的秒杀地址path,这里秒杀地址是隐藏的,目的是防止有人恶意刷秒杀接口。所谓隐藏地址,其实是在请求地址中加一段随机字符串,这段字符串是变化的,因此秒杀请求地址是动态的;
- 先说下如何获取真实的秒杀地址,后台先访问redis,验证一下这个验证码有没有过期以及这个verifyCode是不是正确,验证码验证通过后,先删除这个验证码缓存,然后生成真实地址;
- 真实地址随机字符串由uuid以及md5加密生成,并且保存在redis中,并且设置了有效期;
- 从浏览器端向秒杀地址发起请求,带上path参数去后台调用真正的秒杀接口,下面是秒杀接口的逻辑;
- 访问redis,验证path有没有过期,以及是不是正确。这里验证path以及上面的校验验证码,都是用userId对应生成的一个key值去取redis中的数据;
- path验证通过后,先访问内存标识,看秒杀的这个商品有没有卖完,减少对redis的不必要访问。每一种参与秒杀活动的商品都在内存里用HashMap设置了一个标识,标识某个商品id商品是否卖完了。这里的是否卖完的内存标识设置以及每种参与秒杀商品的库存存入redis是在系统启动时做的;
- 如果内存标识中这个商品没有卖完,则要看这个用户在这次活动中是否重复秒杀,因为我们的秒杀规则是一个用户id对于某个商品id的商品只能秒杀一件。如何判断该用户有没有秒杀过这件商品呢,秒杀记录也保存在redis缓存中;
- 如果判断秒杀过则返回提示,如果没有秒杀过,继续;
- 上面说过系统加载时redis中保存了各商品对应的库存,这里用到redis的原子操作的方法decr,将对应商品的库存减1,此时数据库时的库存还没有减,因此是预减库存;
- desc方法返回该商品此时的库存,如果小于0,说明商品已经卖完了,此次秒杀无效,并且设置该商品的内存标识为true,表示已卖完;
- 正确地预减库存后,然后就要真正操作数据库了,数据库一般是性能瓶颈,比较耗时,因此决定用异步方式处理。对于每一条秒杀请求存入消息队列RabbitMQ中,消息体中要包含哪个用户秒杀哪个商品的信息,这里是封装了一个消息体类,这样一个秒杀请求就进入了消息队列,一个秒杀请求还没有完成,真正的秒杀请求的完成得要持久化到数据库,生成订单,减了数据库的库存才能算数,这时在客户端显示的一般是排队中,比如以前在抢购小米手机时,我就看到这样的展示,过一会再刷新页面就显示没抢到;
- 消息队列处理秒杀请求。先从消息体中解析出用户id和商品id,查数据库看这个商品是否卖完了,查数据库看该用户对于这个商品是否有过秒杀记录;数据库减库存,数据库生成订单,这两项持久化地写数据库操作放在同一个事务中,要么都执行成功,要么都失败。并把秒杀记录对象,包括秒杀单号、订单号、用户id、商品id,存入redis中。如果数据库减库存失败,表明商品卖完了,则要在redis中设置该商品已卖完的标识。
- 数据库减库存,数据库生成订单,这两项持久化地写数据库操作放在同一个事务中,要么都执行成功,要么都失败。并把秒杀记录对象,包括秒杀单号、订单号、用户id、商品id,存入redis中。如果数据库减库存失败,表明商品卖完了,则要在redis中设置该商品已卖完的标识。
- ajax发起秒杀请求,秒杀请求的处理逻辑最后也只是把这条请求放入消息队列,并不能返回是否秒杀成功的结果。因此,当秒杀请求正确响应后,即请求放入消息队列后,需要另外一个请求去轮询秒杀结果,秒杀成功的标志是生成秒杀订单,并把秒杀订单对象放入redis中。所以轮询秒杀结果,只用去轮询redis中是否有对应于该用户的该商品的秒杀订单对象,如果有,则表明秒杀成功,并在前台给出提示。
流程图:
设计秒杀场景的测试用例时,需要考虑以下几个方面:
- 并发场景:测试在高并发下系统的稳定性和性能。可以模拟多个用户同时参与秒杀活动,设置不同的线程数和请求间隔时间,测试系统的响应时间和吞吐量等指标。
- 库存场景:测试系统对库存的管理和控制。可以设置不同的库存数量和秒杀人数,测试系统是否能正常抢购并准确控制库存数量。
- 安全场景:测试系统的安全性。可以模拟攻击者对系统进行DDoS攻击或SQL注入等攻击方式,测试系统的抗攻击能力。
- 异常场景:测试系统处理异常情况的能力。可以模拟网络故障、服务器宕机、重启等异常情况,测试系统是否能够快速恢复和处理异常情况。
- 业务场景:测试系统对业务逻辑的处理能力。可以模拟不同的用户身份、优惠券使用、活动时间等不同的业务场景,测试系统的处理能力和正确性。
比如,可以设计以下测试用例:
- 在高并发场景下,测试系统的响应时间和吞吐量是否满足要求。
- 设置不同的库存数量和秒杀人数,测试系统是否能正常抢购并准确控制库存数量。
- 模拟攻击者对系统进行DDoS攻击或SQL注入等攻击方式,测试系统的抗攻击能力。
- 模拟网络故障、服务器宕机、重启等异常情况,测试系统是否能够快速恢复和处理异常情况。
- 模拟不同的用户身份、优惠券使用、活动时间等不同的业务场景,测试系统的处理能力和正确性。
压测秒杀接口
因为请求都要在登录的情况下才能进行,否则拦截器会直接重定向到登录页面,所以需要在请求时设置cookie信息,模拟已登录的用户,首先生5000个用户,并使用这5000个用户登录系统,将生成的用户电话号码和token写入文件;
使用 JMeter 来模拟同时有 5000 个用户,循环 10 次的情况。
请求默认值设置
token设置即将我们刚才生成的用户信息文件配置到Jmeter
秒杀接口的配置
执行结果:
2.安全性
测试需求
测试项目 | 测试子项 | 测试步骤 | 预期结果 |
用户认证与授权安全 - 登录认证 - 正常登录测试 | 正常登录 | 使用合法的用户名和密码登录秒杀系统 | 成功登录并进入相应用户界面 |
用户认证与授权安全 - 登录认证 - 错误密码测试 | 错误密码多次尝试 | 连续输入错误密码 | 达到一定次数后,系统提示账户锁定或限制登录,如提示“账户已锁定,请稍后再试” |
用户认证与授权安全 - 登录认证 - 密码复杂度测试 | 简单密码使用 | 尝试使用简单密码(如纯数字、长度过短等)注册或修改密码 | 系统提示密码不符合复杂度要求,如“密码必须包含字母、数字和特殊字符,长度至少为8位” |
用户认证与授权安全 - 登录认证 - 密码加密测试 | 查看密码存储 | 通过数据库查询工具查看存储用户密码的字段内容 | 密码以加密形式存储,无法直接识别原始密码内容 |
用户认证与授权安全 - 权限控制 - 普通用户权限测试 | 普通用户访问管理页面 | 以普通用户身份登录后,尝试访问管理员专属功能页面(如创建秒杀活动页面) | 系统拒绝访问,提示“权限不足”或跳转到其他合法页面(如用户个人中心) |
用户认证与授权安全 - 权限控制 - 管理员权限测试 | 管理员正常操作 | 以管理员身份登录,执行创建秒杀活动、管理商品等管理功能 | 操作成功,相应功能正常执行,如成功创建秒杀活动,商品信息准确更新 |
用户认证与授权安全 - 权限控制 - 权限升级测试 | 非法提升权限 | 通过修改 URL 参数或其他方式尝试将普通用户权限提升为管理员权限 | 系统拒绝访问,无权限提升情况发生,如提示“非法操作,权限不足” |
数据加密与传输安全 - 网络抓包 - 传输加密检查 | 网络抓包操作 | 使用 Wireshark 等网络抓包工具,在用户登录、提交订单时抓包 | 抓到的数据为加密信息,无法直接获取明文内容,若使用 HTTPS,可看到加密协议相关信息 |
数据加密与传输安全 - 网络抓包 - 证书验证 | 检查加密证书 | 查看抓包信息中的证书详情,尝试进行中间人攻击模拟 | 证书有效,系统能识别并拒绝中间人攻击,如显示证书验证通过,攻击请求被阻断 |
数据加密与传输安全 - 敏感数据加密 - 信息加密检查 | 查看存储和传输的敏感数据 | 检查用户个人信息和支付信息在存储(数据库)和传输(网络抓包查看)过程 | 数据以加密形式存在,无法直接获取明文,如姓名、银行卡号等信息加密存储和传输 |
数据加密与传输安全 - 敏感数据加密 - 加密强度验证 | 尝试破解加密数据 | 使用常见的加密破解工具或算法对加密数据进行破解尝试 | 在合理时间内无法破解加密数据,加密算法强度符合安全标准 |
防止 SQL 注入攻击 - 输入验证 - SQL 语句输入 | 在输入框输入 SQL 注入语句 | 在搜索框、商品评论等输入框输入类似“' OR 1=1 --”的语句 | 系统不执行恶意 SQL 语句,提示输入错误或正常处理,无数据泄露或异常行为 |
防止 SQL 注入攻击 - 输入验证 - 数据类型和长度验证 | 输入不符合要求的数据 | 输入不符合数据类型(如在数字字段输入字母)或超过长度限制的数据 | 系统提示输入错误,如“输入数据类型不匹配”或“输入长度超出限制” |
防止 SQL 注入攻击 - 参数化查询 - 检查查询方式 | 查看系统与数据库交互方式 | 检查代码或通过数据库监控工具查看系统与数据库交互的查询语句执行情况 | 系统使用参数化查询或存储过程,不存在拼接 SQL 语句的情况 |
防止 XSS 攻击 - 输入 - 脚本输入 | 输入含脚本内容 | 在用户名、商品描述等输入框输入“” | 系统对输入进行过滤或转义,页面不会弹出警告框,无脚本执行情况 |
防止 XSS 攻击 - 输入 - HTML 标签过滤 | 输入 HTML 标签 | 输入一些 HTML 标签(如、等) | 系统对标签进行过滤或转义,标签不会以 HTML 形式渲染,如显示原始标签内容,而不是加粗或斜体效果 |
防止 XSS 攻击 - 输出编码 - 特殊字符输出 | 查看输出数据 | 检查系统将用户输入的数据输出到页面时的情况,如显示用户评论 | 特殊字符(如<、>、&等)被正确编码,不会被浏览器解析为 HTML 或脚本元素 |
防止 CSRF 攻击 - 令牌验证 - 正常操作令牌检查 | 关键操作检查 | 在提交订单、修改密码等操作时查看系统是否有令牌生成和验证机制 | 系统生成唯一的 CSRF 令牌,每次操作验证令牌有效性,操作成功 |
防止 CSRF 攻击 - 令牌验证 - 伪造请求测试 | 跨站伪造请求 | 通过其他网站发起伪造的请求(模拟 CSRF 攻击) | 系统能识别并拒绝伪造请求,如提示“非法请求,CSRF 攻击检测” |
防止 CSRF 攻击 - Referer 检查 - 正常请求检查 | 查看 Referer | 正常访问秒杀系统并执行操作,查看请求头中的 Referer 信息 | Referer 信息与系统域名相关,显示合法的来源请求 |
防止 CSRF 攻击 - Referer 检查 - 非法请求检查 | 模拟非法 Referer 请求 | 通过修改请求头的 Referer 为其他域名后发起请求 | 系统拒绝请求,提示“非法 Referer,可能是 CSRF 攻击” |
系统漏洞扫描 - 专业工具扫描 | 全面漏洞扫描 | 使用 Nessus、OpenVAS 等工具对秒杀系统进行扫描 | 扫描报告列出发现的漏洞(如有),并提供详细的漏洞信息,如漏洞名称、位置、风险等级 |
系统漏洞扫描 - 手动审查 | 代码和配置审查 | 安全专家对系统代码、配置文件进行手动审查 | 发现潜在安全风险和漏洞(如有),如代码中的逻辑错误可能导致安全问题、配置不当的安全参数 |
压力测试下的安全性 - 高并发压力测试 - 安全表现观察 | 高并发模拟 | 使用 JMeter 等压力测试工具模拟大量用户同时访问和操作秒杀系统(如登录、抢购) | 在高并发情况下,系统无安全漏洞被利用的情况,如用户信息未泄露、订单未被篡改 |
压力测试下的安全性 - 资源耗尽测试 - 资源耗尽模拟 | 耗尽资源操作 | 通过大量请求使系统 CPU、内存、网络带宽等资源耗尽 | 系统有资源监控机制,在资源耗尽时不出现安全漏洞被利用的情况,如防止恶意攻击利用资源耗尽进行非法操作 |
测试用例
用例编号 | 测试项目 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 | 优先级 | 备注 |
1 | 用户认证与授权安全 - 登录认证 - 正常登录测试 | 使用合法凭证登录系统 | 1. 打开秒杀系统登录页面 | 成功登录,进入与用户角色对应的界面,如普通用户进入商品浏览页面,管理员进入管理后台首页 | / | 未执行 | 高 | 确保用户名和密码正确且为已注册账号 |
2 | 用户认证与授权安全 - 登录认证 - 错误密码测试 | 多次输入错误密码 | 1. 打开秒杀系统登录页面 | 在达到限制次数前,每次提示密码错误;达到限制次数后,系统提示账户锁定或限制登录,如显示“账户已锁定,请于[X]分钟后再试” | / | 未执行 | 高 | 记录每次提示信息和锁定情况 |
3 | 用户认证与授权安全 - 登录认证 - 密码复杂度测试 | 尝试使用简单密码注册或修改密码 | 1. 打开注册页面或密码修改页面(如有) | 系统提示密码不符合复杂度要求,如弹出“密码必须包含字母、数字和特殊字符,长度至少为8位”提示框 | / | 未执行 | 高 | 测试不同类型的简单密码情况 |
4 | 用户认证与授权安全 - 登录认证 - 密码加密测试 | 检查用户密码存储方式 | 1. 使用数据库管理工具连接到系统数据库 | 密码以加密形式存储,呈现为不可识别的密文,如乱码或经过哈希处理后的字符串 | / | 未执行 | 高 | 注意不要影响生产数据 |
5 | 用户认证与授权安全 - 权限控制 - 普通用户权限测试 | 普通用户访问管理员功能页面 | 1. 使用普通用户账号登录系统 | 系统拒绝访问,页面跳转到用户个人中心或显示“权限不足”的提示信息 | / | 未执行 | 高 | 可尝试多种管理员功能入口 |
6 | 用户认证与授权安全 - 权限控制 - 管理员权限测试 | 管理员执行管理功能 | 1. 使用管理员账号登录系统 | 相应管理功能执行成功,如成功创建带有正确参数的秒杀活动,商品信息准确更新,订单列表正确显示 | / | 未执行 | 高 | 检查每个功能的输入输出是否正确 |
7 | 用户认证与授权安全 - 权限控制 - 权限升级测试 | 非法提升权限 | 1. 使用普通用户账号登录系统 | 系统拒绝访问,提示“非法操作,权限不足”,无权限提升情况,如不能进入管理员功能页面或执行管理员操作 | / | 未执行 | 高 | 记录修改的参数和系统的响应 |
8 | 数据加密与传输安全 - 网络抓包 - 传输加密检查 | 检查用户操作过程中的数据加密情况 | 1. 打开网络抓包工具(如Wireshark) | 抓到的数据为加密信息,无法直接获取明文内容,若使用 HTTPS,可看到加密协议相关信息,如TLS握手过程 | / | 未执行 | 高 | 确保抓包工具设置正确 |
9 | 数据加密与传输安全 - 网络抓包 - 证书验证 | 验证加密证书有效性 | 1. 在网络抓包工具中查看加密证书详情 | 证书有效,系统能识别并拒绝中间人攻击,如抓包工具显示证书验证通过,中间人攻击请求被系统阻断,无数据泄露 | / | 未执行 | 高 | 注意模拟攻击的合法性和范围 |
10 | 数据加密与传输安全 - 敏感数据加密 - 信息加密检查 | 检查敏感数据的加密存储和传输 | 1. 使用数据库管理工具查看用户个人信息(姓名、地址等)和支付信息(银行卡号等)在数据库中的存储情况 | 数据以加密形式存在,无论是在数据库存储还是网络传输过程中,都无法直接获取明文,如银行卡号显示为加密后的字符串 | / | 未执行 | 高 | 注意保护敏感数据安全 |
11 | 数据加密与传输安全 - 敏感数据加密 - 加密强度验证 | 尝试破解加密数据 | 1. 使用常见的加密破解工具或算法(如针对哈希加密的彩虹表攻击工具)对加密的敏感数据进行破解尝试 | 在规定时间内无法破解加密数据,加密算法强度符合安全标准,如哈希值未被还原为原始密码 | / | 未执行 | 高 | 注意破解工具的合法性和使用环境 |
12 | 防止 SQL 注入攻击 - 输入验证 - SQL 语句输入 | 在输入框输入 SQL 注入语句 | 1. 打开秒杀系统的搜索框、商品评论等可输入的界面 | 系统不执行恶意 SQL 语句,提示输入错误(如“输入内容包含非法字符”)或正常处理(如搜索结果正常,未出现数据泄露),无异常行为(如数据库报错、数据被篡改) | / | 未执行 | 高 | 尝试不同类型的 SQL 注入语句 |
13 | 防止 SQL 注入攻击 - 输入验证 - 数据类型和长度验证 | 输入不符合要求的数据 | 1. 找到系统中数字类型输入框(如商品数量输入框),输入字母字符 | 系统提示输入错误,如在数字输入框输入字母时提示“输入数据类型不匹配”,在超过长度限制时提示“输入长度超出限制” | / | 未执行 | 高 | 测试多个不同类型和长度限制的输入框 |
14 | 防止 SQL 注入攻击 - 参数化查询 - 检查查询方式 | 查看系统与数据库交互方式 | 1. 通过查看系统代码(如果有权限)或使用数据库监控工具(如数据库自带的查询日志功能) | 系统使用参数化查询或存储过程,不存在拼接 SQL 语句的情况,如在查询日志中看到参数化的查询语句格式 | / | 未执行 | 高 | 确保监控工具不影响系统性能 |
15 | 防止 XSS 攻击 - 输入 - 脚本输入 | 在输入框输入 JavaScript 脚本 | 1. 打开秒杀系统的用户名、商品描述等可输入界面 | 系统对输入进行过滤或转义,页面不会弹出警告框,无脚本执行情况,输入内容以原始文本形式显示或经过安全处理后的形式显示 | / | 未执行 | 高 | 尝试不同类型的 JavaScript 脚本 |
16 | 防止 XSS 攻击 - 输入 - HTML 标签过滤 | 输入 HTML 标签 | 1. 在秒杀系统的可输入界面输入一些 HTML 标签,如、、等2. 查看页面显示情况 | 系统对标签进行过滤或转义,标签不会以 HTML 形式渲染,如输入的标签不会使文本加粗,而是以原始标签文本形式显示 | / | 未执行 | 高 | 测试多种 HTML 标签 |
17 | 防止 XSS 攻击 - 输出编码 - 特殊字符输出 | 检查系统输出用户输入数据的情况 | 1. 在秒杀系统的评论区输入包含特殊字符(如<、>、&、'、"等)的内容 | 特殊字符被正确编码,不会被浏览器解析为 HTML 或脚本元素,如<显示为<,>显示为> | / | 未执行 | 高 | 检查多个输出用户输入数据的页面 |
18 | 防止 CSRF 攻击 - 令牌验证 - 正常操作令牌检查 | 检查关键操作中的 CSRF 令牌机制 | 1. 打开秒杀系统,执行提交订单、修改密码等关键操作 | 系统生成唯一的 CSRF 令牌,每次操作验证令牌有效性,操作成功,如订单提交成功,密码修改成功 | / | 未执行 | 高 | 不同操作可能有不同的令牌位置 |
19 | 防止 CSRF 攻击 - 令牌验证 - 伪造请求测试 | 发起跨站伪造请求 | 1. 使用模拟 CSRF 攻击的工具或自行编写代码模拟从其他网站发起伪造的请求(针对提交订单、修改密码等关键操作) | 系统能识别并拒绝伪造请求,如提示“非法请求,CSRF 攻击检测”,关键操作未执行 | / | 未执行 | 高 | 注意模拟攻击的合法性和对其他系统的影响 |
20 | 防止 CSRF 攻击 - Referer 检查 - 正常请求检查 | 查看正常请求的 Referer 信息 | 1. 使用正常的浏览器访问秒杀系统,执行一些操作(如浏览商品、添加购物车等) | Referer 信息与系统域名相关,显示合法的来源请求,如显示秒杀系统的域名或相关子域名 | / | 未执行 | 高 | 不同浏览器可能显示方式略有不同 |
21 | 防止 CSRF 攻击 - Referer 检查 - 非法请求检查 | 模拟非法 Referer 请求 | 1. 使用工具修改请求头的 Referer 为其他域名后发起对秒杀系统关键操作(如提交订单)的请求 | 系统拒绝请求,提示“非法 Referer,可能是 CSRF 攻击”,关键操作未执行 | / | 未执行 | 高 | 注意修改 Referer 的工具使用方法 |
22 | 系统漏洞扫描 - 专业工具扫描 | 使用专业漏洞扫描工具全面扫描系统 | 1. 安装并配置 Nessus、OpenVAS 等专业漏洞扫描工具 | 扫描报告列出发现的漏洞(如有),并提供详细的漏洞信息,如漏洞名称、位置、风险等级,无扫描工具报错情况 | / | 未执行 | 高 | 扫描可能需要较长时间,注意扫描过程对系统的影响 |
23 | 系统漏洞扫描 - 手动审查 | 人工审查系统代码和配置 | 1. 安排安全专家对系统代码(包括前端、后端代码)进行逐行审查 | 发现潜在安全风险和漏洞(如有),如代码中的逻辑错误可能导致安全问题、配置不当的安全参数,审查过程有详细记录 | / | 未执行 | 高 | 安全专家需具备相关知识和经验 |
24 | 压力测试下的安全性 - 高并发压力测试 - 安全表现观察 | 在高并发情况下检查系统安全 | 1. 使用 JMeter 等压力测试工具,设置大量并发用户(如1000个以上) | 在高并发情况下,系统无安全漏洞被利用的情况,如用户信息未泄露、订单未被篡改,系统性能稳定,无崩溃或异常错误信息 | / | 未执行 | 高 | 压力测试可能对系统资源有较高要求 |
25 | 压力测试下的安全性 - 资源耗尽测试 - 资源耗尽模拟 | 模拟资源耗尽时的安全情况 | 1. 使用工具(如网络压力测试工具大量占用带宽、内存泄漏测试工具消耗内存等)使系统 CPU、内存、网络带宽等资源耗尽 | 系统有资源监控机制,在资源耗尽时不出现安全漏洞被利用的情况,如防止恶意攻击利用资源耗尽进行非法操作,系统可能有相应的保护措施(如自动限制部分功能) | / | 未执行 | 高 | 注意资源耗尽可能对系统造成的损害 |