Web下的整体测试

随着Internet的日益普及,现在基于B/S结构的大型应用越来越多,可如何对这些应用进行测试成为日益迫切的问题。有许多测试人员来信问我B/S的测试如何做,由于工作较繁忙,对大家提出的问题也是头痛医头脚痛医脚,没有对WEB的测试过程做一个整体的概述。希望通过本篇能够让大家了解大型Web应用是如何来进行测试的。 
B/S下的功能测试比较简单,关键是如何做好性能测试。目前大多数的测试人员认为只要跑一些测试工具证明我的产品是可以达到性能的就ok了,为了证明而去测试是没有任何价值的,关键是要发现产品性能上的缺陷,定位问题,解决问题,这才是测试要做的。 
首先我们从两个方面分析如何进行WEB测试,从技术实现上来讲一般的B/S结构,无论是.NET还是J2EE,都是多层构架,有界面层,业务逻辑层,数据层。而从测试的流程上来说,首先是发现问题,分析问题,定位问题,再由开发人员解决问题。那么B/S的结构的测试如何来做? 
如何发现问题是我首先要介绍的,在做WEB测试之前你需要一些资料,比如产品功能说明书,性能需求说明书,不一定很完善,但一定要有,明确测试目标,这是基本的常识,可是我往往看到的是已经开始动手测了,但还不知自己的系统要达到的性能指标是什么。这里我简单讲一下测试的性能指标: 
l 通用指标(指Web应用服务器、数据库服务器必需测试项): 
* ProcessorTime: 指服务器CPU占用率,一般 平均达到70%时,服务就接近饱和; 
* Memory Available Mbyte : 可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重; 
* Physicsdisk Time : 物理磁盘读写时间情况; 
l 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 :尝试链接数; 
l 数据库服务器指标: 
* 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结构测试又无从下手的朋友的要求,在这里要向大家表达一下歉意,由于工作比较忙,难免对大家的来信有所疏漏,请大家原谅。此文的要求的读者,对测试工具有所了解,希望进入更深测试的同仁,希望我的文章给大家带来帮助,同时也借此文表达一些曾经帮助过我的朋友与同事。 
注:本篇只是对B/S应用的测试过程作一个整体的描述,对某一个阶段使用的工具只是作大概的介绍,你也可使用你比较熟悉的工具达到相同的目标。 

 

 

 

转载于:https://www.cnblogs.com/ami/archive/2006/07/19/454569.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...

1.比较下列各组数的大小:(1) 与(2) 与 8依次按键显示:1.732 050 808例3 小丽想用一块面积为400 cm2的正方形纸片,沿着边的方向剪出一块面积为300 cm2的长方形纸片,使它的长宽之比为3:2.她不知能否裁得出来,…

MySQL 命令

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82892834 MySQL 一些常见命令 更多精彩 更多技术博客,请移步 asing1elife’s blog 查看版本号 mysql -V重启/启动/停止 mys…

Bookshelf 2 简单DFS

链接:https://ac.nowcoder.com/acm/contest/993/C来源:牛客网 题目描述 Farmer John recently bought another bookshelf for the cow library, but the shelf is getting filled up quite quickly, and now the only available space is at the top.FJ…

一步一步SharePoint 2007之五:向网站中添加一个子网站

一步一步SharePoint 2007之五:向网站中添加一个子网站摘要感受完看到成果的激动,感受完邻家女孩的漂亮、可爱和端庄,不要停止,来,让我们一起来动手打造心目中的完美女神吧!本篇文章将介绍如何向一个网站中添…

微型计算机系统分为哪几个层次,计算机系统分为哪4层?

满意答案al053192014.06.23采纳率:49% 等级:12已帮助:7516人第一层:物理层(PhysicalLayer),规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。具体地讲&#xff0c…

ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计。本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应用程序 尽管 ASP.NET Core 是跨平台的&a…

参数初始化

通过以下形式进行参数初始化 self.fc nn.Linear(n_head * d_v, d_model) nn.init.xavier_normal_(self.fc.weight) 转载于:https://www.cnblogs.com/yeran/p/11197047.html

使用input type=file 上传文件时需注意

在asp.net的中使用<input typefile />控件上传文件对文件的大小有限制,默认情况下大概在4m左右,如果上传再大的文件时就会出页面无法显示的错误.修改web.config文件中的参数可以设置该控件上传文件的大小,web.config中配置如下:在<system.web>节点下增加"<…

