基于Web应用的负载测试研究

2013-07-12 12:13张焕生刘春玲王静
中国测试 2013年3期
关键词:测试工具日志服务器

张焕生,刘春玲,王静

(1.河北工程技术高等专科学校计算机系,河北沧州 061001;2.公安部第一研究所,北京 100048)

基于Web应用的负载测试研究

张焕生1,刘春玲1,王静2

(1.河北工程技术高等专科学校计算机系,河北沧州 061001;2.公安部第一研究所,北京 100048)

为保证Web系统在实际运行中提供良好可靠的性能,针对Web应用的复杂特点,提出基于访问过程的负载测试方法。通过对用户访问过程进行划分,综合考虑影响测试结果的各种因素,并建立模型以模拟真实用户,将该方法结合自动化测试工具应用在一个Web系统上,针对测试结果进行分析,提出优化方案。实验表明:该方法能够较准确地模拟Web应用的真实负载,找出瓶颈,提高系统性能。

Web应用;负载;访问过程;聚类

0 引言

Web应用以其方便快捷、易于管理和维护等特点逐步深入到人们的生活中。因为业务量的不断增大,一些热门的Web站点在运行中频繁发生数据延迟、服务中断甚至瘫痪的事故,给用户造成不便也给运营商带来损失。因此,在Web应用投入使用之前,必须进行负载测试,考察各项度量指标,找出系统的瓶颈。但是,Web应用体系结构复杂、实现过程中多种技术的使用、Web用户以及网络的不确定性,都使得负载测试困难很大[1],而只有真正模拟了真实的用户负载,测试结果才是准确可靠的,才能保证在实际运行中提供良好、可靠的性能,减少潜在的风险。针对这一问题,本文提出基于访问过程的负载测试方法,综合考虑影响测试结果的各种要素建立模型,较准确地模拟Web应用的真实负载,结合使用自动化测试工具LoadRunner进行组织和管理测试,能够较快地收敛到被测试应用系统的负载承受能力和性能下降的转折点,找出系统瓶颈,提出解决措施,从而提高系统的性能。

1 Web应用测试方案

由于Web应用的复杂特点,如何根据系统的使用方式和客户端以及服务器端的各种特征信息来确定负载,使其接近于真实的用户负载成为关键问题,本文提出了基于访问过程的负载测试方法,见图1。

该测试主要由以下2阶段组成:

(1)采用基于访问过程的负载测试方法初步确定Web应用的负载。建立真实有效的模型,充分考虑影响测试结果的若干因素,修正脚本。(2)由测试工具里面的负载产生器根据以上数据生成测试用例,并对某Web应用进行测试。利用性能监视器工具监视测试过程和结果,并反馈给测试者。

图1 基于访问过程的负载测试框架

1.1 基于访问过程的负载划分

把用户对Web应用的访问过程所经过的各个路径以及完成这一路径的不同方法叫做子过程。每个子过程可以分为更小的子过程,当子过程不能再分时,把它叫做一个基本访问过程。根据这种思想把用户对Web应用的整个访问过程进行相对独立的划分,划分出的若干个基本访问过程作为虚拟用户,初步分析这些虚拟用户和实际使用中真实用户给服务器施加的负载性质基本相同,进行初步的脚本录制并保存。

例如用户进行资源下载时,可把整个访问过程做如图2所示划分。

1.2 服务器日志的聚类分析

对服务器日志的聚类分析[2]是在没有先验知识的情况下,将物理或抽象的对象集合划分为类似的对象组成多个组,使同组中的对象具有最大的相似性,并进行标号。然后对簇进行处理分析,目的是确定各个访问子过程的访问频率、持续时间以及百分比等要素,为设计测试用例提供依据。

图2 访问过程的划分

Web日志挖掘并不是简单地把数据挖掘算法应用在Web日志上,在使用挖掘算法之前必须进行数据预处理,由3个阶段完成:(1)数据清洗。将服务器日志中用户访问页面的日期、持续时间、IP地址等有用条目保留并格式化,删除与本文访问过程无关的信息。(2)用户session的确定[3]。利用session对象存储的信息与用户建立联系,得到用户session信息,并格式化。(3)为确定各种用户访问过程的信息,做如下处理:

当访问Web服务器的是注册用户时表示为:{userID,{sessID,{<pageID,time>}}},是匿名用户时表示为:{ip,{sessID,{<pageID,time>}}}。其中sessID是用户的session ID,pageID是页面的ID,time是访问的时间。userID是注册用户ID,ip是用户IP地址。

