来源:www.17testing.com http://www.17testing.com/csjs/web/3335.html
一、引言
随着网络技术的迅速发展,尤其是WEB及其应用程序的普及,各类基于WEB的应用程序以其方便、快速,易操作等特点不断成为软件开发的重点。与此同时,随着需求量与应用领域的不断扩大,对WEB应用软件的正确性、有效性和对WEB服务器等方面都提出了越来越高的性能要求,对WEB应用程序进行有效的系统的测试也逐渐成为人们研究的重要课题。
目前可以见到各种WEB服务器平台,然而根据Mereury的研究报告,98%的WEB服务器都没能达到人们所期望的性能,平均只能发挥人们所期望性能的1/6左右。WEB性能测试能够确定影响WEB服务器性能的关键因素,从而可以有针对性地进行分析和改进,避免WEB服务器研究和优化过程中的盲目行为;同时,它也是选取不同的WEB服务器的重要参考。
随着WEB应用程序使用越来越广泛,针对其性能测试的要求也越来越多,然而由于WEB程序综合了大量的新技术,诸如HTML、JAVA、Javascript、VBScript等,同时它还依赖很多其它的因素,比如Link、Database、Network等,使得WEB应用程序测试变得非常复杂。例如:WEB压力测试是评价一个WEB应用程序的主要手段,它的测试就是一个代表性的方面。
WEB应用程序的测试有别于传统软件的测试,它有其自身的特点。下面我们进行比较深入的讨论。
二、WEB测试技术
(一)WEB应用程序体系结构
WEB应用程序采用B/S结构,它是伴随着Internet技术的不断进步,由C/S结构改进和发展起来的新型体系结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑则在服务器端实现,形成所谓3tier结构。B/S结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。这种结构更成为当今应用软件开发的首选体系结构,目前最流行的mi?鄄crosoft.net也是在这样一种背景下被提出来的架构。
传统的软件一般采用C/S结构,此结构把数据库内容放在远程的服务器上,而在客户机上安装相应软件。C/S软件一般采用两层结构,C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发,变更不够灵活,维护和管理的难度较大。
(二)WEB测试的内容与目的
在很多时候我们都把测试的目的定位为寻找软件的BUG,而且是尽可能的找出BUG来,而测试人员所做的事情就是找软件的毛病,只要找出毛病就可以了,这样很容易带了一系列的问题。比如测试人员给某网站做测试,并递交了一份简单的测试报告:“当100用户共同按某提交按钮时,发生大量的提交失败”。对于测试人员来说,他已经完成了他自己的任务,找出了BUG,但是,这样的测试报告对于开发人员和项目管理者却毫无用处。报告中并未提及造成提交失败的原因,是硬件资源不足、网络问题、支撑软件参数设置错误还是应用开发问题等等。
测试的目的是证伪,但不能片面的理解为简单的找不BUG就可以了。软件测试应该经历以下四个步骤:
1.测试人员描述发现的问题(找到BUG);
2.测试人员详细阐明是在何种情况下测试发现的问题,包括测试的环境、输入的数据、发现问题的类型、问题的严重程度等情况;
3.测试人员协同开发人员一起去分析BUG的原因,找出软件的缺陷所在;
4.测试人员根据解决的情况进行分类汇总,以便日后进行软件设计的时候提供参考,避免以后出现类似软件缺陷。
(三)制定WEB测试计划
当我们明确了测试的目的之后,真正开始针对一个WEB应用程序进行测试的时候,我们需要制定一套详细的测试计划,这样才能顺利的完成所有的测试内容,计划的内容归纳为以下几步:
1.首先对被测的WEB应用程序进行需求分析,即对你所做的测试做一个简要的介绍,包括描述测试的目标和范围,所测试的目标要实现一个什么样的功能,总结基本文档,主要活动。
2.写出测试策略和方法,这里包括测试开始的条件,测试的类型,测试开始的标准以及所测试的功能,测试通过或失败的标准,结束测试的条件,测试过程中遇到什么样的情况终止和怎么处理后恢复等。
3.确定测试环境的要求(包括软件和硬件方面),选择合适的测试工具。
4.主要针对你测试的行为,描述你测试的细节,包括测试用例列表,进度表,错误等级分析,对测试计划的总结,和在测试过程会出现的风险分析等。
(四)测试的类型
WEB测试的类型包括内容测试、界面测试、功能测试、性能测试、兼容性测试、安全性测试等情况。内容测试、界面测试和兼容性测试都比较简单,在此不再细谈。WEB的功能测试与传统的软件测试区别不大,主要是在连接测试方面有点区别,数据的传递方面会稍微复杂点。由于WEB软件都是采用B/S结构,客户端所需的服务都是由服务器提供的,所以主要是测试服务器上软件运行的性能。WEB应用程序的测试包括客户端连接服务器速度方面的测试和压力测试这两方面,性能测试的步骤:
第一,分析产品结构,明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求,必要时基于LOAD测试的相同测略需同时考虑稳定性测试的需求。
第一,分析应用场景和用户数据,细分用户行为和相关的数据流,确定测试点或测试接口,列示系统接口的可能瓶颈,一般是先主干接口再支线接口,并完成初步的测试用例设计。
第三,依据性能测试需求和确定的测试点进行测试组网设计,并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试性设计方案和对测试工具的需求。
第四,完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程,并准备好测试用例将用到的测试数据。
第五,确定采用的测试工具。
第六,进行初验测试,以主干接口的可用性为主,根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境。
第七,迭代进行全面的性能测试,完成计划中的性能测试用例的执行。
第八,完成性能测试评估报告。
在进行性能测试的时候,我们需要知道一些有效的性能指标,下面我们来列出一些主要的性能指标:
一是,通用指标(指Web应用服务器、数据库服务器必需测试项):
*ProcessorTime:指服务器CPU占用率,一般平均达到70%时,服务就接近饱和;
*Memory Available Mbyte:可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重;
*Physicsdisk Time :物理磁盘读写时间情况。
二是,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:尝试链接数。
三是,数据库服务器指标:
*User 0 Connections :用户连接数,也就是数据库的连接数量;
*Number of deadlocks:数据库死锁;
*Butter Cache hit:数据库Cache的命中情况。
(五)测试工具介绍
1.ACT(或者MSACT)。ACT是微软的Visual Studio 和Visual Studio.NET带的一套进行程序测试的工具,ACT不但可以记录程序运行的详细数据参数,用图表显示程序运行状况,而且安装和使用都比较简单,结果阅读也很方便,是一套较理想的测试工具。
Microsoft Web Application Stress Tool (WAS):这个工具和ACT一样是微软的产品,但是这个工具没有和Visual Studio集成,可以单独使用。感觉这个程序现在还在测试,但是一些基本的功能已经很完备,可以完成ACT几乎所有功能,而且WAS使用更加简单,设置也更加完备明了。这个工具的另外一个特点是,它的报表是纯文本文件,而不是流行的HTML文件格式,但内容方面一点也不逊色。
2.Open System Testing Architecture (OpenSTA)。OpenSTA的特点是可以模拟很多用户来访问需要测试的网站,它是一个功能强大、自定义设置功能完备的软件,但这些设置大部分需要通过Script来完成,因此在真正的使用这个软件之前,必须学习好它的Script编写。如果需要完成很复杂的功能,Script的要求还比较高,当然,这也是它的优点,一些程序员不会在意这些Script的。这个软件完全免费而且源代码可以下载,可以自己修改达到特定的要求。
3.PureLoad。PureLoad是基于Java的测试工具,它的Script代码完全使用XML,所以这些代码的编写很简单,它的测试报表包含文字和图形并可以输出为HTML文件。由于是基于Java的软件,所以可以通过Java Beans API来增强软件功能。
4.QALoad。QALoad不单单测试WEB应用,还可以测试一些后台的东西,比如SQL Server等,只要是它支持的协议,都可以测试;另外一点,QALoad不但可以测试Windows,而且可以测试AIX, HP-UX 和 Solaris等系统。但是,这款软件价格很高。
5.LoadRunner。Mercury LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
对于财大气粗的大公司而言,这款软件可能比较适合,它的功能和QALoad相比不相上下,市面上著名的公司如IBM、SUN、Oracle等都用这个软件。但是它的价格也高不可攀,和功能成正比。
三、进一步的工作与讨论
随着全面质量管理思想在软件开发领域的应用和不断向前推进,软件测试也由最初的仅仅针对软件成品扩展到了针对软件半成品甚至过程产品的全过程测试,这是对软件测试的一种必然扩充。WEB测试也会随着这一思想,不断地扩展到WEB软件的各个生命周期中去,这将使WEB应用程序取得更高的质量,这也是我们以后需要进一步研究的内容。特别是对WEB压力测试自适应模型的探索才刚刚开始,有很多不足之处,例如:目前的测试人机交互较多,而自动完成的步骤较少等,这些都有待日后的改进。
除了前面介绍的WEB压力测试外,目前WEB测试的主要研究热点还有:WEB应用测试的框架研究,WEB应用程序测试的对象模型研究及其应用,WEB测试的高度自动化研究等等,都将是未来一段时期内的研究重点。