html模板 循环里if,django模板里循环变量table里想要两个一行如何控制

2016-8-3 周三做项目时遇到的问题&#xff1a;每个div由循环变量输出&#xff1a;{% for key,value in formextenddetail %}{{ key }}{{ value }}{% endfor %}但是我想两个div一行&#xff0c;使用...这种样子因为我负责的是前端&#xff0c;views这些不是很熟悉&#xff0c;想…

ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程&#xff0c;简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计。本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应…

Prim算法求最小生成树

给定一个n个点m条边的无向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 求最小生成树的树边权重之和&#xff0c;如果最小生成树不存在则输出impossible。 给定一张边带权的无向图G(V, E)&#xff0c;其中V表示图中点的集合&#xff0c;E表示图中边的集合…

用installshield打包的asp.net程序

现在需要打包一个asp.net程序&#xff0c;具体要求如下&#xff1a;1、动态建立web虚拟目录或web站点&#xff0c;并保存至web.config文件相关字段中。2、动态建立ftp目录&#xff0c;并保存至web.config文件相关字段中。3、动态建立数据库联接类型sql或oracle&#xff0c;对sq…

合肥工业大学计算机学院王院长,王青山(合肥工业大学教授)_百度百科

王青山(合肥工业大学教授)语音编辑锁定讨论上传视频本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;王青山&#xff0c;中国汉族人&#xff0c;合肥工业大学教授&#xff0c;现任中国计算机学会、ACM、IEE…

go 中gcc 编译问题(gcc.exe fatal error no input files compilation terminated)

2019独角兽企业重金招聘Python工程师标准>>> 问题背景 在windows 中编译 go 的pipe时由于pipe依赖sqlite&#xff0c;需要通过cgo进行编译。出现如下异常 gcc.exe fatal error no input files compilation terminated 问题分析 由于 windows中缺少c 的编译环境 解决…

35岁以前把下面十件事做好

35岁是青春的后期&#xff0c;35岁以后是收获的季节&#xff0c;如果你没有资格说这句话&#xff0c;你将会憎恨自己。所以在35岁以前&#xff0c;在烂漫蓬勃的青春年华里&#xff0c;你最好把下面十件事做好&#xff1a; 第一&#xff0c;学会本行业所需要的一切知识并有所发展…

XCode 10 升级问题总结

一、 library not found for -lstdc.6.0.9 xcode 10 中删除了内置 libstdc.6.0.9.tbd&#xff0c;工程中一些SDK依赖这个库&#xff0c;需要把xcode 9.4 的libstdc.6.0.9.tbd 添加到xcode中&#xff0c;重启xcode。 libstdc.6.0.9.tbd 的下载地址&#xff1a;libstdc.6.0.9 真机…

重心转移

做了好些时候的题了&#xff0c;发现做题对身体的摧残比普通的写代码还要重的多&#xff0c;为了我的眼睛&#xff0c;还是不要那么卖命的做ACM了&#xff0c;反正这个假期还算是比较有收获。而且&#xff0c;在没有指导老师的帮助下做难题&#xff0c;根本就是一条艰巨异常的路…

ArcEngine开发体验(附许可)

ArcGIS Engine Developer Guide ArcGIS9.0开发文档《Engine_Developers_Guide.pdf》376 &#xff0c;花了两三天看完了。guide特点&#xff1a;1 guide里面的基础性的东西很多&#xff0c;涉及com开发应用&#xff0c;开发语言&#xff0c;环境和ao架构介绍的内容2 介绍.net开发…

安装mysql-connector-python-8.0.11-py3.6遇到问题

1.提示“This application requires Visual Studio 2015 Redistributable” 下载vc_redist.x86安装即可。 下载链接&#xff1a;https://download.microsoft.com/download/6/D/F/6DF3FF94-F7F9-4F0B-838C-A328D1A7D0EE/vc_redist.x86.exe https://download.microsoft.com/downl…

北京科技计算机与通信工程学院,北京科技大学计算机与通信工程学院-任超

第一作者或通讯作者(*)论文> 2019年&#xff1a;[7]Chao Ren, H. Zhang*, J. Chen and C. Tellambura. "Exploiting Spectrum Access Ability for Cooperative Spectrum Harvesting". IEEE Transactions on Communications, vol. 67, no. 3, pp. 1845-1857, Mar. …