软件性能测试基础

1、什么是软件性能?
软件的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等待。

用户视角的软件性能 
从用户角度来说,软件性能就是软件对用户操作的响应时间;
管理员视角的软件性能: 
系统的响应时间
系统运行时服务器的状态,如CPU利用率,内存使用情况等;
系统是否能够实现扩展;
系统支持多少用户访问;
系统性能可能的瓶颈在哪里;
系统是否支持7*24小时的业务访问;
产品开发人员视角的软件性能 
用户关心的响应时间;
管理员关心的系统可扩展性等;
架构设计是否合理;
数据库设计是否合理;
代码是否存在性能方面的问题;
系统中是否有不合理的内存使用方式;
2、什么是软件性能测试?
性能测试主要是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试!

3、性能测试的目的
评估系统的能力:测试中得到的压力水平和响应时间数据可以用于验证系统是否达到规划时的水平;
识别体系中的弱点:将系统的压力增加到一个极端水平,从而帮助发现系统薄弱环节并修复系统瓶颈;
验证系统稳定性和可靠性:长时间的测试可能导致程序发生内存泄漏等引起的隐藏问题,在一定的生产负荷下执行一段时间的测试,评估系统可靠性是否满足要求。
系统调优:重复执行性能测试,以验证系统调优是否取得预期效果;
4、性能测试指标

è¿éåå¾çæè¿°
并发用户数 
并发是指在某一给定时间内,某个特定点上进行会话操作的用户数。Virtual User,模拟真实业务逻辑步骤的虚拟用户,虚拟用户模拟的操作步骤都被记录在虚拟用户脚本里,Vuser脚本用户描述Vuser在场景中执行的操作。
并发 
狭义并发 
即所有用户在同一时间做同一件事情,这种操作一般针对同一类型的业务(大家一起购买物品,都是购买,但买的东西可以不同)或者所有用户进行完全一样的操作(大家一起秒杀同一个物品),目的是测试数据库和程序对并发操作的处理。狭义并发强调对系统的请求操作是完全相同的,多适用于性能测试、负载测试、压力测试;(单一测试场景)
广义并发 
广义的并发,即多个用户对系统发出了请求或进行了操作,但这些请求和操作是不同的。对整个系统而言,仍然有很多用户同时进行操作。广义并发不限制对系统的请求操作,多适用于稳定性测试;(混合测试场景)
响应时间 
响应时间指的是客户端发出请求到得到响应的整个过程所经历的时间。 
 è¿éåå¾çæè¿°
如上图的响应时间,是指从客户端发出一个请求开始,到客户端接收到从服务器返回的响应结果所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。 
注:HTTP协议的,通过浏览器访问的响应时间还包括前端页面加载时间,但loadrunner里不包含此部分时间。于是有了Web前端性能测试之说,特别注意场景:大量树状结构容易出前端性能问题。

吞吐量 
吞吐量是指单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力。 
一般来说,吞吐量用请求数/秒或页面数/秒来衡量,从业务角度来讲,吞吐量也可以用访问人数/天或处理的业务数/小时等单位来衡量。从网络的角度来说,也可以用字节数/天等单位来考察网络流量。

资源利用率 
资源利用率是指系统资源的使用程度,比如服务器(网络以及数据库)的CPU利用率、内存利用率、磁盘利用率、网络带宽利用率等。 
除了上述资源,我们还应该考虑数据库连接池使用情况,JVM内存使用情况,sql执行效率等。
5、性能测试的类型
随着压力不断增长,实测系统的资源会不断被消耗,TPS值会因为这些因素而发生变化,并且符合一定的规律。

 è¿éåå¾çæè¿°
上图: 
X轴是VU虚拟用户的数量; 
Y轴是TPS值; 
a点:性能期望值 
b点:高于期望值,系统资源处于临界点 
c点:高于期望值,拐点 
d点:超过最大负载,系统崩溃

