什么叫压⼒测试(Stress Testing)
在测试两个字前⾯加上⼀个限定词,就变成了很多测试。例如:压⼒测试、负载测试、性能测试、功能测试等等。但究竟什么是压⼒测试,初学者往往望⽂⽣义,都能说上⼀两句。是啊,谁还不懂“压⼒”是什么意思?谁还没经历过压⼒?然⽽,压⼒测试的真正含义和⽬的,它和其它测试(特别是负载测试)的区别,不是所有的软件⼯程师都是掌握的。 按照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的所有语句都能本执⾏。可以看出,有⽆压⼒测试,对程序语句和逻辑分⽀的覆盖是不⼀样的。英姿带
inu-006
很多⼈误将负载测试和压⼒测试混为⼀谈,认为给程序的负载⼤,程序经受的压⼒就⼤。其实不然,负载测试考验的是系统的吞吐量,假如⼀个⽹站号称能经受100万个⽤户同时访问,那么就想⽅设法模拟出100万个⽤户对⽹站发起连接,观察服务器能否正常作出反应。⼀般地,负载测试是给被测的系统“喂饱”,看看它能否吞下去,系统为了能吞下⼤的输⼊,常常在内部机制上下⼯夫,或者扩⼤服务器的配置。
负载测试是尽量增加对系统的访问,⽽压⼒测试是尽量使系统在资源稀缺的环境下运⾏。⼆者区别很⼤。但不排斥两个技术同时使⽤。