在中国软件的“过去”,只要把功能实现,用户都会觉得满意。随着用户的成熟与软件在各行各业中的广泛使用,软件的性能已成为用户评判软件质量的重要衡量标准。不仅如此,软件的许多缺陷也只有通过性能测试才能容易揭露。软件的性能轻则失去客户,重则导致不可估量的严重后果。我相信许多人都看过发生在去年的一则闻:第29届奥林匹克运动会比赛预订门票网站在第一次开放当天给撑爆了。中国官方不得不在第一时间向世界公布暂停网上预售。听说负责此项目的相关负责人均被“革职”。不论终的原因如何,有一点是明确的,该网站的性能测试未能把好关。我想此项目的负责人不可能未做压力测试上线了。也不可能对该项目未引起高度的重视。因此,该事件恰好证明了软件的性能测试不是一件十分容易的事情,它不但要求测试人员具备很强的技术能力,还要具备综合分析问题的能力。做好一个项目的性能测试,参与的角色很多,需要有系统工程师,项目研发工程师,DBA,测试工程师,而且性能测试所需要掌握的知识非常宽广,不仅需要计算机专业知识,还需要统计学的知识。本文希望通过作者自己对性能测试所了解的冰山一角,来达到抛砖引玉的作用,激发大家对做好性能测试更深入的兴趣与探讨。

  1性能测试基本概念

  性能测试的重要性勿用多讲,大家都已清楚。那么想要做好性能测试,首先要了解与性能测试相关的一些基本概念。

  性能:一般来说,性能是一种指标,表明软件系统或构件对于其及时性要求的符合程度;其次,性能是软件产品的一种特性,可以用时间来进行度量[1]。

  性能测试:是用来测试软件在系统中的运行性能的。性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用白盒测试来进行评估,然而,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。一个系统的性能瓶颈往往是系统中各个模块中差的部分所决定。他的前提是要求在一定负载下,测试系统关键性能指标值是否符合用户需要与设计需求。

  负载测试: 在一个确定的软硬件环境下,对所要测试的模块或系统,加载一个确定的负载(压力),对模块或系统进行测试,探测模块或系统在这个确定环境确定负载下的性能表现。它的主要目的是验证模块或系统在给定的负载条件下的处理性能。

  压力测试:不断给系统或模块增加负载(离线增加)下的负载测试。它的主要目的是是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的大服务级别的测试。

  强度测试:系统资源不足(内存不足,cpu不足,空间不足)下,正常负载下运行系统或模块下的系统性能。它的主要目的是考查系统或模块稳定运行所需要的少资源。

  大家易混淆的几个概念是性能测试,压力测试与负载测试。我们从网络上google这几个关键词,便会发现不同的人会给出不同的解释。这其中的原因,一来到目前为止还未形成一个统一权威的概念,二来这三个概念之间本身存在相互关联的地方,在一定条件下可以相互转换。从广义的性能测试来看,性能测试,负载测试与压力测试都属于性能测试。它们之间的区别主要是应用在不同的测试目的。

  负载测试一定是一个明确的负载下的测试系统的性能。如测试网站同时登录60个人时网站的响应速度。一个系统在一个确定的环境下,它的综合性能是一定的。像一个方程式:综合性能=压力数*性能指数。压力测试是为了得到性能指数小时候(可以接受的小指数)大的压力数,性能测试是为了得到压力数确定下的性能指数。压力数指负载数,性能指数是指可以用计数器进行定性分析的一些指标。如应用在网络上的吞吐量,响应速度,通信领域的caps值等。

  2性能测试的目的

  执行性能测试,一般是基于以下4个方面的部分或全部。1)是验证系统在给定的条件下处理性能是否达到设计目标与用户要求。2)是探测系统在给定的条件下极限处理能力。3) 通过对系统各参数的调整,测试系统的优性能配置。4 通过性能测试发现功能测试难以发现的缺陷。在我们日常的性能测试中,第1种测试目的是多的。第3种要求较高,相对来说,较少用到。

  3性能测试的主要指标与来源

  软件性能测试常见的主要指标有:响应时间,吞吐量,并发用户数,资源利用率。