性能测试笔记系列之二:忘掉性能测试方法分类

阅读性能测试书籍或者查阅测试资料时常听到验收性能测试、压力测试、负载测试、可靠性测试等各种测试方法,有些说它们互不相关,也有些说都是性能测试的一种,下面来看看具体的各种方法。

验收性能测试:通过模拟生产运行的业务压力量和使用场景组合,测试系统性能是否满足生产要求,这种测试方法就是在特定的运行条件下验证系统的能力状态,看看系统是否达到我们预期的要求。也就是说测试之前我们已经确定了性能的目标。

负载测试:在被测系统上不断增加压力,直到性能指标超过预定的指标或者某种资源使用已经达到饱和状态。设定一个预期的性能指标,然后不断加压不断接近性能指标,确定加压量,这种方法一般用于确定系统处理极限。

压力测试:指测试系统在一定饱和状态下,系统能够处理的会话能力,判断系统是否会出现错误。检查被测系统在特定压力情况下的性能表现,多用于测试系统的稳定性,使被测系统处在一定压力下,检查被测系统的运行情况。

配置测试:这里的配置测试有别于功能测试中的配置测试,我们知道功能测试中的配置测试一般指被测软件与硬件及外设的兼容性,性能中的配置测试指通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找出系统各项资源的最优分配。从这里可以看出进行配置测试前应对被测系统的性能状态有初步了解,以便在配置测试结果分析过程中有基线参考。

可靠性测试:通过给被测系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否稳定运行。

失效恢复测试:针对有冗余备份和负载均衡的系统测试的,用来检验系统局部发生故障,用户是否能够继续使用系统以及用户将会受到多大影响。

Web前端性能测试:之所以这里把web前端性能测试独立出来,前面介绍的几种性能测试方法主要是针对服务器或者说被测系统的,而前端性能基本与并发用户数甚至系统无关,主要取决于浏览器的加载展现以及前端页面的组织方式,关注点多是页面响应时间,这个会在后期详细讲解。

好了,上面把各种性能测试测试大概介绍了一下(不要被这些定义给迷惑了),可能有些你不认为是性能测试的一种,至于是还是不是,我感觉争论这个没有意义(细心的会发现压力测试其实和可靠性测试没有太大的区别或者说可以合并),记得一个前辈说过:不要一定要给你的测试定义黑盒白盒还是灰盒,没有意义,等你忘掉这些把测试串通后即使给你一个马桶也照样可以测试。之所以划分各种测试方法,不是让我们一定给要测试的任务一个悦耳的定义,而是让我们在进行性能测试前要明确我们测试的目的,想得到或者想验证什么。

我们一般性能测试的目的无非就以下几种:

能力验证:系统在A条件下是否具有B能力

规划能力:应该如何使系统具有我们要求的能力,如系统如何满足不断增长的用户。

性能调优:如何使系统达到最优状态,环境部署,软硬件等等

缺陷发现:测试最直接的目的就是发现bug,这个没有好争论的

性能基准比较:这个多用于敏捷测试中,我没有做过敏捷测试就不多做介绍了,感兴趣的直接问度娘好了。

明确实际性能测试中的测试目的,可以确定使用哪种测试方法(虚的),关键是测试策略选择以及测试执行。

下面说说我在实际工作中所做的性能测试和稳定性测试:

1.  性能测试:实际项目中所做的性能测试多是以能力验证为测试目的,也可以理解为采用性能验证测试方法,开发定一个指标,如并发上传1000条报警信息,看看报警服务器能否正常接收处理并上传给MQ至数据库,报警服务器是否异常,资源消耗是否正常,需注意的有:CPU占用率,内存占用率,GDI,分页数,句柄数等等。使用的测试工具也是公司内部提供的测试工具,性能测试时间多是一天(我们公司性能测试时间应该算比较长的了,女朋友公司性能测试多是1小时或者更短,不同的用户需求设置不同的测试条件),性能测试多是第一个Build执行,我们知道如性能出问题了多是架构设计问题,属于比较严重的问题,以尽早确定被测系统的架构设计是否有问题及时修改。其它步骤由于涉及到具体的项目这里就不做具体介绍了。(由于用户对产品的性能指标要求不是很严格,实际测试中也是测试个大致值,性能测试过程和数据的收集也没有书本上或者大虾们说的那么复杂难搞,在这里还是要提醒大家性能测试一定要明确测试目的)

2.  稳定性测试:稳定性测试多是在被测系统比较稳定后进行,一般在第2或者3个Build进行。看语义就可以看出与性能测试的本质区别,时间长短问题,跟上面介绍到的可靠性测试和压力测试有点类似,在特定条件下,长时间运行被测系统,查看被测系统是否正常,如内存使用情况,CPU,句柄数,响应时间以及其它资源消耗是否有明显的变化,是否有波动。实际测试中如稳定性测试时间不够可以考虑增加压力缩短测试时间的策略,但是这中方法有一定的风险,最好在有经验的同事指导下进行。

以上是自己对性能测试各方法的一点看法和个人的实际测试简单概述,总结一句话就是:不要被各种性能测试方法所迷惑,明确自己项目性能测试目的。