性能测试 
a点到b点之间的系统性能,指以系统预期性能指标为前提,对系统不断增加压力,以验证系统能否达到预期性能。 
关注点:how much和how fast
负载测试 
含义:主要用于描述常规的性能测试,通过模拟生产运行的业务压力和使用场景组合来测试系统的性能是否满足生产要求。 
目的:在特定的运行条件下验证系统的能力状况。 
b点的系统性能,是指对系统不断的增加压力或一定压力下的持续时间,知道系统的某项或多项性能指标达到极限,例如某种资源已经达到饱和状态等。 
关注点:how much
压力测试 
含义:压力测试是为了发现在什么条件下应用程序的性能会变得不可接受。 
压力测试与负载测试的区别:两者实现方法基本相同,但测试的目的不同。 
b点到d之间的系统性能,是指超过安全负载的情况下,对系统不断施加压力,知道系统崩溃,确定系统的瓶颈或不能接收用户请求的性能点。
稳定性测试/可靠性测试/疲劳测试 
含义 
软件可靠性:在规定条件下,在规定时间内,软件不引起系统失效的概率; 
可靠性测试:在有试用代表性的环境中,持续运行系统某些功能,验证系统稳定性的过程;
目的 
尽量模拟客户的使用环境,一定业务压力下,持续运行过程N*24小时,测试系统的稳定性 
a点到b点之间的系统性能,是指实测系统在接近生产环境的系统中,给系统加载一定与真实业务压力相仿的压力,使系统运行一段较长时间,以检测系统是否稳定,一般稳定性测试时间为N*12小时。
容量测试 
含义: 
确定测试对象在给定时间内能够持续处理的最大负载或工作量。 
使测试对象处理大量的数据,以确定是否达到了将使被测对象发生故障的极限。
目的 
测试单业务在一定数据容量下性能表现,比如通讯录、比如选人?
关注点 
how much(而不是how fast)
网络性能测试 
含义 
测试网络带宽、延迟、负载和端口的变化对用户的响应时间的影响
实际应用 
主要是测试用户数目与网络带宽的关系,评估网络的依赖程度
举例: 
(1)性能测试 
表示在一个给定的基准下,能执行的最好情况。例如,在没有负重情况下,你跑100米需要花多少时间。(这里,没有负重是基准) 
(2)负载测试 
在不同的负载下的性能测试。上面的例子,在负重50公斤、100公斤。。。等情况下,你跑100米需要花多长时间。 
(3)强度测试 
???待补充

6、软件性能测试的流程

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

一、性能测试需求 
1、主要角色与责任 
PM: 
负责从业务/应用的角度提出性能需求,或者只提供业务场景(使用人员总数、每天平均访问量,用户使用情况等),供RD、QA根据业务场景分析出性能需求。 
RD: 
①作为明确性能需求的总负责推动整个过程 
②将PM性能需求文档化在概要设计中(或者详细设计中),对于没有pm角色的项目,负责明确性能需求,并文档化在设计文档中. 
③从技术角度出发,提出性能测试需求,明确在概要设计或者详细设计中 
QA: 
QA在概要设计、详细设计评审时,需要对性能需求进行评审,对性能的可测性进行判断,并合理裁剪或者补充一些性能需求。

2、测试需求分析主要有以下的几个关键点: 
测试的目的是什么 
评估系统的能力 
识别体系中的弱点 
验证系统稳定性和可靠性 
系统调优

3、测试要素分析: 
用户数量 
测试执行的功能 
用户分布(即执行每种功能的用户数) 
硬件环境(包括网络环境) 
软件环境 
数据量

4、其它分析 
系统运行中所出现的问题有什么特征或规律 
疲劳测试执行时间多少 
性能需求的指标是什么等 
产物:性能测试的概要设计,详细设计

二、性能测试计划 
1、测试目的不同,则相应的测试策略不同 
性能符合性验证—负载测试、疲劳强度测试。 
性能能力验证—压力测试、疲劳强度测试。 
性能调优—测试-调整-测试。负载测试、压力测试、疲劳强度测试。

2、性能测试计划包含哪些内容 
测试需求 
测试策略 
测试场景 
测试环境 
测试准备 
人员及时间安排 
问题不对策 
产物:测试计划

三、性能测试设计 
1、测试设计 
测试环境准备 
测试数据准备 
测试用例、场景准备 
测试工具准备 
开发测试脚本 
布置测试场景 
产物:测试用例、测试案例,测试环境,测试脚本

四、性能测试结果 
1、执行测试场景 
保存测试结果 
产物:测试结果

五、性能测试分析
--------------------- 

1、性能测试流程
在很多同学的概念中,性能测试就是使用Loadrunner、Jmeter等工具进行压测,然后得到测试结果即可,但仔细想想,对谁进行测试?测试目的是什么?监测指标有哪些?得到的结果如何分析(怎样的结果算通过)等等。所以使用工具压测只是性能测试最基础的一个步骤,下面先来看看性能测试的一般流程: 
æ§è½æµè¯æµç¨