数据预处理后,本文采用BIRCH算法[3]进行聚类分析。分析结果用于建立模型。

1.3 建立模型修正脚本

为使测试最接近于真实负载,充分考虑影响测试结果的各种因素,建立真实有效的模型。

1.3.1 访问过程建模

把用户对Web应用的访问进行建模。对Web应用的访问实际上是用户执行的一系列访问子过程,但测试中不可能穷举所有的这些过程。虚拟用户只要模拟与实际负载相同的负载水平即可,例如把下载的整个过程,分为登录/浏览/搜索/下载4个子过程。即用4个虚拟用户模拟此访问过程。

用户的每一访问过程通常带给系统的负载压力是不完全一样的,为准确模拟实际用户的访问过程,需确定各负载的百分比。例如,浏览和下载两个访问过程差别就很大。浏览一般是静态页面,带给服务器的负载压力小。而下载一般需与数据库甚至其他子系统通信,带给服务器的压力就大得多。用户百分比等信息通过聚类分析得到。基于此,对录制的测试脚本进行修正。

1.3.2 访问延迟建模

不同的用户通常在完成同样的访问时所表现出来的延迟时间是不同的。为了更真实地模拟真实用户的访问过程,必须对用户进行分类,划分的越细致,延迟模型的准确度就越高。为此采用了正态分布的数学模型[4],用户延迟图如图3所示。根据该模型建立比较准确的用户延迟数据,修正脚本。

图3 正态分布的用户延迟图

1.3.3 访问放弃建模

根据日志分析器提供的信息,确定页面可接受的打开时间,一旦超时将得出用户可能的放弃率。如当首屏响应时间小于5s时是比较优秀的,放弃率为0%,10 s以内是可以接受的,放弃率是25%,10 s以上用户会选择刷新或离开。

1.3.4 其他负载信息建模

借助日志分析器并利用AUT和WUS方法[5-6]收集负载信息。

(1)访问分布表。记录Web应用各访问在一天中不同时段的吞吐率情况。

(2)访问简表。记录各访问在高峰阶段和非高峰阶段的吞吐率对数据库和Web服务器负载情况以及操作失败带来的风险信息。

2 测试工具的选择

Web应用实现过程中涉及到多种技术的使用,使得测试任务非常艰巨。选择合适的自动化测试工具可以减少测试的时间和测试开销[7]。目前Web应用测试工具众多,其中常用的Web性能测试工具有:微软的WAS、Rational Robot、Jmeter、LoadRunner、OpenSTA等。其中LoadRunner可以预测系统的行为和性能,适用于各种体系架构。它能模拟成千上万个用户并发,进行实时地性能检测,支持的协议和技术非常广泛,可以最大限度地缩短测试时间,优化性能[8]。基于此选用其作为测试工具。

3 负载测试的实施

现对一个综合型IT网站进行测试。该网站主要提供用户的注册登录、IT信息、交流空间(论坛、群或Blog)、资源下载或上传、搜索、视频等。测试流程如图4所示。

3.1 测试计划的制定

测试计划主要包括测试目标、策略、工具(本文测试工具选用LoadRunner)、进度和测试资源等。

3.2 设计测试场景

设计测试场景的关键是使设计的负载能代表真实负载,一般按以下3原则:

图4 负载测试流程

(1)应确定访问过程的组合以反映真实情况。穷举执行所有访问过程是不现实的,经验表明选择执行80%左右是比较有效的,选择执行率高、给Web服务器和数据库服务器带来较重负载的访问。基于此选择了7个访问过程:注册、登录、浏览、搜索、论坛、视频和下载作为测试基础。

(2)测试的速度应反映真实用户访问的速度。针对日志分析、性能监测结果,得到负载访问数量、平均访问时间(或思考时间)等信息。

(3)确定综合负载以反映真实的测试数据。设计一天某时段的访问数为2 000,根据7个访问过程,综合考虑各模型信息,得到综合负载,给出部分数据如表1所示。

3.3 开发测试脚本

首先根据访问过程的划分使用LoadRunner[9]的Virtual User Generator生成初步的测试脚本;然后根据各种模型修正脚本,用LoadRunner的Controller组织管理测试;最后对脚本进行反复调试和验证,保证测试结果的准确性。

3.4 运行、分析和优化

运行测试场景、分析结果、优化系统需要反复进行。

