对于软件应用系统,仅仅从功能上满足用户的需求是不够的,还需要从性能、可用性等方面更好地满足客户的需要。
尤其对于实时软件系统、嵌入式系统和在线服务系统,这方面要求更高些。这就要求我们要做好系统的压力测试、性能测试、容量测试,以保证系统能提供良好的高性能、高可用性,让客户满意。
1.强度测试或压力测试
强度或压力测试是在一种需要异常数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。异常情况,主要指那些峰值、极限值、大量数据的长时间处理等,包括:
压力测试可以分为稳定性测试和破坏性测试:
在压力测试中,会给程序加上一些跟踪机制(如log、日志等),然后查看监视系统、服务器等性能的日志文件是必要的,找出问题出现的关键时间或检查测试运行参数,通过分析问题或参数从而有目的地调整测试策略或测试环境,使压力测试结果真实地反映出软件的性能。
2.性能测试
系统的性能指标,一般赢在产品需求文档中有明确定义,有三种形式描述软件系统的性能指标:
性能测试,根据其目的分为:
性能测试的方法,主要有:
性能测试,一般都通过测试工具来模拟人为的操作而进行。性能测试的重点在于测试环境的建立、前期数据的设计与后期数据的分析。因为性能测试需要获得一定特定条件下(如100、200、500、1000个实时的连接)的系统占用资源(CPU、内存等)数据或系统行为表现,而且还要依靠测试工具或软件系统记录下这些指标变化的数据结果。例如,如果对一个Browser/Server结构的网络实时在线的培训系统软件进行测试,系统性能焦点是在不同数量的并发连接下,服务器的CPU、内存的占用率、客户端的响应时间等,如表1所示。
表1 HTTP连接性能表
HTTP |
1´5 |
1´50 |
1´100 |
1´300 |
1´500 |
1´600 |
1´700 |
1´800 |
1´900 |
…… |
10´5 |
60´5 |
CPU (%) |
1.2 |
2.5 |
4.5 |
11 |
20 |
20 |
28 |
23 |
25 |
… |
4 |
24 |
物理内存(M) |
55 |
45 |
38 |
38 |
32 |
48 |
75 |
46 |
37 |
… |
178 |
232 |
虚拟内存(M) |
836 |
841 |
831 |
855 |
865 |
858 |
867 |
874 |
884 |
… |
871 |
1,472 |
加入时间(s) |
12.04 |
12.14 |
11.6 |
15.48 |
126.1 |
104.76 |
168.1 |
123.7 |
218.11 |
… |
12.01 |
9.17 |
建会时间(s) |
12.01 |
11.35 |
12.38 |
13.32 |
13.63 |
14.06 |
16.35 |
14.98 |
17.68 |
… |
10.9 |
11.39 |
延时(s) ……. |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
断开时间(s) |
8.58 |
9.11 |
7.94 |
9.09 |
8.26 |
8.35 |
8.46 |
11.41 |
11.1 |
… |
8.79 |
8.22 |
测试过程中,并发连接的不断增加(负载的增加)在系统性能上的表现越来越明显。在系统性能测试时,加载过程中,每到一个测试点时须让系统平稳运行一段时间后再获取数据,以消除不同测试点的相互影响。从表中可以看出,同样是300个用户,1´300与60´5的性能表现差别很大,加载的方式对系统性能影响也较大,所以,尽量模拟不同的加载方式来进行系统的性能测试。除此之外,还可以测试TCP、HTTPS等不同连接方式下的数据,进行比较。通过比较和分析,可以清楚知道系统的性能状况,以及什么样的条件下系统性能达到最佳状况、什么地方是性能的瓶颈。性能测试要求测试环境应尽量与产品运行环境保持一致,应单独运行,尽量避免与其他软件同时使用。
3.容量测试
通过性能测试,如果找到了系统的极限或苛刻的环境中系统的性能表现,在一定的程度上,我们完成了负载测试和容量测试。容量可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。
容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。对软件容量的测试,能让软件开发商或用户了解该软件系统的承载能力或提供服务的能力,如某个电子商务网站所能承受的、同时进行交易或结算的在线用户数。知道了系统的实际容量,如果不能满足设计要求,就应该寻求新的技术解决方案,以提高系统的容量。有了对软件负载的准确预测,不仅能对软件系统在实际使用中的性能状况充满信心,同时也可以帮助用户经济地规划应用系统,优化系统的部署。
3.压力测试、容量测试和性能测试的关系
压力测试可以看作是容量测试、性能测试和可靠性测试的一种手段,不是直接的测试目标。压力测试的重点在于发现功能性测试所不易发现的系统方面的缺陷。而容量测试和性能测试是系统测试的主要目标内容,也就是确定软件产品或系统的非功能性方面的质量特征,包括具体的特征值。容量测试和性能测试更着力于提供性能与容量方面的数据,为软件系统部署、维护、质量改进服务,并可以帮助市场定位、销售人员对客户的解释、广告宣传等服务。
压力测试、容量测试、性能测试,测试的方法相似、相通,在实际测试工作中,往往结合起来进行,以提高测试效率。一般会设置专门的性能测试实验室,完成这些工作。即使用虚拟的手段模拟实际操作,所需要的客户端有时还是很大的,所以性能测试实验室的投资较大。对于许多中小型软件公司,可以委托第三方完成性能测试,可以很大程度上降低成本。
预知后事如何,请读下回分解:第14回 容错性测试和安全性测试
版权所有,软件测试演义® ——系列讨论的目录,见: 软件测试演义——中高级系列(序)