(1)业务学习:通过查看需求文档、PRD等相关文档+手工操作来了解系统功能; 
(2)分析需求:分析系统的非功能需求,圈定性能测试的范围,了解系统性能指标; 
(3)工作评估:工作量分解,评估工作量,计划资源投入(需要多少硬件资源,多少人力、时长来完成测试工作)。 
(4)设计模型:可以理解为测试场景,是单一测试场景还是混合测试场景; 
(5)编写计划:测试计划应明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等; 
(6)准备测试环境:准备服务器(部署被测系统),负载机(安装压测工具,产生负载的机器) 
(7)准备测试数据:根据测试场景(设计模型)准备数据,原因有两个:a、有些数据是支撑系统运行的基础(比如我们要对登录进行压测,首先需要准备一些注册好的账号);b、不同量级数据影响性能结果(比如从不同量级的数据库查询结果,时间肯定不一样),至于准备什么量级的数据则需要跟项目实际情况来设计; 
(8)开发脚本:根据测试场景,测试用例开发测试脚本(录制或手动编写); 
(9)测试执行:运行测试; 
(10)缺陷管理:跟踪测试过程中发现的缺陷; 
(11)性能分析:对性能测试结果进行分析,是否满足预期目标,如果不满足则需找出原因; 
(12)性能调优:根据上一步的分析,尝试优化系统; 
(13)测试报告:对测试工作进行总结,报告测试结果,发现的问题等 
(14)评审:对性能报告中的内容进行评审,确认问题、评估上线风险。虽然有时候性能测试结果不理想,但基于时间和成本等方面的考虑也会上线,后续再快速迭代。

性能测试交付件:

测试计划
测试脚本
测试程序
测试报告
2、性能测试成功要素
性能测试上手较难,是一门融合测试、开发、运维、需求调研、架构、协调管理等综合技能的学科,掌握一个测试工具只是最基础的一步。性能测试有几大难点:

需求分析
场景设计
性能诊断调优
环境搭建和模拟
3、性能测试常用术语
(1)负载:模拟用户操作对服务器造成压力的过程,比如模拟100个用户同时登录; 
(2)性能测试(Performance Test):在指定的负载情况下,系统性能指标(响应时间、吞吐量等)是否满足要求; 
(3)负载测试(Loading Test):在一定的硬件环境前提下,通过不断的增加负载(不同的虚拟用户数)来确定满足性能指标情况下所能够承受的最大并发用户数。简单来说,就是帮我们对系统进行定容定量,找出系统性能拐点,给予生成环境规划建议。这里说的性能指标包括:TPS(每秒事务数)、RT(事务平均响应时间)、CPU Using(CPU利用率)、Memory Using(内存利用率)等; 
(4)压力/强度测试:在一定的软硬件环境下,通过高负载的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统在极限状态下长时间运行十分稳定,确定是否稳定的指标包括TPS、RT、CPU利用率、内存利用率等; 
(5)稳定性测试:在一定软硬件环境下,长时间运行一定的负载,确定系统在满足性能指标的前提下是否运行稳定。与上面的压力/强度测试区别在于负载并不强调在极限状态下,一般使用目标负载的1.5~2倍的负载数量进行测试; 
(6)TPS:每秒完成事务数。事务是指一个操作集合,不同场景中事务所包含的操作不同,这个概念我们后续结合实例介绍; 
(7)RT:响应时间。指一个事务花费多长时间完成,为了使这个值更具代表性,会统计平均值,也就是ART,不过一般说RT就是指平均响应时间。 
(8)PV(Page View):每秒用户访问页面的次数,此参数可以帮助我们分析平均每秒有多少个用户访问页面 
(9)Vuser(Virtual User):虚拟用户,用来模仿真实用户进行操作; 
(10)Concurrency(并发):

狭义并发:虚拟用户在同一时刻做同一件事情或操作,这种操作一般针对同一类型的业务,或者所有用户进行完全一样的操作,目的是测试数据库和程序对并发操作的处理。
广义并发:虚拟用户对系统进行操作,但操作可以不同;
狭义并发多适用于单一测试场景,广义并发多适用于混合测试场景、稳定性测试场景; 
(11)场景(Scenario):模拟真实用户某个操作的过程,这个过程就可以称为一个场景,我们举个论坛系统的例子;

单一场景:用户登录,单单这个login的动作就是一个场景;
混合场景:用户发帖场景,可能包含以下几个动作,先登录,打开发帖页,输入文字,选择板块,发帖,这几个动作组成了一个发帖的混合场景;
(12)思考时间(Think Time):因为用户在进行操作时,每个操作是有时间间隔的,对应到脚本中,就是两个请求脚本之间的时间间隔

4、性能测试通过标准

è¿éåå¾çæè¿°

原文:https://blog.csdn.net/duzilonglove/article/details/79867660 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值