性能测试基础
什么是软件性能?
软件的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等等。
用户视角的软件性能:
- 从用户角度来说,软件性能就是软件对用户操作的响应时间
管理员视角的软件性能 - 系统的响应时间;
- 系统运行时服务器的状态,如CPU利用情况,内存使用情况等;
- 系统是否能够实现扩展;
- 系统支持多少用户访问;
- 系统性能可能的瓶颈在哪里;
- 系统是否支持7*24小时的业务访问。
产品开发人员视角的软件性能
- 用户关心的响应时间;
- 管理员关心的系统可扩展性等;
- 架构设计是否合理;
- 数据库设计是否合理;
- 代码是否存在性能方面的问题;
- 系统中是否有不合理的内存使用方式。
什么是软件性能测试?
性能测试主要是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试!
性能测试的目的
评估系统的能力:测试中得到的压力水平和响应时间数据可以用于验证系统是否达到规划时的水平。
识别体系中的弱点:将系统的压力增加到一个极端水平,从而帮助发现系统薄弱环节并修复系统瓶颈。
验证系统稳定性和可靠性:长时间的测试可能导致程序发生内存泄露等引起的隐藏问题,在一个生产负荷下执行测试一定时间,评估系统可靠性是否满足要求。
系统调优:重复执行性能测试,以验证系统调优是否取得预期效果。
性能测试指标:
并发用户数
并发是指在某一给定时间内,某个特定点上进行会话操作的用户数。Virtual User,模拟真实业务逻辑步骤的虚拟用户,虚拟用户模拟的操作步骤都被记录在虚拟用户脚本里。Vuser脚本用于描述Vuser在场景中执行的操作。
并发:
并发分为狭义和广义两类。
狭义的并发,即所有的用户在同一时间做同一件事情,这种操作一般针对同一类型的业务或者所有用户进行完全一样的操作,目的是测试数据库和程序对并发操作的处理。
狭义并发强调对系统的请求操作是完全相同的,多适用于性能测试、负载测试、压力测试;
广义的并发,即多个用户对系统发出了请求或进行了操作,但这些请求和操作是不同的。对整个系统而言,仍然有很多用户同时进行操作。
广义并发不限制对系统的请求操作,多适用于混合场景、稳定性测试场景。
小结:
广义并发:同一时间段内,对系统发起请求的数量
狭义并发:在同一时刻,对系统(服务器)发起的相同请求的数量
请求处理失败了也算并发,但在TPS、处理数量上不算
做性能测试的前提要保证请求的成功率(正确性)
行业内要求和钱相关的请求正确率要达100%
其他一般请求要求成功率99.99%
响应时间
响应时间指的是客户端发出请求到得到响应的整个过程所经历的。
指从客户端发一个请求开始时,到客户端接收到从服务器端返回的响应结果结束经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。
http协议就是通过浏览器访问的响应时间包括前端页面加载时间,但loadrunner里不包含此部分时间。于是有了web前端性能测试之说
特别注意场景:大量树状结构容易出前端性能问题
注:并发和响应时间是相互关联的,缺一不可
吞吐量
吞吐量是指单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力。
一般来说,吞吐量用请求数/秒或页面数/秒来衡量,从业务的角度,吞吐量也可以用访问人数/天或处理的业务数/小时等单位来衡量。从网络的角度来说,也可以用字节数/天等单位来考察网络流量。
资源利用率
资源利用率是指系统资源的使用程度,比如服务器(网络以及数据库)的CPU利用率、内存利用率、磁盘利用率、网络带宽利用率等。
除了上述资源,我们还应该考虑数据库连接池使用情况,JVM内存使用情况,sql执行效率等。
资源利用率:包含硬件(CPU、内存、IO、网络)、整个架构包含的节点利用率、中间件线程池利用率、数据库连接池使用情况,SQL执行效率,居民内存使用率,gc次数及时间,负载均衡服务器资源利用率,缓存服务器资源利用率、缓存key命中率
TPS
服务端:1秒钟(单位时间内)服务器处理的请求(事务)的数量
工具端(客户端):多少并发用户数(VU),响应时间是多少
性能测试的类型
随着压力不断增长,实测系统的资源会丌断被消耗,TPS值会因为这些因素而发生变化,并且符合一定的规律。
- 性能测试
- 负载测试
- 压力测试
- 稳定性测试/可靠性测试/疲劳测试
- 容量测试
- 网络性能测试
图中
a点:性能期望值
b点:高于期望值,系统资源处于临界点
c点:高于期望值,拐点
d点:超过最大负载,系统崩溃
性能测试
a点到b点之间的系统性能,指以系统预期性能指标为前提,对系统不断增加压力,以验证系统能否达到预期性能。(单场景测试)
关注点:how much和how fast
负载测试
含义:主要用于描述常规的性能测试,通过模拟生产运行的业务压力和使用场景组合来测试系统的性能是否满足生产要求。
目的:在特定的运行条件下验证系统的能力状况。
b 点的系统性能,是指对系统丌断地增加压力或增加一定压力下的持续
时间,直到系统的某项或多项性能指标达到极限,例如某种资源已经达
到饱和状态等。
关注点:how much
压力测试
含义:压力测试是为了发现在什么条件下应用程序的性能会变得不可接受。
• 压力测试不负载测试的比较
实现方法基本相同
测试的目的不同
• b 点到d之间的系统性能,是指超过安全负载的情况下,对系统不断施加压力,直到系统崩溃,确定系统的瓶颈或不能接收用户请求的性能点。
稳定性测试/可靠性测试/疲劳测试
含义
软件可靠性: 在规定条件下,在规定时间内,软件丌引起系统失效的概率
可靠性测试:在有使用代表性的环境中,持续运行系统某些功能,验证系统稳
定性的过程
目的
尽量模拟客户的使用环境,一定业务压力下,持续运行过程N24小时,测试系统的稳定性
•a点到b点之间的系统性能,是指实测系统在接近生产环境的系统中,给系统加载一定于真实业务压力相仿的压力,使系统运行一段较长时间,以检测系统是
否稳定,一般稳定性测试时间为N12小时。
容量测试
含义
确定测试对象在给定时间内能够持续处理的最大负载或工作量使测试对象处理大量的数据,以确定是否达到了将使被测对象发生故障的极限
• 目的
测试单业务在一定数据容量下性能表现,比如通讯录、比如选人。
关注点:how much(而丌是how fast)
测试场景:
1.单场景:测试某个接口/功能的性能tps(并非所有功能/接口都需要测试,测重要的、和钱相关的场景),目的是测指标
2.混合场景:把多个单场景组合一起进行测试,目的是为了测bug(线程死锁、数据库死锁)
3.稳定性场景:测试稳定性,目的是为了测试内存溢出(内存泄漏是过程,溢出是结果)
单场景一般跑15分钟,溢出一般发现不了,所以需要跑稳定性。
稳定性测试一般以12小时为单位,n*12
主要接口,使用量多的接口才做性能测试
平均无故障时间
什么时候测试测性能:开发脚本等功能测试基本稳定之后,但介入项目要越早越好,提前了解需求,系统架构。