系统性能测试包含很多内容、种类,例如峰值测试、负载测试、压力测试、强度测试都属于性能测试的范畴。
在通常的系统性能测试工作中,可能涉及的性能测试种类主要有峰值测试、压力测试、负载测试、强度测试、容量测试、并发测试、可靠性测试、配置测试,以及狭义范围的性能测试等。多数团队中,这些种类的性能测试很少单独一一实施,一般会结合起来实施或选择其中几种来实施。对于初学者很多时候这些名词会误导初学者,搞不清这些测试种类的区别和关系,又不知道如何开展工作。实际上,上面提到的性能测试基本属于联机交易的性能测试范畴,而这些性能测试种类的本质都是并发用户的性能测试:或者调整加压方式、或者调整加压时间、或者调整压力大小,再配合一些诸如测试环境、测试参数的调整,就得到了不同种类的性能测试。
下面介绍一下各类测试的主要内容和特点。
【资料图】
压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收用户请求的性能点,来获得系统能提供的最大服务级别的测试。例如,测试一个Web站点在大量的负荷下,何时系统的事物响应时间会变得不可接受或者事务不能正常执行。
压力测试是为了发现在什么条件下应用程序的性能会变得不可接受,主要通过改变应用程序的输入以对应用程序施加越来越大的负载,直到发现应用程序性能下降的拐点。压力测试和负载测试有些类似,但是通常把负载测试描述成一种特定类型的压力测试—例如不断增加用户数量以及对应用程序进行压力测试。
负载测试:通过在被测试系统上不断增加压力,直到性能指标达到极限,例如响应时间超过预定指标或者某种资源已经达到饱和状态。这种测试可以找到系统的处理极限,为系统调优提供依据。
通常情况下,压力测试侧重测试系统在不同压力下的表现,重点关注压力大小;负载测试则侧重测试系统在较大压力下长时间进行加压时的表现,重点关注加压时间。
实际的测试工作中,压力测试和负载测试并没有进行严格区分:很多成为压力测试的场景也会长时间加压,很多称为负载测试的场景也会不断改变负载的压力大小,因为项目干系人根本搞不清楚概念上细节的差别,所以这些名词成了性能测试的一个叫法而已。
对于这些概念,最好的方式仍然是回归本质,不以这些互相存在关联的名词来划分测试种类。
强度测试:强度测试主要是为了测试系统在异常情况下的处理能力,例如测试系统在较低的资源配置下的性能。下面市一些强度测试的实际案例。
正常压力下用户点击率为“1000次/秒”,运行点击率为“2000次/秒”场景。
运行CPU或内存利用率在90%以上的场景。
运行可能导致磁盘数据存取异常频繁的场景。
强度测试是特别重要的测试,对评估系统的稳定性、健壮性、扩展性均具有重要的意义。这种在特殊条件下的测试,更容易发现系统深层的性能问题。
并发测试:主要用来测试多用户同时访问同一系统/同一模块/同一业务功能/同一数据记录时是否存在性能问题,几乎所有的性能测试都会涉及并发测试。
大数据量测试:大数据测试重点分为两种,一种是针对某些系统的新建记录、统计查询等业务进行的运行时大数据量测试;另一种是历史大数据测试,测试存量数据达到一定量级下的性能。
配置测试:配置测试主要是通过测试找到系统各项资源的最优分配原则,其测试结果是系统生产环境参数配置的重要依据。例如,可以通过测试不断调整应用服务器各项参数,使之达到一个较好的性能。
可靠性测试:测试系统在一定压力下长时间运行后是否稳定可靠,主要用来测试系统是否可以长时间稳定对外提供可靠的服务。例如可以进行使CPU保持70%~90%利用率的压力,连续对系统加压7×24小时的测试,然后根据结果分析是否稳定可靠。
狭义性能测试:主要用来描述常规的性能测试,通过模拟生产运行时的使用场景和业务压力来测试系统的性能是否满足生产性能要求。例如可以投产环境来进行测试,测试出系统的最大业务处理能力等指标,为接下来的投产运维提供参考。性能测试是一种“正常压力”下的测试,主要是测试正常使用是否满足性能要求,同时可能为了保留系统的扩展空间而进行一些稍稍超出“正常压力”范围的测试。
通过深入了解上面的各个测试种类,可以看出实际上它们大多是密切相关的。例如,连续加压24小时可靠性测试,可能包含了强度测试、并发测试、性能测试和负载测试等。因此,在进行性能测试规划与设计时决不能忽略它们的内部联系,而是抓住本质后以一种高效率的方式来组织性能测试。
标签: