APP下载

软件测试在B/S架构系统中进行性能优化的应用研究

2012-11-21彭振龙

韩山师范学院学报 2012年6期
关键词:脚本事务服务器

彭振龙

(泉州师范学院陈守仁工商信息学院,福建泉州 362000)

1 性能测试概念及其必要性

随着互联网技术及应用的飞速发展,软件系统的性能已是衡量软件质量的一个重要指标.根据CNNIC发布的第29次报告,截止2011年底,中国的网民数量已达到5.13亿,网站数量达到229.6万,CN的域名注册数量达353万[1].所有这些基于B/S架构的网络服务都面临性能问题,如大型电子商务网站促销或高考分数公布,人们会在同一时间要求服务器响应服务,瞬时负载有可能达到或超过系统所能承受的极限,导致系统响应缓慢甚至瘫痪,因此对网络系统进行测试和优化显得尤为重要.而性能测试是和功能测试相对应的概念,功能测试是指为确认软件是否能完成某项功能而进行的一系列测试,而性能测试则是指为确认软件执行效率而实施的一系列测试行为,这包括在一定负载和压力下软件系统的执行效率,包括服务响应时间、连接数、稳定性、安全性、可扩展性、资源占用率等项目和指标[2-3].

利用负载测试(load testing)和压力测试(stress testing)等性能测试方法[2-5],能有效地模拟出软件系统在现实环境中的应用情况,通过分析软件在不同压力和负载下的表现,如CPU占用率、内存使用率、客户端响应时间、网络通信数据率等,根据工程的分析方法,找到软件系统架构、功能模块等方面的瓶颈,并找出软件系统能提供的最大服务级别,从而为软件系统的全面优化提供基本参考.

2 性能测试工具及重要概念

在自动化测试出现以前,性能测试工作主要依靠多台单机,在统一指挥下,同一时刻点击某个操作,以达到模拟并发的目的.自从性能测试的自动化工具出现后,这一工作变得简单了许多.目前,商业性的工具主要有Loadrunner、QAload、SilkPerformance、Webload,Rational Performance Tester(RPT),而免费的测试工具主要有OpenSTA、微软的WAST(Web Application Stress Tool).其中loadrunner以其图形化界面直观友好,支持协议众多,可预测并调优系统,功能强大而深受好评[6].下面以loadrunner为例进行讨论,为了后面论述的方便先介绍一下loadrunner在性能测试中所涉及的重要概念.

并发:指有多个业务操作在同一时间发生.

事务:用于度量服务器响应时间的任务或操作集.

虚拟用户(Vuser):是指通过loadrunner软件模拟出真实用户,通常在同一台机器中可以模拟出很多虚拟用户.

吞吐量:一定时间内,处理客户端请求的数量,直接反映了软件的性能承载能力.

思考时间:用户在执行两个连续操作期间等待的时间.

集合点:用于同步虚拟用户以便恰好在同一时刻执行任务.

3 性能测试步骤

3.1 测试环境的配置

测试环境主要包括服务器的硬件环境如CPU、硬盘、内存、网卡、网络带宽等,软件环境主要包括操作系统、数据库、web服务器软件等.同时还需要根据用户使用手册列出的在某个并发数下的服务响应时间,内存及CPU的占用率等要求达到的性能指标,以便在进行测试结果分析时参考.

3.2 创建与编辑脚本

Loadrunner允许用户通过实际的操作来录制脚本,当然对于非常熟悉loadrunner脚本编写的用户,也可以手动编辑脚本.对于B/S系统,在录制脚本前,需选择“web(http/html)”协议,如图1所示.之后设置录制参数,如图2所示.完成后,点击OK,则启动web服务,开始录制脚本.录制期间,用户通过浏览器与服务正常会话,loadrunner会记录下用户的所有动作.用户可以点击录制工具条上的“”,以停止录制,如图3所示,此时loadrunner自动生成测试脚本.

3.3 脚本修改

脚本录制完成后,需要对其进行完善,比如加入集合点、加入思考时间、加入其他事务等.脚本修改的另一个重要内容就是“参数化”.所谓的参数化是指对不允许重复输入的数据,需要用变量(参数)代替固定文本.例如在测试注册事务过程中,录制的脚本如下:

Web_submit_form(“register.jsp”,

图1 loadrunner脚本录制协议选择框

“Snapshot=t2.inf”,

ITEMDATA,

“Name=unitname”,“value=jxndpzl”,ENDITEM,

LAST);

其中的“value=jxndpzl”是录制脚本时注册用户名.显然,在实际业务中不允许再次注册一个jxndpzl的用户名.这就导致在脚本回放或者要模拟多个用户同时注册时,脚本无法成功提交.因此需要对脚本进行参数化,即将

“Name=unitname”,“value=jxndpzl”,ENDITEM.改为

“Name=unitname”,“value={punitname} ”,ENDITEM.

其中的punitname即是代表注册用户名的参数,它可以是一个文本文件或数据库,具体的设置可参见文献[2].

3.4 场景设置

脚本录制完成后,由loadrunner的controller负责测试场景的设置.如Vuser的生成数量,持续运行时间、加压及减压规则等.还有其他用于脚本调试和运行控制的设置,如连接超时、运行、中断、停止、中间检查点、路径转换、监视器设置等.这些设置都将更好地帮助模拟真实的使用环境,并且更好地理解性能测试的过程,从而找出性能瓶颈.以下为场景设置的一个例子:

(1)Vuser的数量为200

(2)每5 s增加10个Vuser

(3)Vuser登录后,持续运行时间为5 min

(4)思考时间为15 s,并在30%~100%之间随机

(5)每2 s退出12个Vuser

很显然,可以设置不同策略,设置不同的场景,同一场景中也可以加载不同的事务.

3.5 脚本运行及回放

根据前面设置的场景,执行已经录制好的脚本.实际上为了得到更为真实的测试结果,需要设置许多不同的场景进行测试,而录制好的脚本不用修改或只需要简单的微调就可以,这样就为后续的结果分析准备了更多的数据.

3.6 结果分析

Loadrunner拥有专门的分析工具Analysis,它利用数学及统计学原理,具有强大的数据分析能力,而且还能将数据分析的结果通过可视化的方式展示出来.图4为Analysis界面.

图2 录制参数设置框

图3 脚本录制工具条

4 应用实例分析

下面,通过一个实际例子说明loadrunner进行性能测试并调优的过程.笔者测试的是一个电子政务系统.限于文章篇幅,略去了脚本录制及修改过程.测试场景设置如下.

图4 loadrunner Analysis主界面

4.1 事务说明

只测试了三个事务.(1)登录事务,即后文的vuser_init_Transaction;(2)点击一般案件登记,即后文的“点击一般案件登记”事务;(3)一般案件的保存事务,即后文的“点击保存”事务.同时,设计了五个场景.(1)50个用户并发;(2)100个用户并发;(3)200个用户并发(主测试机和负载生成器各100个);(4)300个用户并发(主测试机100个,负载生成器200个);(5)500个用户并发(主测试机200个,负载生成器300个),共有15个事务(见表1)限于篇幅,点击一般案件登记事务只列出了res100.lrr,而res100and100.lrr即表示主附测试机各100个Vuser,共200个用户同时登录,在表中省略,以此类推,点击保存事务与此一样.

表1 事务名称及说明

4.2 负载方案

负载方案为同时加载所有Vuser,减压方式为5 min内依次减为0,实际测试过程中,得到的实际Vuser情况如表2所示.

表2 Vuser用户数量表

从表2中可以看出,当总Vuser数量在200、300、500时,最大值并不能达到相应的数量,说明负载生成器本身无法达到在某个时间内生成相应数量Vuser的要求.

4.3 测试结果数据及分析

测试过程中,选择重点需要关注的平均事务响应时间、吞吐量、Vuser连接数等数据进行分析.限于篇幅,只选择了点击“保存”事务在不同场景下的数据进行分析.平均事务响应时间见表3.

表3 平均事务响应时间表

从表3中可以看出,平均响应时间随着用户数量的增加而增加,但根据最大值显示,当用户数达到300、500时,分别为19.778 s及21.086 s,这个值是比较大的,说明系统在这一压力下已经出现了一定的瓶颈.

表4 不同负载压力下的每秒点击数统计

根据表4的统计数据,当Vuser数为300、500时,平均点击数分别为561.984,560.913,这显然于实际的应用不相符,说明当Vuser为500时,系统出现了明显的瓶颈,导致服务器无法接受点击.

由表5可知当Vuser为500时,服务器的平均吞吐量反而比Vuser为300时的平均吞吐量更少,说明系统出现了严重的瓶颈,已经无法正常处理用户请求了.

同样的当Vuser为500时,平均连接数反而比Vuser为300时小,其最大值也只多3(见表6).其他如Vuser数为50,100,200时,系统的最大连接数也没能达到,这有可能是负载生成有服务器有瓶颈,导致用户丢失,也有可能是服务器系统已经无法正常接受用户的连接,则需要加大用户连接数.

表5 不同负载下的服务器吞吐量数据

表6 服务器连接数

4.4 结果分析

通过对平均事务响应时间、吞吐量、点击数、服务器连接数等几个数据的分析,基本可以判断,在排除其他问题的前提下,该系统能接受的用户并发数为300以下.从表2~6的数据可以看出,平均值、最大值都存在瓶颈,而该系统的最优性能(最大能承受的并发用户数,在此条件下其他事务的执行表现),则需要反复地改变测试参数进行尝试.

就用户登录、案件登记、保存三个事务而言,耗时最长的是用户登录,这主要是因为用户登录需要在后台数据库进行查重,这不但需要进行一定的IO操作,而且不同的查重算法也会有不同的性能表现.后来与软件开发人员进行了研究,优化了文件的IO操作及用户名登录的查重算法,使得服务器响应时间进一步减少.

在实际测试过程中,当负载运行时,监控测试机的CPU使用率几乎都是100%,这可能导致很多虚拟用户无法发送出去,这一点在表2中也得到了印证.这必然会影响测试结果的准确性.同时,通过监视网络、网卡在测试期间的性能,但并没有发现瓶颈问题.这可能是因为此次测试是在局域网内测试,网络速度较快.

5 小结

软件测试对B/S结构的系统具有非常重要的意义.通过将负载及压力测试的结果与系统设计的性能要求进行比较,开发人员能有效地了解系统各模块及整体的性能,从而为满足预设的性能要求提供优化参考方案.自动化性能测试工具loadrunner具有支持协议多、界面友好、图表丰富、功能强大的特点,成为我们在进行性能测试时的有力助手.

常用的软件性能测试方式是基于既定的软硬件资源,设置用户数、并发数、任务数等进行测试分析和评估的.这对于用户数、并发数、任务数有既定目标的系统是适用的,即为了达到这一目标,不断提升硬件配置,不断进行软件调优.但如果想得到某个现有系统(既定的硬软件系统)的最优性能,则需要不断调整参数,重复尝试,这导致工作量成倍增长.后续的研究将致力于基于既定目标的“逆向测试”,即用比较简单的方式找到使系统性能表现最佳的用户数、并发数、任务数等指标.

[1]中国互联网络信息中心.中国互联网络发展状况调查统计报告[R].中国互联网络信息中心,2012.

[2]于涌.软件性能测试与loadrunner实战[M].北京:人民邮电出版社,2008:27-36.

[3]段念.软件性能测试过程详解与案例剖析[M].北京:清华大学出版社,2006:42-48.

[4]熊忠阳,李光勇,张玉芳,等.Web集群系统性能测试与优化[J].计算机应用研究,2008,25(3):826-832.

[5]文俊浩,桑春艳,何盼.电子政务系统性能测试应用研究[J].计算机科学,2009,36(4):179-180.

[6]MENASCE D A.Load testing ofweb wite[J].IEEE InternetComputing,2002,6(4):66-75.

猜你喜欢

脚本事务服务器
酒驾
基于分布式事务的门架数据处理系统设计与实现
安奇奇与小cool 龙(第二回)
河湖事务
通信控制服务器(CCS)维护终端的设计与实现
快乐假期
小编的新年愿望
中国服务器市场份额出炉
得形忘意的服务器标准
计算机网络安全服务器入侵与防御