LoadRunner测试工具——组件与架构

什么是LoadRunner?

LoadRunner是一款性能测试工具,由Mercury于1999年率先推出。LoadRunner后来在2006年被HPE收购。2016年,LoadRunner被MicroFocus收购。

LoadRunner支持各种开发工具、技术和通信协议。事实上,它是市场上唯一一款支持如此多协议进行性能测试的工具。LoadRunner软件产生的性能测试结果被用作与其他工具的基准。

LoadRunner视频

为什么选择LoadRunner?

LoadRunner不仅是性能测试领域的先行者,它仍然是性能测试领域中的市场领导者。在最近的一项评估中,LoadRunner在性能测试行业中占据了约85%的市场份额。

LoadRunner

广义上讲,LoadRunner工具支持RIA(富互联网应用)、Web 2.0(HTTP/HTML、Ajax、Flex和Silverlight等)、移动、SAP、Oracle、MS SQL Server、Citrix、RTE、邮件,最重要的是,Windows Socket。市场上没有其他竞争工具能够在一个工具中提供如此广泛的协议。

LoadRunner

在软件测试中选择LoadRunner更具说服力的是该工具的可靠性。LoadRunner工具早已建立了声誉,您经常会发现客户使用LoadRunner交叉验证您的性能基准。如果您已经在使用LoadRunner来满足您的性能测试需求,您会感到轻松。

LoadRunner软件与HP的其他工具紧密集成,如统一功能测试(QTP)和ALM(应用生命周期管理),使您能够执行端到端测试流程。

LoadRunner的工作原理是在目标应用程序上模拟虚拟用户。这些虚拟用户,也称为VUser,复制客户端的请求并期望相应的响应以通过事务。

为什么需要性能测试?

据估计,每年因糟糕的网络性能而导致44亿美元的收入损失

在当今Web 2.0时代,如果网站在8秒内没有响应,用户就会点击离开。想象一下,当你在Google上搜索或在Facebook上发送朋友请求时,等待5秒钟的情景。性能停机的后果往往比想象的更具破坏性。我们有最近发生在美洲银行在线银行、亚马逊网络服务、Intuit或黑莓等事件的例子。

根据Dunn & Bradstreet的报告,财富500强企业中有59%每周经历约1.6小时的停机。考虑到财富500强企业的平均员工人数至少为10,000人,每小时支付56美元,那么这类组织的停机劳动力成本每周将达到896,000美元,每年则超过4600万美元。

据估计,Google.com(2013年8月19日)仅5分钟的停机就让这家搜索巨头损失了高达545,000美元。

据估计,由于最近的亚马逊网络服务中断,公司每秒损失1100美元的销售额。

当一个软件系统被组织部署时,它可能会遇到许多可能导致性能延迟的情况。许多因素会导致性能下降,其中一些例子可能包括:

  • 数据库中记录数量的增加
  • 对系统同时发出的请求数量增加
  • 同时访问系统的用户数量比过去增加

LoadRunner架构是什么?

广义而言,HP LoadRunner的架构复杂但易于理解。

LoadRunner Architecture
LoadRunner架构图

假设您被分配测试Amazon.com 5000名用户的性能

在现实生活中,这5000个用户不会都在主页,而会在网站的不同部分。我们如何模拟这种差异。

VUGen

VUGen或虚拟用户生成器是一个IDE(集成开发环境)或一个功能丰富的编码编辑器。VUGen用于复制被测系统(SUL)的行为。VUGen提供了一个“录制”功能,以编码脚本的形式(也称为VUser脚本)记录客户端和服务器之间的通信。

因此,考虑到上述示例,VUGen可以录制以模拟以下业务流程:

  1. 浏览Amazon.com的产品页面
  2. 结账
  3. 支付处理
  4. 查看我的账户页面

控制器

一旦VUser脚本完成,Controller就是LoadRunner的主要组件之一,它通过管理以下方面来控制负载模拟:

  • 每个业务流程或VUser组模拟的VUser数量
  • VUser的行为(渐增、渐减、同时或并发性质等)
  • 负载场景的性质,例如真实生活、目标导向或验证SLA
  • 使用哪些注入器,每个注入器对应多少VUser
  • 定期整理结果
  • IP欺骗
  • 错误报告
  • 交易报告等

以我们的例子类比,控制器将向VUGen脚本添加以下参数:

1) 3500名用户正在浏览Amazon.com的产品页面

2) 750名用户正在结账

3) 500名用户正在执行支付处理

4) 250名用户仅在500名用户完成支付处理后才检查“我的账户”页面

甚至更复杂的场景也是可能的

  1. 每2秒启动5个虚拟用户,直到达到3500个虚拟用户的负载(浏览亚马逊产品页面)。
  2. 迭代30分钟
  3. 暂停25个虚拟用户的迭代
  4. 重新启动20个虚拟用户
  5. 每秒启动2个用户(在结账、支付处理、我的账户页面)。
  6. 将在机器A上生成2500个VUser
  7. 将在机器B上生成2500个VUser

代理机/负载生成器/注入器

HP LoadRunner Controller负责模拟数千个虚拟用户——这些虚拟用户会消耗硬件资源,例如处理器和内存——从而限制了模拟它们的机器。此外,Controller从同一台机器(Controller所在的机器)模拟这些虚拟用户,因此结果可能不准确。为了解决这个问题,所有虚拟用户都分布在不同的机器上,称为负载生成器或负载注入器。

通常的做法是,控制器位于不同的机器上,负载从其他机器进行模拟。根据VUser脚本的协议和机器规格,可能需要多个负载注入器才能进行完整的模拟。例如,一个HTTP脚本的VUser模拟每个VUser需要2-4MB内存,因此模拟10,000个VUser需要4台每台拥有4GB RAM的机器。

借鉴我们亚马逊示例的类比,这个组件的输出将是:

分析

负载场景执行完毕后,LoadRunner的“分析”组件便开始发挥作用。

在执行过程中,控制器会创建原始形式的结果转储,其中包含LoadRunner版本和配置信息。

所有错误和异常都记录在一个名为output.mdb的Microsoft Access数据库中。“分析”组件读取此数据库文件以执行各种类型的分析并生成图表。

这些图表显示了各种趋势,以理解负载下错误和失败的原因;从而有助于判断SUL、服务器(如JBoss、Oracle)或基础设施是否需要优化。

下面是一个带宽可能成为瓶颈的例子。假设Web服务器的容量是1GBps,而数据流量超过这个容量,导致后续用户受到影响。为了确定系统是否能满足这些需求,性能工程师需要分析应用程序在异常负载下的行为。下面是LoadRunner生成的一个图表,用于阐明带宽。

Analysis

如何进行性能测试

性能测试路线图大致可分为5个步骤:

  • 负载测试规划
  • 创建VUGen脚本
  • 场景创建
  • 场景执行
  • 结果分析(随后进行系统调优)

现在你已经安装了LoadRunner,让我们一步步了解这个过程中涉及的步骤。

Performance Testing

性能测试过程中的步骤

步骤1) 负载测试规划

性能测试的规划与SIT(系统集成测试)UAT(用户验收测试)的规划不同。规划可以进一步分为以下几个小阶段:

组建您的团队

Assemble Your Team

开始LoadRunner测试时,最好记录在整个过程中参与的每个团队的成员。

项目经理

提名项目经理,他将负责此活动并作为升级联系人。

功能专家/业务分析师

提供SUL的使用分析,并提供网站/SUL业务功能的专业知识

性能测试专家

创建自动化性能测试并执行负载场景

系统架构师

提供SUL的蓝图

Web开发人员和主题专家

  • 维护网站并提供监控方面
  • 开发网站并修复错误

系统管理员

  • 在整个测试项目期间维护相关服务器

概述涉及的应用程序和业务流程

成功的负载测试需要您计划执行某些业务流程。业务流程包括明确定义的步骤,符合所需的业务事务,以实现您的负载测试目标。

可以准备一个需求指标来评估系统上的用户负载。下面是一个公司考勤系统的例子:

Outline Applications and Business Processes Involved

在上述示例中,数字表示在给定小时内连接到应用程序(SUL)的用户数量。我们可以提取在一天中任何小时内连接到业务流程的最大用户数量,这在最右侧的列中计算。

同样,我们可以得出一天中任何时候连接到应用程序(SUL)的用户总数。这在最后一行的计算中。

以上两项事实结合起来,为我们提供了我们需要对系统进行性能测试的用户总数。

定义测试数据管理程序

性能测试得出的统计数据和观察结果受多种因素的极大影响,如前所述。为性能测试准备测试数据至关重要。有时,特定的业务流程会消耗一个数据集并生成一个不同的数据集。以下面为例:

  • 用户“A”创建一份财务合同并提交审核。
  • 另一个用户“B”每天批准200份由用户“A”创建的合同。
  • 另一个用户“C”每天支付约150份由用户“B”批准的合同。

在这种情况下,用户B需要在系统中“创建”200份合同。此外,用户C需要150份“已批准”的合同,才能模拟150个用户的负载。

这隐含意味着您必须至少创建200+150=350份合同。

之后,批准150份合同作为用户C的测试数据,其余200份合同将作为用户B的测试数据。

概要监视器

推测所有可能影响系统性能的因素。例如,减少硬件配置会对SUL(被测系统)的性能产生潜在影响。

列出所有因素并设置监视器,以便您可以测量它们。这里有一些例子:

  • 处理器(用于Web服务器、应用程序服务器、数据库服务器和注入器)
  • 内存(用于Web服务器、应用程序服务器、数据库服务器和注入器)
  • Web/应用服务器(例如IIS、JBoss、Jaguar Server、Tomcat等)
  • 数据库服务器(Oracle和MSSQL Server中的PGA和SGA大小,存储过程等)
  • 网络带宽利用率
  • 集群情况下的内部和外部网卡
  • 负载均衡器(以及它是否均匀地分布负载到集群的所有节点)
  • 数据流(计算客户端和服务器之间传输的数据量——然后计算网卡容量是否足以模拟X个用户)

步骤2) 创建VUGen脚本

规划之后的下一步是创建VUser脚本。

步骤3) 场景创建

下一步是创建您的负载场景

步骤4) 场景执行

场景执行是指通过指示多个虚拟用户同时执行任务,模拟服务器上的用户负载。

您可以通过增加和减少同时执行任务的虚拟用户数量来设置负载级别。

这种执行可能导致服务器承受压力并异常运行。这正是性能测试的目的。然后,将得出的结果用于详细分析和根本原因识别。

步骤5) 结果分析(随后进行系统调优)

在场景执行期间,LoadRunner记录了应用程序在不同负载下的性能。从测试执行中提取的统计数据被保存并进行详细分析。“HP 分析”工具生成各种图表,有助于识别系统性能滞后和系统故障背后的根本原因。

一些获得的图表包括:

  • 首次缓冲时间
  • 事务响应时间
  • 平均事务响应时间
  • 每秒点击数
  • Windows资源
  • 错误统计
  • 事务摘要

常见问题

性能测试总是只针对基于客户端-服务器的系统进行。这意味着,任何非客户端-服务器架构的应用程序都不需要进行性能测试。

例如,Microsoft 计算器既不是基于客户端-服务器的,也不是多用户运行的;因此,它不适合进行性能测试。

Performance Testing

了解性能测试和性能工程之间的区别至关重要。以下是对此的理解:

性能测试是一门关注在各种参数下测试和报告软件应用程序当前性能的学科。

性能工程是通过测试和调优软件以实现所需性能的过程。此过程旨在优化最重要的应用程序性能特性,即用户体验。

从历史上看,测试和调优是截然不同且经常相互竞争的领域。然而,在过去几年中,一些测试人员和开发人员独立协作,创建了调优团队。由于这些团队取得了显著成功,将性能测试与性能调优相结合的概念得到了普及,现在我们称之为性能工程。