性能测试流程
性能测试需求分析
性能测试计划及方案
性能测试用例
搭建测试环境
测试数据准备
测试脚本编写
执行测试脚本
性能测试监控
性能分析和调优
性能测试回归
性能测试报告总结
1、性能测试需求分析
熟悉被测系统
熟悉系统的业务功能以及数据流向
熟悉系统的技术架构
明确性能测试范围
从业务角度,挑选核心业务进行测试以及生产环境访问量多的业务
从技术角度,挑选逻辑复杂度高、数据量大的业务进行测试
明确配置信息
明确性能测试环境的CPU、内存、网络、磁盘、实例等配置详情,以及与生产环境的资源配置的差异性;
确定测试策略
◼ 基准测试
◼ 单交易负载测试
◼ 混合场景测试
◼ 高可用性测试
◼ 异常场景测试
◼ 稳定性测试
◼ 其他特殊场景
确定性能测试指标
有需求:按照需求来测试
例如:
新建线索业务并发20个用户
平均响应时间要小于等于3s
事务成功率为100%
CPU、内存使用率小于等于80%
没有需求:同类型软件对比,对未来数据进行预估;如果公司有运营数据统计,可以根据运营数据对性能测试的指标进行估算;
明确上线时间
需要明确上线的时间,编写性能测试方案,合理安排性能测试的人员与执行计划,确保能按时上线;
2.性能测试计划及方案
每个公司都有自己的模板,大体上的性能测试方案的内容上出入不到,包含以下内容;
1、项目背景 —— 主要介绍下项目的背景
2、测试目的 —— 验证被测系统在高并发下的处理能力、响应能力,稳定性等,能否满足预期。
3、测试范围 —— 对于需求分析中的性能测试内容
4、测试策略 —— 对应于需求分析中的测试策略
5、风险控制 —— 技术风险、人力风险
6、环境信息 ——压测的环境与生产环境的资源情况
7、进度和分工 —— 谁在什么时候做什么事
3. 性能测试用例
4. 搭建测试环境
- 测试机器硬件配置尽量和线上一致
- 系统版本与线上一致
- 测试环境部署线上最小单元模块
- 应用、中间件、数据库配置要与线上一致
- 其他特殊配置
测试环境的搭建,需要了解首先了解项目的架构,是使用LNMP,还是JAVA、C#等,不同的架构方式的部署,后面有时间出一些文章进行项目部署的内容;
通常,我们在搭建集成测试环境之时,会使用Jenkins与docker搭建流水线,开发只需要在gitlab上发起合并请求给测试,测试合并之后,jenkins就会就行编译、打包、部署;
5. 测试数据准备
方式(造数的详细方法,后面会出教程)
1、通过使用Jmeter,调用实际业务接口进行造数;
例如:我们可以模拟实际用户操作页面的操作,调用相应的接口;
2、通过使用Jmeter,进行对表进行增删改查操作,达到造数;
3、使用存储过程造数
使用存储过程造数,一般都是适合表数据量比较少,简单,优点就是快;
4、使用脚本造数,可以使用python/java等语言,编写造数脚本;
python,封装mysql
import pymysql
class MysqlUtil:
# 初始化
__conn = None
__cursor = None
# 创建连接
@classmethod
def __get_conn(cls):
if cls.__conn is None:
cls.__conn = pymysql.connect(host="数据库",
port=端口,
user="用户名",
password="密码",
database="数据库")
return cls.__conn
# 获取游标
@classmethod
def __get_cursor(cls):
if cls.__cursor is None:
cls.__cursor = cls.__get_conn().cursor()
return cls.__cursor
# 执行sql
@classmethod
def exe_sql(cls, sql):
try:
# 获取游标对象
cursor = cls.__get_cursor()
# 调用游标对象的execute方法,执行sql
cursor.execute(sql)
# 如果是查询
if sql.split()[0].lower() == "select":
# 返回所有数据
return cursor.fetchall()
# 否则:
else:
# 提交事务
cls.__conn.commit()
# 返回受影响的行数
return cursor.rowcount
except Exception as e:
# 事务回滚
cls.__conn.rollback()
# 打印异常信息
print(e)
finally:
# 关闭游标
cls.__close_cursor()
# 关闭连接
cls.__close_conn()
# 关闭游标
@classmethod
def __close_cursor(cls):
if cls.__cursor:
cls.__cursor.close()
cls.__cursor = None
# 关闭连接
@classmethod
def __close_conn(cls):
if cls.__conn:
cls.__conn.close()
cls.__conn = None
封装后,只需要引用上封装好的包,编辑SQL即可;
from tools.mysql_util import MysqlUtil
a=MysqlUtil.exe_sql("select * from tb_board")
print(a)
6. 测试脚本编写
◼ 选择工具(Loadrunner、Jmeter、Locust等)
◼ 选择协议(Http、TCP、RPC)
◼ 参数化
◼ 关联
◼ 检查点
◼ 事务判断
7. 执行测试脚本
说明:先保证脚本调试通过之后,才能进入正式压测阶段
执行测试脚本时,要先进行性能运行场景的设置,再运行脚本
8.性能测试监控
性能监控就是监控服务器的各项性能指标。例如:监控CPU、内存、网络、TPS、磁盘IO等
9. 性能分析和调优
说明:性能测试分析人员经过对结果的分析以后,有可能提出系统存在性能瓶颈。
提示:
调优人员(开发人员、数据库管理员、系统管理员、网络管理员、性能测试分析人员)相关人员对系统进行调整;
10. 性能测试回归
验证-性能测试人员继续进行回归测试,与以前的测试结果进行对比,从而确定经过调整以后系统的性能是否有提升,资源使用情况是否正常;
注意:
系统调优由易到难的先后顺序如下:
硬件问题
网络问题
应用服务器、数据库等配置问题
源代码、数据库脚本问题
系统构架问题
11.性能测试报告总结
- 概述
- 测试环境
- 结果与分析
- 调优说明
- 项目时间表
- 结论
- 建议
版权归原作者 Yasar.l 所有, 如有侵权,请联系我们删除。