1 引言
随着Internet快速发展,web已经对我们的工作和生活产生了深远的影响。范围广泛的、复杂的分布式应用正在web环境中出现。由于Web应用软件具有分布、异构、并发和平台无关等特性,并且依赖于众多的因素,如技术、组件、平台、服务器和架构,其固有的复杂特性决定了其使用过程中存在巨大风险,使得基于web的系统测试方法有别与传统的软件测试,包括内容测试、界面测试、功能测试、性能测试、兼容性测试、安全性测试等,其中性能测试是web应用测试的重中之重。本文将讨论使用自动化测试工具LoadRunner对web应用软件进行性能测试,并对测试过程中收集的数据进行分析,找出问题所在,以达到对系统性能优化和对瓶颈的预测。
2 性能测试
性能测试在软件的质量保证中起着重要的作用,是系统优化的有效手段。主要是检验软件是否达到需求规格说明中规定的各类性能指标,确保应用系统达到设计要求的性能。中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能测试。通常情况下,三方面有效、合理的结合,以达到性能测试的目的。
性能测试主要是在正常和大量使用的情况下评估系统的性能,它考察在不同的用户和大数据量的负载情况下,应用程序对用户请求做出的响应情况,以确保系统运行的安全性、可靠性和执行效率,为维护系统性能找到有效可行的方法。在Web应用程序测试中,性能测试通过模拟大量用户操作,对服务器发出请求,增加服务器的负载,同时监控数据库服务器、应用服务器及网络资源的使用情况,考察系统业务的响应时间和这些资源之间的关系,旨在验证系统能力和找出系统瓶颈。
性能测试的方法主要有以下几种:
● 负载测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。
● 压力测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别的测试。
● 疲劳强度测试:通常以系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作强度性能的过程。
● 大数据量测试:大数据量测试侧重点在于数据的量上,包括独立的数据量测试和综合数据量测试。独立的数据量测试针对某些系统存储、传输、统计、查询等业务进行大数据量测试,而综合数据量测试一般和压力性能测试、负载性能测试、疲劳性能测试相结合。
3 LoadRunner架构及测试步骤
LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner,能最大限度地缩短测试时间,优化性能和加速应用系统发布周期。
3.1 LoadRunner架构
LoadRunner主要由虚拟用户生成器(VuGen)、控制器(Controller)、结果分析器(Analysis)三个部分组成。
虚拟用户生成器(VuGen),是一种基于Windows的开发调试应用程序,通过它可以开发、调试并运行Vuser脚本。虚拟用户生成器通过录制客户端和后台服务器之间的通讯包,分析其中的协议,自动产生脚本。在测试环境中, LoadRunner 会在物理计算机上用虚拟用户(即 Vuser)代替实际用户。Vuser 通过以可重复、可预测的方式模拟典型用户的操作,在系统上创建负载。
控制器(Controller),是整个性能测试的核心,实际上它是一个框架程序和监控程序,负责将虚拟用户生成器开发的脚本以多进程/多线程的方式运行。通过它可以管理和维护场景,可以从一台工作站控制一个场景中分布在负载生成器上的所有Vuser ,并可以同时监视网络、服务器等资源。
结果分析器(Analysis),实际上是一个数据分析工具,测试完毕后,结果分析器收集汇总所有的测试数据,进行高级分析和汇总,迅速查找到性能问题并追溯原因。通过它可以将一个或多个场景运行的结果生成图和报告,可以将几个图合并成一个图,对多个图进行比较,在报告和图中直观地查看性能数据。
3.2 测试步骤
LoadRunner对基于 Web 的应用程序进行测试的过程分六个步骤:规划测试、创建Vuser脚本、创建方案、运行方案、监视方案和分析测试结果。
● 规划测试:定义性能测试要求,例如并发用户的数量、典型业务流程和所需响应时间。制定完整的测试计划、定义明确的测试计划将确保制定的方案能完成测试目标。
● 创建 Vuser 脚本:使用LoadRunner的虚拟用户生成器生成虚拟用户,它先记录业务流程(如用户登陆),然后将其转化为测试脚本,以虚拟用户的方式模拟真实用户的业务操作行为。利用虚拟用户,可以模拟产生成千上万个用户访问。
● 创建方案:使用 LoadRunner Controller 设置负载测试环境,业务流程组合和虚拟用户数量。
● 运行方案:通过 LoadRunner Controller 驱动、管理和监控负载测试。
● 监视方案:在负载测试过程中,LoadRunner内含的监测器可以随时观察到应用系统的运行性能。这些性能监测器实时显示性能数据(如响应时间)和其他系统组件包括应用服务器,web服务器和数据库等的实时性能。这样,可以在测试过程中从客户和服务器的双方面评估这些系统组建的运行性能。
● 分析测试结果:测试完毕, LoadRunner 将收集汇总所有的测试数据,并提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。
4 测试案例
4.1 项目背景
“**省以工代赈管理信息系统”采用B/S体系结构,三层松散耦合的应用系统,中间层是业务逻辑层,应用服务器处理所有的业务逻辑。本次测试的目的是使用LoadRunner对被测系统进行负载测试、压力测试、疲劳强度测试,获取测试数据,得出在目前各项硬件、网络环境下应用系统的性能表现。最后通过对测试数据的分析,找出系统性能瓶颈,并针对具体问题提出整改建议。
4.2 测试过程
4.2.1 开发测试脚本
根据用户提供的关键性能指标,确定需要测试的关键业务环节,选取测试用例包括如下内容:关键业务1:多个用户同时登录;关键业务2:电子地图查询;关键业务3:资金管理-报帐明细查询。
使用虚拟用户生成器录制脚本,根据用户实际使用情况,对录制的脚本进行二次开发编辑:启用IP欺骗,设置虚拟IP地址参数化登录用户的身份;在定义事务开始的脚本前加入集合点;在脚本中加入检查点,例如:登录成功的页面出现登录用户的ID;根据用户实际使用情况,把Think Time()设置为随机时间;在测试脚本中添加验证点,确保方案每次执行成功;
4.2.2 场景设置
脚本录制编辑完成后,在LoadRunner Controller中设置负载测试环境,主要内容包括:每个虚拟用户Action的循环1次;每个虚拟用户Action循环之间的间隔设置为无;日志处理,设置为有错误发生时传递消息;网络传输速度设置为最大带宽,即100Mbps;超时处理设置为600秒;资源监控:监控应用服务器、数据库服务器以及应用服务器、数据库的相关指标;
制定测试策略如下:
● 负载测试策略:多用例组合测试,数据库内保存实际使用数据量的基础上,设置100 Mbps网络环境,选择了不同的并发用户数进行测试。设计多组并发用户数,用户数由少至多渐次递增,直至测试结果发现有失败的事务为止。
● 压力测试策略:多用例组合测试,数据库内保存实际使用数据量的基础上,设置100 Mbps网络环境,选择了不同的并发用户数进行测试。设计多组并发用户数,用户数由最大负载用户数开始,由少至多渐次递增,直至测试结果发现有大量失败的事务为止。
● 疲劳强度测试:本次疲劳测试选择了测试用例进行组合,运行场景设置为:并发用户数50个,连续运行20小时。
4.2.3 运行、监视场景
场景设置完成后,运行测试。在场景运行时监视每个Vuser、查看Vuser生成的错误、警告和通知消息。同时使用联机监视,主要监视服务器cpu、内存和数据库等系统资源。
4.2.4 测试结果及分析
通过实际测试,首先确定在数据库存在实际使用产生的数据量时,系统在100Mbps的带宽条件下,可支持最大并发用户数为40个。在最大并发用户数的基础上逐渐递增用户执行压力测试,发现随着用户数的递增,特别是执行电子地图查询的用户数由10个增加到30个时 ,磁盘占用率由34.37%增长至88.303%.
在执行疲劳测试时, 当系统执行疲劳测试1小时21分后,出现大量访问请求被拒绝的情况,当系统执行疲劳测试18小时12分后,所进行的‘查看电子地图’的操作的平均事务响应时间经过连续走高,达到最大的119.699秒。见图如下: