例如,对于一个星期一早上有 1000 个用户同时登录到系统的应用,该系统的响应时间是多少?系统会崩溃吗?要回答这些问题(以及更多的问题),一个完整的应用程序性能测试解决方案必须:
u 测试一个组合了各种软件应用程序和硬件平台的系统
u 确定服务器与任何给定应用程序的适应性
u 在开发出必要的客户端软件之前测试服务器
u 模拟多个客户端与单个服务器应用程序之间进行交互的环境
u 在几十、几百甚至几千个潜在用户的负载情况下测试应用程序
传统的或手动的测试方法只提供不完全的负载测试解决方案。例如,构建一个许多用户同时使用系统的环境,手动测试整个系统。每个用户使用一台计算机并向系统提交输入内容。这种手动测试方法有下列缺陷:
u 昂贵,需要大量的人员和设备
u 复杂,尤其是使多个测试人员协调和同步
u 需要高度严密的组织,尤其是有针对性地纪录并分析结果
u 手动测试的可重复性是有限的 LoadRunner简介
Mercury Interactive 的 LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具,其自动解决方案着眼于解决手动性能测试的缺陷:
u LoadRunner 通过使用虚拟用户(Vuser)代替实际用户来减少人员要求。这些Vuser 模拟实际用户的行为 ,运行实际的应用程序。
u 因为一台计算机上可以运行许多 Vuser,因此 LoadRunner 减少了对硬件的要求。
u LoadRunner Controller 可以从一个单一的控制点简单有效地控制所有的Vuser。
u LoadRunner 联机监视应用程序的性能,可以在测试执行期间对系统进行微调。
u LoadRunner 在测试过程中会自动记录应用程序的性能。可以从众多的图和报告中进行选择以查看性能数据。
u LoadRunner 可检查出现性能延迟的地方:网络或客户端延迟、CPU 性能、I/O延迟、数据库锁定和数据库服务器上的其他问题。LoadRunner 将监视网络和服务器资源以帮助改进性能。
u 因为 LoadRunner 测试是完全自动的,可以根据需要反复执行这些测试。
下面我们将简单介绍Loadrunner架构和各个组件的主要功能,以及在PTT项目测试中的应用。希望能对开发人员和测试人员掌握Loadrunner的使用起到抛砖引玉的作用。 Loadrunner的几个基础概念
场景(Scenario):使用 LoadRunner 可以将应用程序性能测试需求划分为多个场景。场景定义了每个测试会话中发生的事件。举例来说,场景定义并控制要模拟的用户的数量及其执行的操作,以及他们运行模拟操作所用的计算机。
虚拟用户(Vuser):在场景中, LoadRunner 用Vuser代替实际用户。运行场景时,Vuser 模拟实际用户的操作来使用应用程序。一台工作站只能容纳一个实际用户,而多个 Vuser 可以同时运行在同一台工作站上。实际上,一个场景可以包含几十、几百甚至几千个 Vuser。
虚拟用户脚本(Vuser script):Vuser 在场景中执行的操作是用 Vuser 脚本描述的。运行场景时,每个 Vuser 都执行Vuser脚本。Vuser 脚本中包含度量并记录应用程序组件的性能的函数。
集合点(Rendezvous):集合点指示Vuser 在测试执行期间等待,直到多个 Vuser 在某一点到达,以使他们可以并行执行某个任务。插入集合点是为了衡量在加重负载的情况下服务器的性能情况。例如,要模拟银行服务器的峰值负载,可以插入一个集合点来指示 100 个 Vuser 同时往他们的帐户存入现金。
事务(Transaction):为了衡量服务器的性能,我们需要定义事务。事务代表度量过程中的一个或一系列操作。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。
LoadRunner的架构 LoadRuner主要由虚拟用户生成器(VuGen)、控制器(Controller)、负载生成器(Load Generator)、结果分析器(Analysis)四个部分组成(如图1)。
图1 LoadRunner的架构虚拟用户生成器(VuGen),是一种基于 Windows 的应用程序,通过它可以开发、调试并运行Vuser脚本。
负载生成器(Load Generator),是执行 Vuser 脚本,从而使 Vuser 可以模拟实际用户操作的程序,一台测试机器上只能分布一个负载生成器。
控制器(Controller),通过它可以管理和维护场景,可以从一台工作站控制一个场景中分布在负载生成器上的所有 Vuser,并可以同时监视网络、服务器等资源。
结果分析器(Analysis),通过它可以将一个或多个场景运行的结果生成图和报告,可以将几个图合并成一个图,对多个图进行比较,在报告和图中直观地查看性能数据。
虚拟用户生成器
虚拟用户生成器(VuGen),用于针对各种应用程序类型和通信协议开发 Vuser 脚本,是 LoadRunner 用于开发 Vuser 脚本的主要工具。
开发测试脚本需要如下五个步骤:
1. 录制基本的Vuser脚本。录制 Vuser 脚本时,VuGen 会生成各种函数,来精确定义会话过程中所执行的操作,以创建基础Vuser 脚本。VuGen录制脚本过程:
u 监控应用程序和服务器之间的通信;
u 生成需要的函数调用;
u 将生成的函数调用插入到Vuser脚本中;
2. 增强并编辑脚本。当录制完一个基本的用户脚本后,在正式使用于测试前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本:
u 添加函数增强脚本功能;
u 定义事务度量服务器性能;
u 插入集合点,同步多个Vuser操作;
u 插入注释,描述活动或提供关于特定操作的信息;
u 模拟用户思考时间;
u 将函数参量参数化;
3. 配置运行时设置。录制 Vuser 脚本后,可以配置其运行时设置。运行时设置定义脚本运行的方式,更精确地模拟各种不同的用户活动。
4. 以独立模式运行Vuser脚本。完善 Vuser 脚本并设置其运行时设置之后,在脚本集成到负载测试场景之前,在脚本生成器中先以独立脚本的模式运行,用以确定从 Controller 运行脚本时,该脚本将如何运行。
5. 将脚本集成到Loadrunner场景中。确认了脚本正确、可用之后,可以选择负载生成器将该脚本集成到场景中。 LoadRunner三个测试步骤
l 创建场景
要使用 LoadRunner 测试系统,必须创建场景。场景描述每个负载测试会话期间发生的事件,用以模拟现实生活中的用户活动(各类操作在时间和空间上的分布)。场景包含一些如何模拟实际用户的相关信息:虚拟用户 (Vuser) 组、Vuser 将运行的测试脚本,以及用于运行脚本的负载生成器计算机。
场景包括常规手动场景、百分比模式手动场景和面向目标的场景3类:
1. 常规手动场景 如果选择创建常规手动场景,则将“新建场景”对话框中选择的每个脚本分配给 Vuser 组。然后,可以为每个 Vuser 组分配多个虚拟用户。可以指示某个组中的所有 Vuser 在同一台负载生成器计算机上运行相同的脚本,也可以为组中的各个 Vuser 分配不同的脚本和负载生成器。
2. 百分比模式手动场景 在百分比模式下,可以定义场景中要使用的 Vuser 总数,并为每个脚本分配负载生成器和占总数一定百分比的 Vuser。
3. 面向目标的场景 在面向目标的场景中,可以定义希望实现的测试目标, LoadRunner 将根据定义的目标自动创建一个场景。在一个面向目标的场景中,可以定义五种类型的目标:虚拟用户数、每秒点击次数(仅 Web Vuser)、每秒事务数、每分钟页面数(仅 Web Vuser)或场景的事务响应时间。如果想要测试应用程序可以同时运行多少个 Vuser,建议定义虚拟用户目标类型;如果想要测试服务器的稳定性,建议定义每秒点击次数、每分钟页面数或每秒事务数目标类型;如果想要测试在期望的事务响应时间内可以同时运行多少个 Vuser,建议定义事务响应时间目标类型。
创建场景后,可以为场景选择或生成计划(Schedule),以准确描绘用户行为(操作类型和这些操作的计时等,由 Vuser 脚本表示)。
场景计划可以指示 LoadRunner自发出RUN 命令后,延迟一段时间再开始执行场景,也可以指定一个特定时间才开始执行场景。
使用计划生成器,可以对手动场景进行计时设置,从而限制场景的执行持续时间或Vuser 组在场景中的持续时间。通过指定场景或 Vuser 组应处于“正在运行”状态的分钟数,可以限制执行持续时间。当场景或组到达其时间限制时,就会结束。
对于手动场景,还可以规定在某一时间段内 LoadRunner 启动和停止的 Vuser的数量。在指定的时间量内,可以指定LoadRunner 应同时启动或停止场景或Vuser 组中所有的 Vuser,还是仅启动/ 停止一定数量的 Vuser。
一切配置妥当,开始运行测试。
l 运行测试
用VuGen创建的每个Vuser脚本通过执行对服务器API的调用来直接与服务器通信,而不需要依赖客户端软件。这样,便可以使用Vuser来检查服务器性能(甚至在客户端软件的用户界面完全开发好之前)。当Vuser与服务器直接通信时,不需要在用户界面中耗费系统资源。这样就可以在一个工作站中同时运行大量Vuser,进而可以使用很少的测试计算机来模拟非常大的服务器负载。
可以在无人干预的情况下运行整个场景,或者可以交互地选择要运行的 Vuser组和 Vuser。场景开始运行时, Controller 会首先检查场景配置信息。接着,它将调用已选定与该场景一起运行的应用程序。然后,它会将每个 Vuser 脚本分配给其指定的负载生成器。Vuser 组就绪后,它们将开始执行其脚本。
在场景运行时,可以监视每个 Vuser、查看由 Vuser 生成的错误、警告和通知消息以及停止 Vuser 组和各个 Vuser。可以指示 LoadRunner 允许单个 Vuser 或组中的 Vuser 在停止前完成它们正在运行的迭代、在停止前完成它们正在运行的操作或者立即停止运行。
l 监视资源
使用联机监视器可以监视 Vuser 状态、错误、事务、系统资源、Web 资源、网络延迟、防火墙服务器资源、Web 服务器资源、Web 应用程序服务器资源、数据库服务器资源、流媒体资源、ERP/CRM 服务器资源、Java 性能、应用程序部署和中间件性能监视等。
另外,在运行场景时,默认情况所有 Vuser 信息将存储在每个 Vuser 主机的本地。场景执行之后,Analysis会自动将这些结果进行整理或合并,即将所有主机的结果传输到结果目录中,并生成图和报告。Analysis测试数据分析功能异常强大,包含了很多概率数理统计的知识,并提供高级的分析和报告工具,有各种各样的报表,甚至可以将多个报表组合,以便迅速查找到出错的位置和原因并作出相应的调整。
它的基于HTML 的报告提供一个比较性能结果所需的基准,以此衡量在一段时间内,有多大程度的改进并确保应用成功。公网集群系统的测试背景
KP2T公网集群系统是由广州金鹏集团有限公司开发和生产的集群通信产品,它基于公众移动通信网,利用公网现有的系统网络资源、广泛的覆盖范围、“小区制”通信模式以及全面完善的技术支持等优势,提供专业用户所需的高性能、大容量、数据速率更高的集群业务和功能;主要依托CDMA公网资源,利用移动通信无线数据信道压缩传递技术,实现点对点、点对多点集群通信功能。同时利用CDMA2000网络的数据通道传输带宽资源实现简单多媒体内容传输,并采用综合定位技术实现对团队成员定位,实时显示部署和运作状态,达到快速指挥调度目的。
本产品系列由集群终端(MT)、公网集群交换机(TSC)、用户数据库(HIC)、数字集群调度子系统(TDC,TDU)、操作维护中心(TMC,SMU)、定位服务子系统(LCS)组成,其组网结构如图2所示:
集群终端集成了普通手机功能和数字集群系统终端功能。
公网数字集群交换机采用分布式结构,由一系列的服务器群组成,各服务器上运行相同的软件,负责其分管用户的接入、呼叫控制功能;当系统需要扩容时,只需增加相应的服务器就可达到平滑扩容的目的。
用户数据库存储移动台和用户群组的静态和动态信息。
数字集群调度子系统主要负责发布系统消息,群组以及用户状态显示,监听移动台或群组通信,实现指挥调度等功能。
操作维护中心主要负责监测数字集群系统的运行情况,完成告警、统计、日志和用户数据库等操作维护功能。
定位服务子系统通过GPSONE定位技术获得用户的位置信息,精度可以达到室外50米以内,提供定位服务器及相应的定位终端平台。六步测试流程
下面以ptt项目早期版本的性能测试部分内容为例,讲述loadrunner在实际测试中的应用。
1. 规划测试
测试目标:系统支持最大用户并行呼叫数,以及在各种呼叫模型下的呼叫时延与服务器的性能;
定义Vuser活动:运行Vuser脚本模拟手持终端呼叫手持终端,分别为300、350、400用户同时发起呼叫;
2. 开发测试脚本
在虚拟用户脚本中,模拟手持终端登录、发起呼叫、释放呼叫、退出等活动;定义呼叫过程的事务;插入思考的时间间隔、集合点,同步用户发起呼叫,增加服务器的负载压力。
3. 创建场景
在度量服务器性能测试中,我们选择常规手动场景,为每个Vuser组选择一个或多个脚本,分配要测试的不同虚拟用户数。
创建场景后,使用计划生成器同时启动、停止所有虚拟用户,并模拟实际通话时长设定场景执行持续时间为15分钟。
4. 运行场景
场景配置完成后,运行测试。
在场景运行时监视每个Vuser、查看Vuser生成的错误、警告和通知消息;
5. 监视场景
使用联机监视,主要监视服务器CPU、内存等系统资源和网络流量、网络时延、呼叫时延等。
6. 分析测试结果
以下是从测试结果中选取的有代表性的部分监视图。
400个并发呼叫数的cpu占用率
400个并发呼叫数的内存占用率
300个并发呼叫数的语音包时延
400个并发呼叫数的语音包时延
300个并发呼叫数的网络流量
400个并发呼叫数的网络流量通过不断地增加并行呼叫数,比较测试获取的各个结果,其中CPU、内存占用率稳定,CPU未超过60%,内存占用率未超过20%,而网络流量随、网络时延随着并行呼叫数的增加有微量的上升,均在可接受的范围之内。因此公网集群交换机单服务器支持400个并发呼叫。
结束语 Loadrunner具有快速、可靠、可重复同一操作、可灵活制定测试场景、脚本可重用、支持HTTP、Winsock、WAP等大量协议等优点。但存在脚本支持的功能不够灵活、在负载测试中没进行功能校验、对不支持的协议无能为力可扩展性差等不足之处, 在测试中还需要使用其他工具或方法辅助测试。
从后续的测试情况及公网集群系统的实际运用情况看,使用LoadRunner进行公网集群系统性能测试,能够较准确地评估系统的真实性能,对开发的后期优化和性能改进等起到很大的作用。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/