什么叫压力测试(Stress Testing)

发表于:2010-4-01 13:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:shangyichen(CSDNBlog    来源:51Testing软件测试网采编

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

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

  下面有一个例子。

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

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

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盘不会本占满,则执行到的语句只有1、2和19三行,如果你选用的机器,其C、D、E三个磁盘都很小,则日志很快就会占满这几个磁盘,则1-19的所有语句都能本执行。可以看出,有无压力测试,对程序语句和逻辑分支的覆盖是不一样的。

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

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

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号