什么叫压力测试(Stress Testing)

曹焱
2023-12-01

 

什么叫压力测试(Stress Testing)

 

在测试两个字前面加上一个限定词,就变成了很多测试。例如:压力测试、负载测试、性能测试、功能测试等等。但究竟什么是压力测试,初学者往往望文生义,都能说上一两句。是啊,谁还不懂“压力”是什么意思?谁还没经历过压力?然而,压力测试的真正含义和目的,它和其它测试(特别是负载测试)的区别,不是所有的软件工程师都是掌握的。

按照Ron Patton在其《Software Testing》一书中的定义,压力测试是一种破坏性测试,它故意让软件在比较少的资源环境下运行,如低内存、小硬盘、慢CPU上运行,考验程序直至程序无法运行,从而发现软件缺陷。用一句形象的话来比喻,就是让软件在饥饿状态上运行。

下面有一个例子。

一般地,软件应生成运行日志,当系统出现故障时能根据日志快速诊断出问题所在,或用于操作的责任追踪和审计,这些日志文件可能记录在本地磁盘上,工程师如想到要这一步,即系统运行情况要记录在日志里,那么他就比完成学校老师作业进了一步。日志文件随着时间的推移不断膨胀,总有一天当前磁盘不够用了,无法记录新的日志,软件设计者要想办法解决这个问题,解决这个问题有两个办法:一是提示用户系统无法记录新的日志,让用户判断有不要中断系统运行;二是按照字母顺序,将日志记录到下一个磁盘,如D盘或E盘或F盘,如此等等。软件工程师如能想到这一步,那么他又进了一步。如果将后续的DEF等所有的盘都用完了,再提醒用户,或直接终止系统运行。

上述逻辑可用下面的伪程序表示:

 

 

1       If disk C has enough available space then

2                 Write Log to C;

3       Else

4                 If D disk exists then

5                          If D has enough available space then

6                                   Write log to D;

7                          Else

8                                   If E disk exist then

9                                             If E has enough available space then

10                                                    Write Log to E;

11                                           Else

12                                                    Prompt user: not available disk space for log;

13                                           End if

14                                 Else

15                                           Prompt user: not available disk space for log;

16                                 End if

17                        End if

18               End if

19     End if

在上面的例子中,如果对其进行压力测试,就是选用一台很小配置的机器,各磁盘的剩余空间都很小。在这种情况下运行系统,很快机器上的所有磁盘空间都能被占满,最后程序被迫终止。

这就是压力测试的一个典型例子,将程序施加“压力”,将其逼到没法运行的地步。如果你选用的机器C盘足够大,在你整个测试活动过程中,C盘不会本占满,则执行到的语句只有1219三行,如果你选用的机器,其CDE三个磁盘都很小,则日志很快就会占满这几个磁盘,则1-19的所有语句都能本执行。可以看出,有无压力测试,对程序语句和逻辑分支的覆盖是不一样的。

很多人误将负载测试和压力测试混为一谈,认为给程序的负载大,程序经受的压力就大。其实不然,负载测试考验的是系统的吞吐量,假如一个网站号称能经受100万个用户同时访问,那么就想方设法模拟出100万个用户对网站发起连接,观察服务器能否正常作出反应。一般地,负载测试是给被测的系统“喂饱”,看看它能否吞下去,系统为了能吞下大的输入,常常在内部机制上下工夫,或者扩大服务器的配置。

负载测试是尽量增加对系统的访问,而压力测试是尽量使系统在资源稀缺的环境下运行。二者区别很大。但不排斥两个技术同时使用。

 

 

 

 

 类似资料: