软件性能测试基础
性能测试的概念
思考下面几个问题
- 什么是软件性能?
- 软件为什么会有性能?
- 什么叫性能测试?
- 什么样的系统需要做性能测试?
- 为何要做性能测试?
- 如何做性能测试?
- 如何定位性能根源,性能的瓶颈究竟在哪儿?
- 如何提升性能?
什么是软件性能?
软件的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等等。
这个不懂?没关系下面从几个角度来分析
- 用户视角的软件性能
- 管理员视角的软件性能
- 产品开发人员视角的软件性能
1、用户视角的软件性能
从用户角度来说,软件性能就是软件对用户操作的响应时间
2、管理员视角的软件性能
- 系统的响应时间;
- 系统运行时服务器的状态,如CPU利用情况,内存使用情况等;
- 系统是否能够实现扩展;
- 系统支持多少用户访问;
- 系统性能可能的瓶颈在哪里;
- 系统是否支持7*24小时的业务访问
3、产品开发人员视角的软件性能
- 用户关心的响应时间;
- 管理员关心的系统可扩展性等;
- 架构设计是否合理;
- 数据库设计是否合理;
- 代码是否存在性能方面的问题;
- 系统中是否有不合理的内存使用方式。
那么,测试人员视角的软件性能是啥子东西呢???
官方回答来了:性能测试主要是通过自劢化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试!
那么性能测试的目的、指标类型、是什么呢???
性能测试的目的:
- 评估系统的能力:测试中得到的压力水平和响应时间数据可以用于验证系统是否达到规划时的水平。
- 识别体系中的弱点:将系统的压力增加到一个极端水平,从而帮劣发现系统薄弱环节幵修复系统瓶颈。
- 验证系统稳定性和可靠性:长时间的测试可能导致程序发生内存泄露等引起的隐藏问题,在一个生产负荷下执行测试一定时间,评估系统可靠性是否满足要求。
- 系统调优:重复执行性能测试,以验证系统调优是否取得预期效果
性能测试的指标:
1、并发
并发分为狭义和广义两类。
狭义的并发,即所有的用户在同一时间做同一件事情,这种操作一般针对同一类型的业务或者所有用户进行完全一样的操作,目的是测试数据库和程序对幵发操作的处理。 狭义并发强调对系统的请求操作是完全相同的,多适用于性能测试、负载测试、压力测试;
广义的并发,即多个用户对系统发出了请求或进行了操作,但这些请求和操作是不同的。对整个系统而言,仍然有很多用户同时进行操作。
广义并发不限制对系统的请求操作,多适用于混合场景、稳定性测试场景。
2、并发用户数
并发是指在某一给定时间内,某个特定点上进行会话操作的用户数。
3、响应时间
响应时间指的是客户端发出请求到得到响应的整个过程所经历的。
指从客户端发一个请求开始时,到客户端接收到从服务器端返回的响应结果线束经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。举例请求淘宝首页描述过程
4、响应时间
http协议的也就是通过浏览器访问的响应时间包括前端页面加载时间,但loadrunner里不包含此部分时间。
于是有了web前端性能测试之说。特别注意场景:大量树状结构容易出前端性能问题
5、吞吐量
吞吐量是指单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力。
一般来说,吞吐量用请求数/秒或页面数/秒来衡量,从业务的角度,吞吐量也可以用访问人数/天或处理的业务数/小时等单位来衡量。从网络的角度来说,也可以用字节数/天等单位来考察网络流量。
6、资源利用率
资源利用率是指系统资源的使用程度,比如服务器(网络以及数据库)的CPU利用率、内存利用率、磁盘利用率、网络带宽利用率等。
除了上述资源,我们还应该考虑数据库连接池使用情况,JVM内存使用情况,sql执行效率等。
性能测试的类型
随着压力不断增长,实测系统的资源会不断被消耗,TPS值会因为这些因素而发生变化,并且符合一定的规律。
- 性能测试
- 负载测试
- 压力测试
- 稳定性测试/可靠性测试/疲劳测试
- 容量测试
- 网络性能测试
图中
a点:性能期望值
b点:高于期望值,系统资源处于临界点
c点:高于期望值,拐点
d点:超过最大负载,系统崩溃
性能测试:
a点到b点之间的系统性能,指以系统预期性能指标为前提,对系统不断增加压力,以验证系统能否达到预期性能。
关注点:how much和how fast
负载测试:
含义:主要用于描述常规的性能测试,通过模拟生产运行的业务压力和使用场景组合来测试系统的性能是否满足生产要求。
目的:在特定的运行条件下验证系统的能力状况,主要是测试极限值,崩溃值
b 点的系统性能,是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到极限,例如某种资源已经达到饱和状态等。
关注点:how much
压力测试:
含义
压力测试是为了发现在什么条件下应用程序的性能会变得不可接受。
压力测试与负载测试的比较
- 实现方法基本相同,测试的目的不同——负载测试是为了找出极限值的一个过程,测试过程中可能有N种负载;压力测试是在不同负载下系统性能的表现
- b 点到d之间的系统性能,是指超过安全负载的情况下,对系统不断施加压力,直到系统崩溃,确定系统的瓶颈或不能接收用户请求的性能点。
稳定性测试/可靠性测试/疲劳测试:
含义
- 软件可靠性: 在规定条件下,在规定时间内,软件不引起系统失效的概率
- 可靠性测试:在有使用代表性的环境中,持续运行系统某些功能,验证系统稳定性的过程
目的
尽量模拟宠户的使用环境,一定业务压力下,持续运行过程N*24/12小时,测试系统的稳定性
容量测试
含义
确定测试对象在给定时间内能够持续处理的最大负载或工作量使测试对象处理大量的数据,以确定是否达到了将使被测对象发生故障的极限
目的
测试单业务在一定数据容量下性能表现,比如通讯录、比如选人。
关注点:how much(而不是how fast)
网络性能测试
含义
测试网络带宽、延迟、负载和端口的变化对用户的响应时间的影响
实际应用
主要是测试用户数目不网络带宽的关系,评估网络的依赖程度
性能测试流程
- 性能测试需求
- 性能测试计划
- 性能测试设计
- 性能测试结果
- 性能测试分析
性能测试需求
主要角色与责任
PM:
负责从业务/应用的角度提出性能需求,或者只提供业务场景(使用人员总数、每天平均访问量,用户使用情况等),供RD、QA根据业务场景分析出性能需求。
RD:
①作为明确性能需求的总负责推劢整个过程
②将PM性能需求文档化在概要设计中(或者详绅设计中),对于没有pm角色的项目,负责明确性能需求,幵文档化在设计文档中.
③从技术角度出发,提出性能测试需求,明确在概要设计或者详绅设计中
QA:
QA在概要设计、详绅设计评実时,需要对性能需求进行评実,对性能的可测性进行判断,幵合理裁剪或者补充一些性能需求。
测试需求分析主要有以下的几个关键点:
- 测试的目的是什么
- 评估系统的能力
- 识别体系中的弱点
- 验证系统稳定性和可靠性
- 系统调优
测试要素分析:
- 用户数量
- 测试执行的功能
- 用户分布(即执行每种功能的用户数)
- 硬件环境(包括网络环境)
- 软件环境
- 数据量
其它分析
- 系统运行中所出现的问题有什么特征或规律
- 疲劳测试执行时间多少
- 性能需求的指标是什么等
产物:
性能测试的概要设计,详细设计
性能测试计划
测试目的不同,则相应的测试策略不同
- 性能符合性验证—负载测试、疲劳强度测试。
- 性能能力验证—压力测试、疲劳强度测试。
- 性能调优—测试-调整-测试。负载测试、压力测试、疲劳强度测试。
主要内容:
- 测试需求
- 测试策略
- 测试场景
- 测试环境
- 测试准备
- 人员及时间安排
- 问题不对策
产物
测试计划
性能测试设计
- 测试环境准备
- 测试数据准备
- 测试用例、场景准备
- 测试工具准备
- 开发测试脚本
- 布置测试场景
产物:
测试用例、测试案例,测试环境,测试脚本
性能测试结果
执行测试场景
保存测试结果
产物
测试结果
以上都是基本概念,还需多多理解,继续加油