您好,欢迎访问三七文档
Web测试随着Internet的日益普及,现在基于B/S结构的大型应用越来越多,可如何对这些应用进行测试成为日益迫切的问题。有许多测试人员来信问我B/S的测试如何做,由于工作较繁忙,对大家提出的问题也是头痛医头脚痛医脚,没有对WEB的测试过程做一个整体的概述。希望通过本篇能够让大家了解大型Web应用是如何来进行测试的。B/S下的功能测试比较简单,关键是如何做好性能测试。目前大多数的测试人员认为只要跑一些测试工具证明我的产品是可以达到性能的就ok了,为了证明而去测试是没有任何价值的,关键是要发现产品性能上的缺陷,定位问题,解决问题,这才是测试要做的。首先我们从两个方面分析如何进行WEB测试,从技术实现上来讲一般的B/S结构,无论是.NET还是J2EE,都是多层构架,有界面层,业务逻辑层,数据层。而从测试的流程上来说,首先是发现问题,分析问题,定位问题,再由开发人员解决问题。那么B/S的结构的测试如何来做?如何发现问题是我首先要介绍的,在做WEB测试之前你需要一些资料,比如产品功能说明书,性能需求说明书,不一定很完善,但一定要有,明确测试目标,这是基本的常识,可是我往往看到的是已经开始动手测了,但还不知自己的系统要达到的性能指标是什么。这里我简单讲一下测试的性能指标:1、通用指标(指Web应用服务器、数据库服务器必需测试项):*ProcessorTime:指服务器CPU占用率,一般平均达到70%时,服务就接近饱和;*MemoryAvailableMbyte:可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重;*PhysicsdiskTime:物理磁盘读写时间情况;2、Web服务器指标:*AvgRps:平均每秒钟响应次数=总请求时间/秒数;*Avgtimetolastbyteperterstion(mstes):平均每秒业务角本的迭代次数,有人会把这两者混淆;*SuccessfulRounds:成功的请求;*FailedRounds:失败的请求;*SuccessfulHits:成功的点击次数;*FailedHits:失败的点击次数;*HitsPerSecond:每秒点击次数;*SuccessfulHitsPerSecond:每秒成功的点击次数;*FailedHitsPerSecond:每秒失败的点击次数;*AttemptedConnections:尝试链接数;3、数据库服务器指标:*User0Connections:用户连接数,也就是数据库的连接数量;*Numberofdeadlocks:数据库死锁;*ButterCachehit:数据库Cache的命中情况;上面的指标只是一些通用的指标,起到抛砖引玉的作用,对于不同的应用你还必需作相应的调整,比如程序使用的是.NET技术的,则必需加入一些针对性的测试指标。对于这些指标的详细了解,你可以参考Windows下面的SystemMonitor的帮助与LoadRunner、ACT的帮助。对于发现问题,指标的设置非常重要,它会帮你定性的发现一些错误。对于定性的压力测试我就不做过多的分析,工具很多,流行的主要有LoadRunner、ACT、WAS、WebLoad各个工具有它的使用范围;其中我各个认为:LoadRunner最全面,它提供了多种协议的支持,对复杂的压力测试都可以胜任;WAS与ACT则对微软的技术支持的比较好,其中WAS支持分布式机群测试;ACT则是与.NET集成比较好,支持ViewState(.NET下控件缓存的支持)的测试。在这一阶段测试你要不断的跟据系数的测试目标进行变化,一开始由于系统过于庞大,所以我们要分成若干个子系统,各个子系统的性能目标必需明确,主要是并发指标定一个阈值,同时设定一些与系统相关的测试参数,应用服务器,数据库服务器都要有,对达不到阈值的与一些通用参数有问题的子系统进行深入分析。比如它的并发达不到你的要求,证明子系统性能有问题,或是数据库用户连接过高,程序没有释放用户连接等等。这个我们要对子系统进行详细测试,由于B/S结构下,图片的请求对性能的影响较大,所以我们对子系统测试时要分两个部分进行:一、非程序部分,即图片等等;二、应用程序本身。通过事务或函数的分离,可以把这两块实现单独的测试,具体做法参考各个工具的手册,我这里就不做说明。对子系统的测试参数的设置要求则更高,它有助你后面精确的定位问题,比如对异常、死锁、网络流量等等前面没有注意到的情况的增加;同时你要注意增加测试参数的收集对系统的性能影响比较大,所以一般不要超过10个。刚刚介绍的整体的性能测试指标也不要增加很多,这样影响会小一点。最后在这一阶段要说明的是数据库的数据量会很大程度的影响性能,所以要根据前面的性能需求说明书向数据库中模拟相应的数据量,来进行测试,这样才有更高的可信度。上面所说的是对问题的发现,下面就是分析问题原因,这一步的要求比较高,一般由测试人员与程序员配合完成,当然如果你有相当的开发经验,再做这方面的测试,就更为难得。下面我们说说如何精确定位问题,出现问题的可能性可能有很多种,大致分以下几种:一、性能达不到目标;二、性能达到目标,但有一些其它的问题,比如异常、死锁。缓存命中过低,网络流量较大;三、服务器稳定性的问题,比如内存泄漏……。要发现这些问题起马的要求要有一款使用的比较称心的性能分析与优化工具,比如微软的.NET下就有自己开发的工具,对Borland的Java开发工具中也有类似的工具,但我个人认为更好的工具是Rose下的Purify与Quantify,主要是他对.net与java、C++都有支持,而且分析效果特别专业。我们先了解一下RationalPurify。RationalPurify能自动找出VisualC/C++和Java代码中与内存有关的错误,确保整个应用程序的质量和可靠性。在查找典型的VisualC/C++程序中的传统内存访问错误,以及Java,C#代码中与垃圾内存收集相关的错误方面;RationalQuantity则是一款针对函数级的性能分析利器,使用它你可以从图形化的界面中得到函数调用的时间,百分比与次数,以及子函数所占时间,使你可以更快的定位性能瓶颈。我们先说性能优化与异常的处理,性能优化有一个原则——即用时间比例最大的进行优化,效果才最明显。比如有个函数它的执行时间为30秒,如果你优化了一百倍则执行时间为0.3秒,提升了29.7秒;而如果它的执行时间为0.3秒,优化后为0.003秒,实际提升了0.297秒,提升的效果并不明显而且写过程序的人都知道,后者性能优化的代价更大。在性能优化的过程中,一般是先数据库,后程序。因为数据库的优化不需要修改程序,修改的风险很小。但如何才能确定是数据库的问题,这就需要技巧,在使用Quantity时,你一路分析下去,大多数最终会发现,是数据库查询函数占用时间比较大,比如什么,SqlCmd.ExecuteNoQuery等等数据库执行函数,这时你就需要分析数据库,呵呵。数据库的分析原则是先索引,后存储过程,最后表结构视图的优化。索引的优化是最简单也是通常最有效的方法,如果合理的使用会带来意想不到不到的效果。在这里我要给大家简单的介绍一下我的最爱:SQLProfile、SQL查询分析器。PreciseSQLProfile是一个SQL语句跟踪器,可以跟踪程序流程使用的SQL语句与存储过程,结合查询分析器对SQL的分析,可以对索引的优化做出很好的判断,但索引也不是万能的,在增删改较多的表,索引过多会引起这些操作的性能下降,所以判断还是需要一定的经验。同时针对用户使用频度最高的SQL进行优化也是最行之有效的,这时我则需要Precise,它可以观测某一个较长时间内的SQL语句的执行情况。数据库优化的潜能挖光后,如果还是达不到性能要求或是还有问题,则要从程序来进行优化,这是程序员做的事。测试人员要做的,就是告诉他们,哪个函数执行过多引起了性能下降,比如异常过多,某个循环过多,或是DCOM调用过多等等,但说服程序员也是一件不容易的事,你要在这一阶段做的出色一定要有几年的编程经验,并且要让程序员感到听你的性能会有提升,这是一件很不容易的事情哦。内存的分析,一般是一个长期分析的过程,要做好不容易,首先要有长期奋战的准备,其次内存泄漏的分析最好是放在单元测试之中同步进行,而不是要等到最后再去发现问题,当然出了问题也只好面对,一般这类问题都是在服务器运行了很久才暴露出来,一旦发现问题后,则需要定位问题,分析的原则采用子系统相互独立运行,找到最小问题的系统集,或是借助内存分析工具观察内存对象情况,初步定位问题,再用Purify进行运行时分析,通常C++内存问题比较多,Java与.NET比较少,一般由GC不合理引起。C++的内存错误就比较多了,主要常见的有:1、ArrayBoundsRead(ABR):数组越界读2、ArrayBoundsWrite(ABW):数组越界写3、BeyondstackRead(BSR):堆栈越界读4、FreeMemoryRead(FMR):空闲内存读5、InvalidpointerRead(IPR):非法指针阅读6、NullPointerRead(NPR):空指针阅读7、UninitializedMemoryRead(UMR):未初始化内存读写8、MemoryLeak:内存泄漏注:如果需要更多的信息,可以参见Purify的帮助信息。顺便提一句,为什么我要说做单元测试时做内存分析比较好,由于单元测试针对的是单一功能,这时结合单元测试案例做内存分析会更快的定位问题,同时由于问题较早的发现,则后期的风险则会减少,当然如果结合代码覆盖工具PureCoverage来做就更完美了。注:本篇只是对B/S应用的测试过程作一个整体的描述,对某一个阶段使用的工具只是作大概的介绍,你也可使用你比较熟悉的工具达到相同的目标。性能管理说到Windows环境下的性能管理,许多人首先想到的可能就是无处不在的PerformanceMonitor工具。早在WindowsNT时代,PerformanceMonitor就是获取性能信息的主要工具,当然,任务管理器和Windows管理规范(WindowsManagementInstrumentation)也属于常用工具之列,它们不仅能够提供性能数据,而且还能提供其他与性能有关的管理信息。本文介绍了一些充分发挥这些经典工具潜能的技巧,同时介绍了WindowsXP新增的工具,探讨如何运用它们来评估系统的性能情况。一、什么是性能管理?对于许多管理员来说,Windows的性能管理不外乎打开控制面板→管理工具中的“性能”程序,即PerformanceMonitor程序,然后检查一下CPU利用率、磁盘忙闲状况、内存压力,而且通常只有在出现性能问题时才会去检查,例如服务器响应突然变慢,或者用户不能访问服务器。这种性能管理方式完全属于事后补救的方式,只起到了救火队员的作用,由于缺乏详尽、明确的事前评估、规划,算不上优秀的策略。要实现有效的性能管理,一定要在出现问题之前掌握系统的性能情况。只有事先采取有效的性能管理策略,才能全面掌握系统的性能特征,在此基础上,就可以估计何时可能出现性能问题以及问题的具体表现。预先收集的性能数据还可以用来规划未来的运算能力需求,例如,假设有一个IISWeb服务器,当并发用户数量是200时CPU的利用率是60%,据此可以推断系统负载何时达到极限,以及达到负载极限时能够支持的并发用户数量。另外,根据网站的增长情况,还可以估计出何时需要增添硬件设备。系统的整体性能由许多因素决定,例如CPU利用率,CPU队列长度(即,有多少任务正在等待CPU的服务),磁盘忙闲程度(即,磁盘驱动器有多少时间用于响应请求),可用的物理内存,网络接口的利用情况,等等,表一概括了最常用的性能计数器。表一:重要的性能计数器性能对象计数器提供的信息MemoryAvailableBytesAvailableBytes显示出当前空闲的物理内存总量。当这个数值变小时,Windows开始频繁地调用磁盘页面文件。
本文标题:Web性能测试
链接地址:https://www.777doc.com/doc-5392481 .html