快捷搜索:

Web应用程序的整体测试

跟着Internet的日益遍及,现在基于B/S布局的大年夜型利用越来越多,可若何对这些利用进行测试成为日益迫切的问题。有许多测试职员来信问我B/S的测试若何做,因为事情较忙碌,对大年夜家提出的问题也是头痛医头脚痛医脚,没有对WEB的测试历程做一个整体的概述。盼望经由过程本篇能够让大年夜家懂得大年夜型Web利用是若何来进行测试的。

B/S下的功能测试对照简单,关键是若何做好机能测试。今朝大年夜多半的测试职员觉得只要跑一些测试对象证实我的产品是可以达到机能的就ok了,为了证实而去测试是没有任何代价的,关键是要发明产品机能上的缺陷,定位问题,办理问题,这才是测试要做的。

首先我们从两个方面阐发若何进行WEB测试,从技巧实现上来讲一样平常的B/S布局,无论是.NET照样J2EE,都是多层构架,有界面层,营业逻辑层,数据层。而从测试的流程上来说,首先是发明问题,阐发问题,定位问题,再由开拓职员办理问题。那么B/S的布局的测试若何来做?

若何发明问题是我首先要先容的,在做WEB测试之前你必要一些资料,比如产品功能阐明书,机能需求阐明书,不必然很完善,但必然要有,明确测试目标,这是基础的知识,可是我每每看到的是已经开始着手测了,但还不知自己的系统要达到的机能指标是什么。这里我简单讲一下测试的机能指标:

1、通用指标(指Web利用办事器、数据库办事器必需测试项):

* ProcessorTime: 指办事器CPU占用率,一样平常 匀称达到70%时,办事就靠近饱和;

* Memory Available Mbyte : 可用内存数,假如测试时发明内存有变更环境也要留意,假如是内存泄露则对照严重;

* Physicsdisk Time : 物理磁盘读写光阴环境;

2、Web办事器指标:

* Avg Rps: 匀称每秒钟相应次数=总哀求光阴 / 秒数;

* Avg time to last byte per terstion (mstes):匀称每秒营业角本的迭代次数 ,有人会把这两者肴杂;

* Successful Rounds:成功的哀求;

* Failed Rounds :掉败的哀求;

* Successful Hits :成功的点击次数;

* Failed Hits :掉败的点击次数;

* Hits Per Second :每秒点击次数;

* Successful Hits Per Second :每秒成功的点击次数;

* Failed Hits Per Second :每秒掉败的点击次数;

* Attempted Connections :考试测验链接数;

3、数据库办事器指标:

* User 0 Connections :用户连接数,也便是数据库的连接数量;

* Number of deadlocks:数据库逝世锁;

* Butter Cache hit :数据库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++都有支持,而且阐发效果分外专业,我们先懂得一下Rational Purify, Rational Purify 能自动找出Visual C/C++ 和Java 代码中与内存有关的差错,确保全部利用法度榜样的质量和靠得住性。在查找范例的Visual C/C++ 法度榜样中的传统内存造访差错,以及Java,C# 代码中与垃圾内存网络相关的差错方面;Rational Quantity 则是一款针对函数级的机能阐发利器,应用它你可以从图形化的界面中获得函数调用的光阴,百分比与次数,以及子函数所占光阴,使你可以更快的定位机能瓶颈。

我们先说机能优化与非常的处置惩罚,机能优化有一个原则,即用光阴比例最大年夜的进行优化,效果才最显着,比如有个函数它的履行光阴为30秒,假如你优化了一百倍则履行光阴为0.3秒,提升了29.7秒,而假如它的履行光阴为0.3秒,优化后为0.003秒,实际提升了0.297秒,提升的效果并不显着,而且写过法度榜样的人都知道,后者机能优化的价值更大年夜。在机能优化的历程中,一样平常是先数据库,后法度榜样,由于数据库的优化不必要改动法度榜样,改动的风险很小。但若何才能确定是数据库的问题,这就必要技术,在应用Quantity时,你一起阐发下去,大年夜多半终极会发明,是数据库查询函数占用光阴对照大年夜,比如什么,SqlCmd.ExecuteNoQuery等等数据库履行函数,这时你就必要阐发数据库。

数据库的阐发原则是先索引,后存储历程,着末表布局视图的优化,索引的优化是最简单也是平日最有效的措施,假如合理的应用会带来意想不到不到的效果。在这里我要给大年夜家简单的先容一下我的最爱,SQLProfile,SQL查询阐发器,Precise,SQLProfile是一个SQL语句跟踪器,可以跟踪法度榜样流程应用的SQL语句与存储历程,结合查询阐发器对SQL的阐发,可以对索引的优化做出很好的判断,但索引也不是万能的,在增编削较多的表,索引过多会引起这些操作的机能下降,以是判断照样必要必然的履历。

同时针对用户应用频度最高的SQL进行优化也是最行之有效的,这时我则必要Precise,它可以不雅测某一个较长光阴内的SQL语句的履行环境。数据库优化的潜能挖光后,假如照样达不到机能要求或是还有问题,则要从法度榜样来进行优化,这是法度榜样员做的事,测试职员要做的,便是奉告他们,哪个函数履行过多引起了机能下降,比如非常过多,某个轮回过多,或是DCOM调用过多等等,但说吃法度榜样员也是一件不轻易的事,你要在这一阶段做的出色必然要有几年的编程履历,并且要让法度榜样员认为听你的机能会有提升,这是一件很不轻易的工作。

内存的阐发,一样平常是一个经久阐发的历程,要做十分艰苦,首先要有经久奋战的筹备,其次内存透露的阐发最好是放在单元测试之中同步进行,而不是要等到着末再去发明问题,当然出了问题也只好面对,一样平常这类问题都是在办事器运行了好久才裸露出来,一旦发明问题后,则必要定位问题,阐发的原则采纳子系统互相自力运行,找到最小问题的系统集,或是借助内存阐发对象察看内存工具环境,初步定位问题,再用Purify进交运行时阐发,平日C++ 内致意题对照多,Java与.NET对照少,一样平常由GC分歧理引起。C++的内存差错就对照多了,主要常见的有:

1、 Array Bounds Read (ABR) :数组越界读

2、 Array Bounds Write (ABW):数组越界写

3、 Beyond stack Read (BSR):客栈越界读

4、 Free Memory Read(FMR):余暇内存读

5、 Invalid pointer Read(IPR):不法指针涉猎

6、 Null Pointer Read(NPR): 空指针涉猎

7、 Uninitialized Memory Read(UMR):未初始化内存读写

8、 Memory Leak:内存透露

注:假如必要更多的信息,可以拜见Purify的赞助信息。

顺便提一句,为什么我要说单元测试时做这个对照好,因为单元测试针对的是单一功能,这时结合单元测试案例做内存阐发会更快的定位问题,同时因为问题较早的发明,则后期的风险则会削减,当然假如结合代码覆盖对象PureCoverage 来做就更完美了。

注:本篇只是对B/S利用的测试历程作一个整体的描述,对某一个阶段应用的对象只是作大年夜概的先容,你也可应用你对照认识的对象达到相同的目标。

您可能还会对下面的文章感兴趣: