Web应用软件性能测试的研究
Web的全称是World Wide Web,简称为Web。字它诞生以来,Web已经得到广泛的发展和衍变,在逻辑上形成了一个遍布全球的巨大信息网络。为了确保Web应用软件功能的正确,并能同时处理大量的并发用户的访问,而且能兼容不同的浏览器、不同浏览器版本和操作系统,从而使Web应用软件的设计达到预期的功能需求同时又具有良好的性能,必须进行以下不同类型的测试,其中的性能测试主要确定在用户在可接受的响应时间内,系统能够承受的并发用户的数量,能够同时处理的交易的数目,以及不同负载情况下页面的下载时间和检测瓶颈可能发生的位置。
性能是Web应用软件成功的一个重要因素,对于用户来说,性能有时比功能更重要。因此,要保证Web应用程序达到预期的性能,开发过程中就必须进行性能测试。只有通过性能测试后,才有信心将它投入使用。Web应用软件性能测试的目标在于通过模拟真实负载,找出性能瓶颈,优化系统性能,从而保证程序在实际运行中能够提供良好和可靠的服务。
1 Web应用软件性能测试的内容
性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。主要包括三个方面的测试:在客户端性能的测试、在网络上性能的测试和在服务器端性能的测试。
1.1 在客户端的性能测试
在客户端性能测试的目的,是考察客户端应用软件的性能,测试的入口是客户端。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能测试是重点。
并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的状态,通过综合分析请求响应数据和资源监控指标,来确定系统并发性能的过程。负载测试是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项。负载测试是一个分析软件应用程序和支撑架构、模拟真实环境的使用,从而来确定能够接收的性能过程。压力测试是通过确定一个系统的瓶颈或者不能再接收的极限点,来获得系统所能提供的最大服务级别的测试。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。压力测试的区域包括表单、登录和其他信息传输页面等。
1.2 在网络上的性能测试
在网络上的性能测试重点是利用成熟先进的自动化技术进行网络应用性能监控、网络应用性能分析和网络预测。网络应用性能分析的目的是准确展示网络带宽、延迟、负载和TCP(Transmission Control Protocol)端口的变化是如何影响用户的响应时间的。在系统试运行之后,需要及时准确地了解网络上正在发生什么事情;什么应用在运行,如何运行;多少PC(Personal Computer)正在访问LAN(Local Area Network)或WAN(Wide Area Network);哪些应用程序导致系统瓶颈或资源竞争,这时网络应用性能监控以及网络资源管理对系统的正常稳定运行是非常关键的。利用网络应用性能监控工具,可以达到事半功倍的效果。考虑到系统未来发展的扩展性,预测网络流量的变化、网络结构的变化对用户系统的影响非常重要,根据规划数据进行预测并及时提供网络性能预测数据。
1.3 在服务器端的性能测试
对于应用在服务器上的性能测试,可以采用工具监控,也可以使用系统本身的监控命令,例如Tuxedo中可以使用Top命令监控资源使用情况。实施测试的目的是实现服务器设备、服务器操作系统、数据库系统、应用在服务器上性能的全面监控。
2 Web应用软件性能测试工具
2.1 性能测试工具的简介
常用的测试工具有Loadrrunner和Jmeter,下面对它们分别作简要的介绍。Loadrunner是Mercury Interactive公司的测试工具。Loadrunner是一种预测系统行为和性能的工业标准级负载测试工具,通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,对整个企业架构进行测试。
Jmeter:这是著名的Apache组织下的Jmeter项目组开发的一个测试工具,完全使用Java语言实现,可以对http和ftp服务器进行负载和性能测试,通过使用Jmeter提供的供能,可以容易的制定测试计划:包括规定使用什么样的负载、测试什么内容、传入的参数,同时,Jmeter还提供了好多种图形化的测试结果显示方式,能够方便的开始测试工作和分析测试结果。特别是能将线程分组,同时对多个不同的功能进行测试。
2.2 性能测试工具的模型
一般来说,性能测试工具包括以下部件:虚拟用户脚本产生器(Vugen)、压力产生器、用户代理、压力调度和监控系统、压力结果分析工具。
1)用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或线程协作,接受调度系统的命令,调度产生负载压力的进程或线程,因此,用户代理也可以被看作是压力产生器的组成部分。
2)虚拟用户产生器通过录制客户端和后台服务器之间的通讯包,分析其中的协议,自动产生脚本。用户在自动产生的脚本的基础上进行修改,从而快速开发出一个逻辑功能和客户端软件完全一样的压力脚本程序。录制的技术主要是通过Proxy的方式来实现的。
Vugen根据对捕获的数据的分析,将其还原成对应协议的API组成的脚本。由于Proxy源程序的获得非常容易,Vugen捕获的数据包通常为TCP数据流,这样可以很容易的生成Socket层次的脚本。
3)压力产生器用于根据脚本内容,产生实际的负载。在性能测试工具中,压力产生器主要是产生负载。
4)压力调度和监控系统是性能测试工具中直接与用户交互的主要内容。压力调度工具可以根据用户的场景要求,设置各种不同脚本的虚拟用户数量,设置同步点等,而监控系统则可以对各种数据库、应用服务器、服务器的主要性能计数器进行监控。不同的性能测试工具可以提供不同类型的服务器性能计数器监控的能力。是否具有强大的性能计数器监控能力通常也是衡量性能测试工具的功能是否完备的指标之一。
5)压力结果分析工具可以用来辅助进行测试结果的分析。性能测试工具附带的分析工具一般都能将监控系统获取的性能计数器值生成曲线图、折线图等图表,还能根据用户的需求建立不同曲线之间的叠加、关联操作,从而提供从各方面揭示压力测试结果的能力。
2.3 性能测试工具的选择
在进行性能测试时,决定使用哪一种性能测试工具也不是一个很容易的问题。对于商业化的工具来说,稳定性好,适用性较广,但是学习培训成本较高,某些特殊的需求不能满足等。而对于自行创建需要的测试工具,由于其适应范围小,通常只能适用于部分的特定项目,从总体拥有成本上来说,具有较高的成本,其最大的问题是稳定性和可靠性。
市场上现存的Web性能测试工具数量很多,种类很多,从单一的开放源码的免费小工具,如Apache自带的Web性能测试工具到大而全的商业性能测试软件,如Mercury的Loadrunner等等。任何性能测试工具都有其优缺点,我们可以根据实际情况挑选用最合适的工具。性能测试是一项复杂的工作,一个性能测试项目的质量如何,测试人员的素质、能力和经验是最关键的因素。“工欲善其事,必先利其器”,拥有一套自己非常熟悉,功能全面、质量可靠的性能测试工具对于从事性能测试的人员非常有吸引力。由于互联网和开放源码运动的发展,性能测试工具的各种功能都以各种形式的开源软件存在了。如果设计出一套合理的测试流程,在此流程下可以整合缺乏系统性的开源工具软件,使之能够彼此配套,搭配出一套功能全面、质量可靠,而且是开放源码的性能测试工具是完全有可能的。
参考文献:
[1] 安永新.基于风险的Web应用测试研究[D].重庆:重庆大学,2002.
[2] 胡乃静.HIS的性能测试设计与应用实现[J].计算机工程,2004,15(30):19-22.
[3] Buret J,Droze Overview of Load Test Tools[EB/OL]..
[4] 段念.软件性能测试过程详解与案例剖析[M].北京:清华大学出版社,2006.
[5] 梁晟,李明树,梁金能,等.Web应用程序运行相应时间的试验研究[J].计算机研究与发展,2003:40(7):1076-1080.