性能测试
一、性能测试
性能
描述产品除功能外的所具有的速度、效率和能力的综合能力评价
效率特性:
时间特性:系统处理用户请求的响应时间
资源特性:系统在运行过程中,系统资源的消耗情况
cpu
内存
磁盘IO(磁盘的写入Input和读取Output,简称IO)
性能测试
对软件各项性能指标进行测试和评估的过程就是性能测试
目的
评估当前系统能力
寻找性能瓶颈、优化性能
评估软件是否能够满足未来的需要
特点
性能测试方法的主要目的是验证软件系统是否有系统具有预期的能力。
性能测试方法要事先了解被测试系统的具体使用场景,并具有确定的性能目标。
性能测试方法要求在已经确定的环境下运行。
性能测试与功能测试
焦点不同
功能测试:验证软件系统操作功能是否符合产品功能需求规格,主要焦点在功能(正向、逆向)
性能测试:验证软件系统是否满足业务需求场景,主要焦点是业务场景的满足(时间、资源)
关系
功能测试与性能测试相辅相成,对于优秀的软件产品,两者都是不可或缺的
一般项目中,先功能测试通过,再性能测试
常见的性能测试
压力测试
系统在一定饱和状态下,如cpu、内存等饱和情况下,系统能处理的会话能力,以及系统是否会出现错误
特点:
1.该方法的主要目的是检查系统处于压力情况下试应用的性能表现
2.该方法通过增加访问压力,使系统资源保持在一定水平,检验应用的表现,重点在于有无出错信息产生,系统对应用的响应时间等
3.该方法一般通过模拟负载等方法,使得系统的资源使用达到较高的水平
4.该方法主要目的是找到系统处理能力的极限
基准测试
测量评估软件性能指标,测试环境确定后,对业务模型中的重要业务做单独测试,获取但用户运行时各项性能指标
用途:
为多用户并发测试和总和场景测试等性能分析提供参考依据
识别系统或环境的配置变更对性能相迎带来的影响
为系统优化前后的性能提升/下降提供参考指标
负载测试
在被检测系统上不断增加压力,直到性能指标超过预期指标或者某种资源使用已经达到饱和状态,可以找到系统的处理极限,为系统调优提供数据
特点:
1.该方法在给定的测试环境下进行,通常需要考虑被检测系统的业务压力和典型场景
2.该方法一般用来了解系统的性能容量,或者是配合性能调优来使用性能容量,系统在保证一定响应时间的情况下能够允许多少并发用户的访问
注意:重点是逐步增加压力
并发测试
在极短的时间内,发送豆哥请求,验证对并发的处理能力
特点:
1.并发测试方法的主要目的是发现系统中可能隐藏并发访问时的问题。
2.并发测试方法主要关注系统可能存在的并发问题,例如系统中的内存泄漏、线程锁和资源并用方面的问题。
3.并发测试方法可以在开发的各个阶段使用,不过是需要相关的测试工具的配合和支持
稳定性测试
在服务器稳定运行的情况下,进行长时间测试,并最终保证服务器能满足线上业务需求,时长一般为一天或一周
容量测试
关注软件的极限压力下的各个极限参数值,如最大TPS、最大并发和最多数据条数
其他测试
如:验收性能测试、失效恢复测试等
二、性能测试指标
一些经过运算得出的结果,来衡量某种操作性能统称
性能指标
响应时间
斌法术
吞吐量
点击数
错误率
资源利用率
PV和UV
常用性能指标
响应时间
至用户从客户端发起请求开始,到客户端接收到服务器返回的结果,整个过程消耗的时间
响应时间=网络时间+应用程序处理时间
并发数
并发测试的用户数
吞吐量
单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力
从技术指标,可以分为每秒事务数(TPS)和每秒查询数(QPS)
TPS
单位时间内系统处理的客户端请求的事务次数
TPS=并发数/平均响应时间
QPS
控制服务器每秒处理指定请求数
点击数
点击数是hengliangweb服务器处理能力的重要指标
通常用每秒点击次数指标来衡量web服务器的处理能力
错误率
错误率值系统在负载情况下,失败业务的概率,错误率=(失败业务数/总业务数)*100%
资源利用率
系统各种资源的使用情况,一般用‘资源使用量/总资源可用量*100%’形成资源利用率数据
通常情况下:
CPU使用率不高于80%
内存占用不高于80%
磁盘使用不高于80%
网络不高于80%
三、企业及性能测试全流程
1.性能需求分析
基于系统需求以及用户的实际应用场景,对系统性能指标进行定义和提取,确保系统能够符合到实际场景,满足运行时的性能需求,并结合需求内容进行性能场景的设计,确保所有指标度可以被合理化的场景覆盖
注:它是整个性能测试工作开展的基础,直接影响性能测试的结果
性能需求分析目标
熟悉被测系统的业务功能、技术架构
明确性能测试内容
明确性能测试策略:负载、稳定性、并发测试
明确性能测试的指标
无明确需求指标:通过查找相关资料,和类似系统对比,以及对未来流量的玉菇,确定性能测试需求指标
有明确的需求指标:根据执行分析结果与预期指标对比,分析不满足之处问题所在
2.性能测试计划及方案
主要内容:
项目背景
测试目的
测试范围
测试策略
风险控制
交付清单
进度和分工
3.性能测试用例
4.测试脚本编写/录制
结合用例需要,进行测试脚本的编写或录制
5.建立测试环境
进行性能测试之前,需要先完成性能测试环境的搭建工作,测试环境一般包括硬件环境、软件环境和网络环境
注:一般需要运维和开发工程师协助完成
6.执行测试脚本
保证脚本调试通过后,才能进入正式压测阶段
执行测试脚本时,要先进行性能运行场景的设置,再运行脚本
7.性能测试监控
监控服务器的各项性能指标,如监控CPU、内存、网络、TPS、磁盘IO等
8.性能分析和调优
性能测试分析人员经过对结果的分析后,有可能提出系统存在性能瓶颈
系统调优难易顺序:
1.系统架构问题
2.源代码数据库脚本问题
3.应用服务器、数据库等配置问题
4.网络问题
5.硬件问题
9.性能测试报告总结
包含以下内容:
性能测试需求覆盖情况,测试过程回顾,测试中出现的问题(如何分析、调优、解决的)
性能测试过程中遇到各类风险如何控制,目前是否还有其他性能风险存在
经过该项目性能测试后,有哪些经验和教训
四、性能测试工具
性能测试工具用途
性能测试在实际执行过程中,往往会有各类复杂的性能业务场景需要实现,无论是大批量用户,还是相对较长的执行时间,也包括运行时会需要做很多数据的记录、展示,生成各种我们所需要的数据报表等,这些内容都可以基于工具来全部获取,并通过工具的使用,可以简化整个前期的性能测试准备工作,以及系统性能的数据结果获取,完成性能测试阶段下的一部分工作内容,但是,工具≠性能测试,工具只是为了满足性能测试的一些需求而使用的一种手段,仅此而已
所有的性能测试工具只是为了实现性能测试的一种手段,和辅助的作用
是值得性能测试是在系统效率的测试上,需要关注的是系统整体的运行效率,是否存在有影响效率的性能问题
对于单个核心接口进行性能测试,考虑它的并发最大能达到多少,是否满足性能指标
性能测试工具
Jmeter:
Apache旗下推出的一款开源性能测试工具,完全基于java语言实现,支持脚本自定义与二次开发,如果个人Java能力较强,可以自主编写代码,搭配Jmeter实现更多性能测试
优点:
免费
开源
小巧
丰富学习资料及扩展组件
应用广泛
易上手
缺点:
不支持ip欺骗
分析和报表能力相对欠缺精度
LoadRunner:
MicroFocus旗下推出的一款付费性能测试工具,虽然支持多语言的自主脚本编写,但在HTTP网络协议下的性能测试脚本默认是以C语言的形式来实现,LR也是性能测试领域下的老牌软件
优点:
多用户(支持数量单位万)
详细分析报表
支持ip欺骗
缺点:
收费
体积庞大
无法定制功能
Locust:
基于Python语言实现的一个开源编程式性能测试框架,所有的测试脚本都市就业Python编写程序来实现,提供有运行过程中的持续监控Web服务,也可以自定义搭配持续集成技术进行使用,具有较高的自由度,且在实际中可以支持各类协议
Gatling:
基于Java实现的一款开源性能测试工具,支持Scala、Java、Kotlin进行测试脚本的编写,对于HTTP有着出色的支持能力,同时,理论上可以支持到其他的各类协议
其他:
性能测试工具:
ab等
性能监控平台:
skywalking、telegraf、influxDB、grafana、prometheus等