Sunday, January 07, 2007

性能测试vs压力测试vs 负载测试(基于网络应用的概念区分)

来到新的公司里,已经快到3个月的时间,做着完全不同的事情。
在华为,除了日常工作以外,我接触到更多的是软件beta测试,我很喜欢这一块东西,可以和用户(或客户)打交道,可以做很多的统计分析,然后帮助软件更好的设计,满足用户(或客户)需求。 然后就是基站的维护,懂得了什么是集群技术(trunking not claster),熟称"push too talk",认识到了很多年龄相近、志趣相投、性格相仿的同事,一年过的很快。但想到自己可能一辈子和通信无缘,最终选择了离开,去寻找另外一片天空。

一开始接触更多是自动化测试,尤其是性能测试方面的工作,没有任何经验可谈,一点一点的开始积累,先从概念开始。
首先,对于性能测试方面的相关概念就有很多,例如性能测试(performance testing)、压力测试(stress testing)、负载测试(load testing)等等。它们之间有区别,但也有联系,从目的到技术都有所差别。
从我参看的各种测试的资料的理解上来看,性能测试和负载测试是一件事物的两个方面,而压力测试是将以上两种测试结合起来,然后再加上时间参数或者增加大量的并发事件,进行的极限黑盒测试。
所谓性能测试,其测试的对象是服务器端或源代码是否可以承受,通过一些服务器端安装的观测工具将其监视出的各项性能指标(例如cpu,memory,hard disk utilization,DB calls)进行分析,得到结论,程序结构,数据库的结构设计是否合理,服务器端的硬件是否可以承受的起较大的冲击,或者对较大冲击的处理是否合理,有时候也需要得到客户端的性能指标。它是从白盒或程序级的角度去分析问题。
大体上性能测试可以分成以下个层次:1、应用层,2、数据库层,3、系统层,4、网络层
另外,在做性能测试之前,我们应该在测试之前将以下两个指标确定下来,以便有测试的方向:
根据当前的用户数量估计出的期望负载。
(expected load in terms of concurrent users or HTTP connections)
合理的响应时间(acceptable response time )
run load test->measure performance->tune system
而负载测试,则是从黑盒的角度去模拟现实中大量用户使用系统或网站的情况,它更期望得到的是客户端的响应时间。也是我们常常使用一些工具,如JMeter, opensta,The Grinder 等等,实现的一些方法。这些也正是大多数测试人员所做的所谓“性能测试”。它的目的是证明系统可以承受预定负载的。

相反,压力测试,是证明系统不能承受的界限,它的目的是要让系统崩溃,找出极限范围。并给出合适的解决方法。 "把系统搞死是压力测试的目的"。在有限的硬件资源条件下,大数据量,大用户并发,可以达到压力测试的目的。压力测试的过程可以独立开来。

总结起来,测试性能是以下过程的重复:
run load test->measure performance->tune system

感谢以下连接:
http://agiletesting.blogspot.com/2005/02/performance-vs-load-vs-stress-testing.html
http://testing.csai.cn/testtech/200612291051321768.htm
推荐几本有关网络测试的书籍
"Testing computer software" by Kaner et al
"Software testing techniques" by Loveland et al
"Testing applications on the Web" by Nguyen et al.

No comments:

Post a Comment