性能测试类型V0.2
网易杭州研究院
性能测试类型
修订记录
1 压力变化模型
a 点:性能期望值
b 点:高于期望,系统资源处于临点 c 点:高于期望,性能处于拐点
d 点:系统资源出现瓶颈,性能下降
通过如上模型图中的情况,我们大致可以将当前性能测试分成如下4类: 性能测试
以上模型图为准则,在a 点与b 点之间的系统性能,表示以性能目标预期为前提,对系统进行施压,验证系统在资源可用范围内,是否能达到性能预期的目标。 负载测试
b 点的系统性能,表示在系统在一定的压力下持续一段时间,直到系统的某项或多项指标达到极限,比如系统资源CPU 、Memory 或者IO 等达到饱和状态。 压力测试
b 点到d 点的系统性能,表示在超过安全负载的条件下,不断对系统进行加压,直到系统不能再接受请求,并可以确定一个系统瓶颈的情况下,目的是为了找出系统的瓶颈,需要对系统进行调优。 稳定性测试
a 点到b 点的系统性能,表示被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定,一般稳定性测试时间为n*12小时。
其它测试类型:根据测试情况而定。
2 性能测试
性能测试的目的是以性能指标预期为前提,对系统进行施压,验证系统在无资源性能瓶颈的情况下,是否能达到预期目标。
系统的性能指标,一般应在产品需求文档中有明确定义,有三种形式描述软件系统的性能指标:
给出产品性能的主要指标,如在100000记录中查询一个特定数据的时间为0.5秒。 以某个已发布的版本为基线,如比上一个版本的性能提高30-50%。 和竞争对手的同类产品比较。
性能测试其目的分为:
产品性能质量测试,通过测试,决定产品是否达到预期性能指标(非功能性需求) 基准值测试,通过对当前产品的性能测试,确定产品具体的性能指标,建立性能指标基准。
基准值,作为后继产品发布的性能参考(在新版本中,性能指标要求只升不降)或和竞争对手产品比较的参考。
性能规划测试,通过不断的测试,确定所需要的硬件配置(内存、CPU 、网络等)、软件配
置,以满足实现定义的性能指标要求。这种测试,对于软件系统的部署是非常有意义的。同时,也可以进一步了解硬件参数、软件参数对系统性能的影响程度,从而保证系统具有很好的扩充性或事先制定较好的系统增容的计划。
性能测试的方法,主要有:
稳定压力加载,一次性将负载加到某个水平,持续一段时间,也称为flat 测试。 逐渐加载或交替加载到某个负载水平,也称为“ramp-up”测试。
峰谷测试,确定从系统高峰时间的负载转为几乎空闲、再攀升到高负载这样峰值交替情况
下的系统性能状态/指标。这种测试兼有容量测试的特点或属于容量测试的一部分。
性能测试,一般都通过测试工具来模拟人为的操作而进行。性能测试的重点在于测试环境的建立、前期数据的设计与后期数据的分析。因为性能测试需要获得一定特定条件下(如100、200、500、1000个实时的连接) 的系统占用资源(CPU 、内存等)数据或系统行为表现,而且还要依靠测试工具或软件系统记录下这些指标变化的数据结果。例如,如果对一个B/S结构的网络实时在线的培训系统软件进行测试,系统性能焦点是在不同数量的并发连接下,服务器的CPU 、内存的占用率、客户端的响应时间等。
测试过程中,并发连接的不断增加(负载的增加)在系统性能上的表现越来越明显。在系统性能测试时,加载过程中,每到一个测试点时须让系统平稳运行一段时间后再获取数据,以消除不同测试点的相互影响。所以,尽量模拟不同的加载方式来进行系统的性能测试。除此之外,还可以测试TCP 、HTTPS 等不同连接方式下的数据, 进行比较。通过比较和分析,可以清楚知道系统的性能状况,以及什么样的条件下系统性能达到最佳状况、什么地方是性能的瓶颈。性能测试要求测试环境应尽量与产品运行环境保持一致,应单独运行,尽量避免与其他软件同时使用。
3 负载测试
测试类型适用的场景
负载测试是在一定测试环境和测试场景下,通过增加系统负载,直到性能指标(例如响应时间) 超过预期指标或者某项计算资源(如CPU 内存等) 达到饱和状态为止。这种测试方法可以了解系统处理能力的极限,为性能调优提供数据。
负载测试中主要包括四个要素:测试环境、测试场景、负载及预期指标。 负载测试目标
负载测试的目标是确保系统在超出最大预期性能指标的情况下仍能正常运行。
负载加压方式
负载关注的指标 负载测试注意点
测试场景的设计以模拟业务场景为准则,这里前后台系统有所区别,前台系统主要基于页面或用户操作设计,考虑多个接口或调用的组合及逻辑串联,后台系统更注重单一接口的性能。
负载可以用并发用户数表示,根据测试场景设计每个虚拟用户所执行的操作序列,通过改变同时执行操作的用户数,达到向系统施加不同负载的目的。
预期指标常用的有吞吐率(即每秒事务数) 和响应时间指标,通常用“系统每秒处理事务数不低于XX ”和“响应时间不大于XX ”等来表述,它们是测试或优化终止的条件。此外,有时候也用“CPU 利用率大于50%而不超过70%”等资源使用限制作为预期指标。
4 压力测试
压力测试目标 压力测试加压方式 压力测试关注的指标 压力测试注意点
压力测试容易和负载测试混淆,在负载测试中存在一个系统处理能力的最优点或拐点。达到拐点以后,继续增加负载,系统性能出现下降趋势,具体表现为响应时间指标已不能满足预期或者CPU 内存等资源竞争持续恶化,直到资源出现短缺甚至严重不足。这一阶段的测试就是压力测试。但压力测试的范畴并不局限于此,这种压力测试的手段与负载测试基本相同,本质上都是通过增加系统访问达到增加负载的目的,被测系统处于一种被动受压的状态中,因此可以称之为被动型压力测试。
与之对应的,当然就有主动型压力测试。比如测试一个部署于单核机器上的CPU 密集型应用,或者部署于小内存机器时系统的运行情况。个人理解,一切资源如CPU 、内存、磁盘、线程池、缓存等都是有限的,通过人为限制资源数量和大小,使其出现争用的测试都可以归类为主动型压力测试。
5 稳定性测试
稳定性测试目标 稳定性测试加压方式 稳定性测试关注的指标 稳定性测试注意点
稳定性测试,顾名思义,其关注点是系统长期稳定运行的能力。具体定义为通过给系统施加一定业务压力的情况下,持续运行一段时间,测试系统是否能够稳定运行。测试前主要考虑以下三个方面:覆盖功能点,并发量和测试时长。
场景设计: 负载测试以单一场景划分,稳定性测试需要将主要的测试场景组合起来并行执行, 这样既可以达到覆盖大部分功能点的目的,又能够节省开发测试脚本的时间。
并发选择:并发量的选择可以根据线上系统的运行数据进行估算,或者在测试环境中增加压力使系统资源达到某个特定值(如CPU 利用率达到40%),然后固定这个压力正式执行测试。
测试时长:
测试时长一般至少保证3*24小时的稳定运行,有条件的可以测试7*24小时或更久。 稳定性测试主要关注系统吞吐率、响应时间等性能指标,及CPU 内存等资源使用的变化趋势,能够发现系统崩溃、内存泄漏等需要长时间运行才能暴露的问题。
6 容量测试Volume Testing
容量测试目标 容量测试加压方式 容量测试关注的指标 容量测试注意点
通过性能测试,如果找到了系统的极限或苛刻的环境中系统的性能表现,在一定的程度上,我们完成了负载测试和容量测试。容量可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。对软件容量的测试,能让软件开发商或用户了解该软件系统的承载能力或提供服务的能力,如某个电子商务网站所能承受的、同时进行交易或结算的在线用户数。知道了系统的实际容量,如果不能满足设计要求,就应该寻求新的技术解决方案,以提高系统的容量。有了对软件负载的准确预测,不仅能对软件系统在实际使用中的性能状况充满信心,同时也可以帮助用户经济地规划应用系统,优化系统的部署。
典型案例:
测试web 系统能承受的最大并发用户量。 测试数据库在极限情况下能容纳的记录数。 通过上传巨大的文件来测试文件系统。
7 配置测试
配置测试目标 配置测试加压方式 配置测试关注的指标 配置测试注意点
配置测试是通过对被测系统的软硬件环境的调整,了解各种不同环境对性能的影响。如linux 系统中网络子系统内核参数调整,存储系统对存储介质及文件系统类型的选择,http 服务器apache/nginx、web 容器tomcat/jetty及数据库服务器mysql 的参数配置等等。配置测试是系统调优的重要手段和依据。
8 基准测试Benchmark Testing
测试类型概念说明 测试类型目的说明 测试类型适用的场景 测试类型加压方式 测试类型关注的指标 测试类型要注意的地方
Benchmark 即基准测试,其主要作用是方便软件开发中多个版本之间的横向对比,为软件提供一个性能基准。它包括一组测试场景,在一定的测试环境和压力下执行,记录并比较性能指标的变化。
提取基准
提取基准点的主要原则是典型性和可重复性。典型性即选取主要或典型的业务场景和路径进行测试,这样的场景是用户频繁操作和对性能敏感的,响应时间等性能指标的下滑会直接影响到最终的用户体验。