运行时由轻负载(如5~20个虚拟用户)到中等负载(如20%左右的负载)再到重负载(如100%的负载)甚至超负载(如120%的负载)分阶段进行。运行测试场景时,发现通过逐渐增加用户数进行并发用户(都运行相同的行为脚本,比如登录操作)数目测试[10],来模拟峰值负载的时候,当用户达到1000时,系统的运行响应速度开始降低,出现部分错误,再继续增加一定用户数量,系统中活动的用户数竟呈直线下降,并且服务器返回大量错误信息。这说明,此时系统出现性能瓶颈,需要更新服务器硬件或对系统进行其他优化。

表1 测试用例生成

系统响应时间可以精确地找到性能下降的转折点。运行中收集到的性能数据可通过LoadRunner Analysis生成一系列直观的图表和报告,供分析人员处理。经分析发现视频用户数和文件下载用户数,是造成系统延迟的最大操作,其次是登录、浏览、论坛等,这些都是访问数据库较频繁的操作,那么影响性能的瓶颈即可能来源于数据库。需要对数据库进行优化处理。

经测试分析,发现系统性能瓶颈主要来源于数据库和服务器,对系统可以进行以下3个方面的优化处理:(1)对于系统中频繁访问数据库但内容更新较小的应用,使用html静态化实现,例如论坛的公用设置信息,会大量被前台程序调用,但更新较少,因此将其进行静态化处理,以避免大量的访问数据库请求;(2)为解决服务器资源的不足,扩充服务器内存,增大IIS缓存空间,设立独立的图片服务器,在图片服务器和应用服务器上进行不同的配置优化,以保证系统的执行效率和高消耗;(3)数据库瓶颈问题,使用数据库集群和库表散列的方式解决,将数据库进行分离,不同的模块对应不同的数据库或表,再进一步对页面或功能进行更小的数据库或表散列,以保证使用低成本的数据库同时提高了系统的性能。优化之后要重新运行测试场景以验证优化的有效性。

4 结束语

基于访问过程的负载测试方法,指出了保证测试成功的关键因素,能够提高系统性能。但是在模型的建立过程中完善其他的影响因素以及广泛实施到各种Web应用是日后的研究重点。

[1]耿彩凤.网络测试中的Web测试[J].辽宁大学学报,2005,32(3):272-274.

[2]Han J,Kamber M.数据挖掘概念与技术[M].北京:机械工业出版社,2007.

[3]郑玲霞,李大学.基于用户聚类分析的网站导航结构智能优化研究与实现[J].重庆邮电学院学报,2005,17(6):763-767.

[4]张江河,葛玮,董云卫.Web应用的负载测试策略研究[J].微机发展,2003,15(2):35-37.

[5]梁晟,李明树.一种模拟驱动的Web应用程序性能测试方法[J].计算机研究与发展,2003,40(7):1069-1075.

[6]孙铁昆.Web应用系统的测试技术研究与实现[D].武汉:湖北大学,2006.

[7]路晓丽.Web应用软件的测试技术研究[D].西安:西北大学,2006.

[8]李健.基于Web应用系统的性能测试技术研究[D].西安:西安电子科技大学,2010.

[9]尹文斌,郑剑.基于LoadRunner的Web负载测试[J].江西理工大学学报,2008,29(4):13-15.

[10]谈姝辰,尹军.基于负载的Web性能测试研究与应用[J].现代电子技术,2007,253(14):139-142.

Load testing based on web app lication

ZHANG Huan-sheng1,LIU Chun-ling1,WANG Jing2
(1.Department of Computer,Hebei Engineering and Technical College,Cangzhou 061001,China;
2.The First Research Institute of Ministry of Public Security,Beijing 100048,China)

To ensure good and reliable performance of web system in actual operation,the authors proposed a load testmethod based on access process for complex Web application features.The access processes of users were divided and the models were built by considering the various factors to simulate the case of real users.And thismethod was combined with automated testing tool used in a web system to analyze the test results,and then optimization schemes were proposed.The experiment results show that it is able to more accurately simulate real load,find the bottlenecks,and improve system performance.

web application;load;access process;clustering

TP393.4;TP393.071;TP202+.7;TP391.9

A

1674-5124(2013)03-0096-04

2013-01-07;

:2013-03-01

张焕生(1978-),女,河北沧州市人,讲师,硕士,主要从事计算机应用研究。

猜你喜欢
测试工具日志服务器
一名老党员的工作日志
服务器组功能的使用
扶贫日志
通信控制服务器(CCS)维护终端的设计与实现
PowerTCP Server Tool
雅皮的心情日志
雅皮的心情日志
基于移动平台APP测试
手车式真空断路器回路电阻测试电流线接头研究
计算机网络安全服务器入侵与防御