软件测试--性能测试实战篇
项目介绍和部署
1. 轻商城项目介绍
1.1 背景
轻商城项目是一个现在流行的电商项目。我们需要综合评估该项目中各个关键接口的性能,并给出优化建议,以
满足项目上线后的性能需要。
1.2 简介
- 轻商城是一个支持web和微信小程序的前后端分离架构的项目。
- 前端使用VUE技术框架开发,即支持微信小程序,也支持手机移动端,还支持web页面。
- 后端使用了SpringBoot框架进行开发,MySQL做数据库。
- 目前还在开发完善阶段。
2. 项目功能架构
-
前台商城:
- 首页
- 专题列表、专题详情
- 分类列表、分类详情
- 品牌列表、品牌详情
- 新品首发、人气推荐
- 优惠券列表、优惠券选择
- 团购
- 搜索
- 商品详情、商品评价、商品分享
- 购物车
- 下单
- 订单列表、订单详情、订单售后
- 地址、收藏、足迹、意见反馈
- 客服
-
后台管理系统:
- 会员管理
- 商城管理
- 商品管理
- 推广管理
- 系统管理
- 配置管理
- 统计报表
3. 项目技术架构
技术栈
- 前端:VUE技术框架开发,支持微信小程序、手机移动端、web界面
- 后端:SpringBoot框架开发,MySQL做数据库
技术架构图
4. 熟悉数据库设计
作用:
- 性能测试时,监控数据库的性能指标,定位bug
- 构造测试数据
5. 轻商城项目搭建
5.1 准备工作
- 安装JDK
- 安装MySQL
- 安装Nginx
- 安装node.js
5.2 项目搭建步骤
- 获取项目源代码
- 包括前端代码和后端代码
- 实际工作当中项目源代码由开发提供,项目所需要的配置文件、启动项目的顺序也由开发提供文档介绍
- 构建轻商城后端代码
- 编译、打包
- 打包成jar包或war包
- 构建前端代码
- 使用node.js打包
- 部署包中包含HTML、JS、CSS等文件
- 初始化MySQL数据库
- 项目启动前需要先初始化数据库
- 执行初始化数据库的sql文件
source /usr/local/litemall/litemall-db/litemall.sql
- 启动轻商城后台管理系统的后端服务
java -jar litemall-all.jar
- 部署轻商城前端服务
- 可以使用Nginx服务器
- 通过浏览器访问启动的前端,测试项目是否能够正常运行
性能测试需求分析
1. 性能测试需求分析
- 性能测试需求分析与传统的功能测试需求有所不同
- 功能测试需求分析:重点在于分析被测系统的功能是否满足产品功能需求规格(正向、逆向)
- 性能测试需求分析:重点在于分析被测系统是否能满足特定的业务需求场景(时间、资源)
- 需要从业务场景、程序代码、服务器、硬件配置等多个维度分析系统可能存在性能瓶颈
1.1 如何获取有效的需求
- 客户方提出
- 能够提出明确需求的一般是金融、银行、电信、医疗等企业,他们一般对系统的性能要求高,并且对性能也非常了解
- 提示:需要评估性能需求的合理性
- 根据历史数据分析
- 通过分析历史运营数据收集用户信息,如:注册用户数、日活、月活,计算用户的增长速度
- 每月、每周、每天的峰值业务量是多少
- 用户频繁使用的功能模块是哪些
- 竞品分析:
- 对比同类型软件的性能指标结果
2. 性能测试点的提取
2.1 性能测试点的提取规则
业务维度提取:
- 用户频繁使用的业务功能
- 非常关键的业务功能
- 特殊交易日或峰值交易的业务功能
- 核心业务发生重大调整的业务功能
技术维度提取:
- 资源占用非常高的业务功能
2.2 轻商城性能测试点的提取
编号 | 功能模块 | 业务功能 | 功能描述 | 优先级 |
---|---|---|---|---|
T01 | 登录 | 登录 | 用户通过用户名和密码登录 | 高 |
T02 | 首页 | 进入首页 | 获取商城首页数据 | 高 |
T03 | 商品 | 搜索商品 | 通过关键字搜索商品 | 高 |
T04 | 商品 | 查看商品详情 | 点击商品进入商品详情页面 | 高 |
T05 | 购物车 | 添加购物车 | 把商品加入购物车 | 高 |
T06 | 购物车 | 查看购物车 | 用户查看购物车内的商品 | 高 |
T07 | 订单 | 商品结算 | 对已选择的商品进行结算 | 高 |
T08 | 订单 | 提交订单 | 用户提交商品订单 | 高 |
T09 | 订单 | 查看我的订单 | 用户查看订单列表 | 高 |
3. 确定性能测试目标
轻商城作为一个新开发的项目,性能测试目标包括:
- 确定核心业务功能的TPS
- 对业务流程(多接口组合)进行压测
- 系统能在实际系统运行压力的情况下,稳定的运行24小时
期望的TPS和最大响应时间:
编号 | 功能模块 | 业务功能 | TPS | 响应时间 |
---|---|---|---|---|
T01 | 登录 | 登录 | 20 | 3s |
T02 | 首页 | 进入首页 | 100 | 5s |
T03 | 商品 | 搜索商品 | 40 | 3s |
T04 | 商品 | 查看商品详情 | 100 | 3s |
T05 | 购物车 | 添加购物车 | 20 | 3s |
T06 | 购物车 | 查看购物车 | 20 | 3s |
T07 | 订单 | 商品结算 | 10 | 3s |
T08 | 订单 | 提交订单 | 10 | 3s |
T09 | 订单 | 查看我的订单 | 40 | 2s |
性能测试计划
- 测什么
- 测试目的,测试范围
- 谁来测
- 测试的人工、进度、时间安排
- 怎么测
- 使用什么方法来进行
1. 测试背景
轻商城是公司新开发的一个电商项目,为了保证项目上线后能够稳定的运行,且在后期推广中能够承受用户的增长,需要对项目
进行性能测试。
2. 测试目的
对新电商项目进行性能测试的核心目的包括:
- 确定核心业务功能的TPS
- 对业务流程(多接口组合)进行压测
- 系统能在实际系统运行压力的情况下,稳定的运行24小时
3. 测试范围
通过对性能测试需求的调研和分析,确定被测系统的测试范围如下
编号 | 功能模块 | 业务功能 | 功能描述 | 优先级 |
---|---|---|---|---|
T01 | 登录 | 登录 | 用户通过用户名和密码登录 | 高 |
T02 | 首页 | 进入首页 | 获取商城首页数据 | 高 |
T03 | 商品 | 搜索商品 | 通过关键字搜索商品 | 高 |
T04 | 商品 | 查看商品详情 | 点击商品进入商品详情页面 | 高 |
T05 | 购物车 | 添加购物车 | 把商品加入购物车 | 高 |
T06 | 购物车 | 查看购物车 | 用户查看购物车内的商品 | 高 |
T07 | 订单 | 商品结算 | 对已选择的商品进行结算 | 高 |
T08 | 订单 | 提交订单 | 用户提交商品订单 | 高 |
T09 | 订单 | 查看我的订单 | 用户查看订单列表 | 高 |
4. 测试策略
4.1 基准测试
先做基准测试,确定估算的标准。
4.2 负载测试
- 通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足系统的性能指标情况下,系统所能够承受的最大负载量的测试。
- 分别模拟5、10、30、50、100个用户对系统进行负载测试,查看不同并发时系统软件各项指标是否符合需求。
4.3 稳定性测试
- 用200用户对系统进行7*24小时的不间断稳定性测试,查看服务器日志内有无异常和报错;系统软件各项指标中间有无异常波动;是否存在内存溢出之类的问题。
- 验证系统长期运行的稳定性以及是否存在内存溢出之类的问题
5. 风险控制
风险类型 | 风险描述 | 风险级别 | 应对方案 |
---|---|---|---|
环境风险 | 部署出现问题,联调进度缓慢 | 中 | 更换环境、增加资源配置 |
数据风险 | 构造测试数据时间较长 | 中 | 开发人员协助 |
交付风险 | 发现比较严重的Bug | 中 | 延长测试时间,增加对应人员 |
6. 交付清单
性能测试计划、测试脚本、性能缺陷统计和性能测试报告等。
7. 进度与分工
测试用例设计
根据测试点逐条进行细化:
- 性能测试数据,有明确要求,需要达到一定的业务量
- 从接口维度来描述测试步骤
- 如果两个接口强绑定(结算、下订单),放在一个用例中间测试
1. 编写性能测试用例
测试脚本开发
1. 测试脚本开发
使用JMeter编写测试脚本并调试
1.1 常用测试元件
- 取样器-HTTP请求
- 配置元件-HTTP请求默认值
- 配置元件-用户定义的变量
- 后置处理器-JSON提取器
- 断言-响应断言
- 断言-JSON断言
- 监听器-察看结果树
- 监听器-聚合报告
1.2 初始化工作
- 创建测试用例结构
- 设置HTTP请求默认值
- 用户定义的变量
- 添加监听器-察看结果树
- 添加监听器-聚合报告
1.3 实现测试用例
根据编写的测试用例文档,使用JMeter实现测试用例
编写脚本的要点:
- 单接口测试脚本:
(1)登录脚本
- 添加HTTP请求默认值:设置HTTP请求中的默认部分(协议、域名、端口、编码格式)
- 添加HTTP信息头管理,设置HTTP请求的头域
- 添加线程组 - 登录
- 添加HTTP请求 - 登录,填写路径和请求参数
- 在HTTP请求下添加断言:
- 如果做接口测试,必须断言 响应中的业务数据,可以加上 状态码和描述信息
- 如果做性能测试,可以只 添加状态码和描述信息 断言
(2)进入首页、搜索商品、获取商品详情
- 进入首页:
- 添加‘HTTP请求-获取首页数据’的请求
- 添加‘响应断言-响应状态码’
3. 添加‘JSON断言-错误码’
4. 添加‘JSON断言-错误消息’
- 搜索商品:
1.请求:
2.断言:- 状态码、errmsg
- 如果是接口测试脚本,必须针对响应中的商品数量进行断言(数据库)
- 获取商品详情:
1.请求:
2.断言:- 状态码、errmsg
- 如果是接口测试脚本,需要针对响应