LoadRunner 中 VuGen(虚拟用户生成器)脚本示例

什么是 VuGen?

VuGen(虚拟用户生成器)是 LoadRunner 中一个关键工具,用于创建测试脚本以模拟系统上的真实用户行为。在 VuGen 中,真人被虚拟用户(VUser)取代,VUser 执行的操作被记录在 VUser 脚本中,以模拟真实用户行为进行测试和监控。

VuGen 是 LoadRunner 的四个核心组件之一。它是您开始使用 HP LoadRunner 进行性能测试时接触的第一个组件。

让我们了解一些与 VuGen 相关的主要功能

VUScripts:正如已经描述的,VuGen 的目的是创建 VUScripts,用于模拟真实世界的虚拟用户。

操作:操作是在负载系统下执行的一组用户事务,以完成定义的任务。操作可以与其它编程语言中的函数相媲美。每个 Vuser 脚本都有 3 个默认函数

  • Vuser_init(用于登录应用程序)
  • Action(用于记录业务流程)
  • Vuser_end(用于注销应用程序)

VuGen 不仅记录脚本,还会回放它们(仅适用于 1 个 VUser)以确保脚本正确记录。一旦您确保脚本正确记录,您就可以将其纳入 LoadRunner 场景中。

VuGen 中的脚本开发过程

Script Development Process in VUGen

1. 录制脚本:通常,这是脚本编写的第一步,其中每个用户操作都被记录到脚本中。

2. 回放和验证:脚本录制完成后,回放脚本以确保其正常工作。通过应用程序前端或数据库验证任何影响。

3. 增强脚本:录制验证后,通过添加检查点、验证数据、添加事务和集合点来增强脚本。

4. 回放和验证:如前所述,重新回放脚本并验证一切都按预期工作。

5. 配置运行时设置:配置和控制步调持续时间、思考时间变化、代理设置以及是否希望忽略任何外部资源。

6. 用于负载场景:根据测试目标制定负载场景。使用负载分配和全球范围的代理来创建真实的场景。

QTP 和 LoadRunner 录制对比

VuGen 忽略用户界面对象

与 QTP 脚本不同,LoadRunner 脚本独立于 GUI。这是因为生成的代码不是基于 UI 对象工作的,而是基于客户端向服务器发出请求并期望服务器向客户端返回响应的原理工作的。这就是为什么回放 LoadRunner 脚本始终与浏览器无关。VUser 可以通过执行对服务器 API 的调用直接与服务器通信,而无需依赖客户端软件(SUL),这意味着如果对负载系统(SUL)的 UI 进行更改,脚本将不会受到影响。这表明性能测试完全基于客户端/服务器通信(请求和响应),而不是 GUI 对象。

有关更多详细信息,请参阅以下链接:http://youtu.be/FDORUeqpNJs?t=3m41s

我们将在下面更详细地了解 VuGen 脚本的工作原理。

Web Tours 应用程序介绍

出于所有实际操作目的,我们将使用 LoadRunner 捆绑的 Web Tours 应用程序。

HP Web Tours 需要一个依赖的“Web tours Apache 服务器”才能运行。要运行 Web Tours Apache 服务器,请转到“开始”菜单 =>“HP Software”=>“示例”=>“Web”,然后单击“启动 HP Web Tour 服务器”。

Introduction to Web Tours Application

一旦“服务器”被激活,它将打开一个 shell 并在控制台上输出。

控制台应如下图所示,在 shell 中查找您的 IP 地址。

Introduction to Web Tours Application

注意:如果您关闭此窗口,服务器将停止。

现在您可以访问 Web Tours 应用程序 –

Introduction to Web Tours Application

启动后,它将显示为 –

Introduction to Web Tours Application

了解 VuGen 环境

要运行 VuGen,请双击桌面上的 VuGen 快捷方式,或转到“开始”菜单 =>“HP Software”=>,然后单击“虚拟用户生成器”。

Understanding the VUGen Environment

VuGen 启动屏幕将如下所示

Understanding the VUGen Environment

启动屏幕随后将打开 HP 虚拟用户生成器主页,如下图所示

Understanding the VUGen Environment

从“文件”菜单中,您可以观察各种命令控件。这些控件的用途如下所述

Understanding the VUGen Environment

新建脚本和解决方案:用于开始创建新脚本。或者,您可以从工具栏按钮创建新脚本。

打开 >> 脚本解决方案:用于从目录打开现有、以前创建的脚本或解决方案。

添加 >> 新脚本:用于将以前创建的脚本添加到当前解决方案中。

当我们开始创建第一个脚本时,我们将熟悉其他控件。让我们继续学习。

如果视频无法访问,请点击此处

创建您的第一个 VuGen 脚本

在录制之前,请确保 Web Tours App 服务器正在运行。请记住,您需要保持服务器运行,因此不要关闭它。如果窗口打扰您,您可以将其最小化。

提示:在实际问题中,需要熟悉主题应用程序(SUL),特别是如果它涉及复杂的业务工作流和数据阶段。您还可以与 HP Web Tours 交互,以确保您可以在录制时重复完全相同的步骤。

在开始对任何应用程序(SUL)进行脚本编写之前,需要熟悉应用程序流程。通过本教程,让我们熟悉 HP LoadRunner 随附并自动安装的 HP Web Tours。

步骤 1) 单击“文件”=>“新建脚本和解决方案”,如下图所示

Creating First VUGen Script

您可以使用快捷键(Ctrl + N)执行相同的操作。

步骤 2) 显示选择协议的窗口。列表与以前的版本略有不同

1. 选择单协议

2. Web

3. 输入脚本名称

4. 点击创建

Creating First VUGen Script

注意:您可以使用协议顾问来确定您的应用程序用于通信的正确协议。对于 HP Web Tours,我们已经知道它需要“Web – HTTP/HTML”协议。我们将在稍后阶段学习如何确定 SUL 的正确协议。

提示:一个应用程序有时可能需要多个协议才能与其服务器通信。对于这种情况,请导航到窗口左侧的“多协议”列表。

Creating First VUGen Script

然而,HP Web Tours 在使用 VuGen 编写脚本时只需要一个协议。

提示:您无法轻松重命名脚本,因此在命名脚本时请发挥创意。如果您必须重命名脚本,请使用另存为功能并赋予新名称。一个好的命名约定可能是 WT01_Signup,其中 WT 是应用程序名称的缩写,01 是业务流程序列,Signup 指的是正在编写脚本的业务流程。另请注意,脚本名称中不能包含空格。

步骤 3) 一旦您单击“创建”,HP VuGen 将打开 IDE(集成开发环境)或代码编辑器。您会注意到脚本文件是空白的,除了 Function Action 的基本签名。下面的截图应该有助于更好地理解它

Creating First VUGen Script

步骤 4) 点击录制按钮创建第一个 VuGen 脚本您可以在工具栏中找到它。请参阅下面的快照

Creating First VUGen Script

步骤 5) 打开一个新窗口

Creating First VUGen Script

1. 如果我们研究上面的窗口,脚本的名称在弹出窗口的标题栏中提及。当您同时处理多个脚本时,这将帮助您对正确的脚本进行更改。

2. 如果您没有看到其余控件,请单击更少选项按钮以确保您没有查看更少选项。

3. 录制到动作字段确定录制后代码的生成位置。VuGen 脚本支持在录制期间和录制后切换到其他动作或创建新动作。

4. 录制:字段告诉 VuGen 主题应用程序(SUL)是 Web 应用程序还是桌面客户端。一旦录制开始,此选项无法覆盖。

5. 应用程序:字段告诉 VuGen 使用哪个浏览器进行录制。如果您不使用 Web – HTTP/HTML 协议,您将使用此字段选择桌面客户端。

提示:与 QTP 脚本不同,LoadRunner 示例脚本独立于 GUI。这是因为生成的代码不是基于 UI 对象工作的,而是基于客户端向服务器发出请求并期望服务器向客户端返回响应的原理工作的——通常以 HTML 的形式(因此协议的名称)

6. URL 地址:在此处输入 SUL 的 URL。当单击“开始录制”时,VuGen 将调用此 URL。如果使用的浏览器与您的默认浏览器不同,则将使用“录制:”字段中指定的浏览器。

7. 开始录制:立即与延迟:如果您选择了立即录制模式,您会注意到 VuGen 会在您点击“开始录制”按钮后立即开始录制事件。但是,如果您选择延迟录制模式,VuGen 将调用系统(SUL),但除非您点击浮动条上的录制按钮,否则不会开始捕获事件。

8. 工作目录:这是一个临时目录,VuGen 将在捕获事件时使用。您的脚本副本也将在此位置可用,以防您丢失文件夹 :)

9. 录制选项:这些设置告诉 VuGen 捕获哪些类型的 URL 以及使用哪种录制模式。

10. 开始录制:将开始录制。点击它。

步骤 6) 录制开始后,VuGen 将使用所选浏览器调用 HP Web Tours 应用程序。

让我们通过一个 LoadRunner 脚本示例来理解,该示例在 Web Tours 应用程序中注册一个用户并录制一个基本脚本。

Creating First VUGen Script

Creating First VUGen Script

将出现一个浮动录制条,它将提供各种录制控制。这显示了经过的时间和自动捕获的事件数量。让我们仔细看看浮动条。

Creating First VUGen Script

在上面显示的快照中,SUL 已触发 56 个事件,自录制开始以来已过去 0 分 25 秒。

您还会发现,在您输入时没有触发事件。问问自己为什么。你能回答吗?

这是因为在您输入时没有发生客户端到服务器的通信。因此,没有触发事件,也没有生成与输入相关的脚本。代码只会在您提交表单后(点击继续)生成。

录制可以暂停创建第一个 VuGen 脚本使用暂停按钮。请注意,只要录制保持暂停状态,应用程序触发的所有事件都将被忽略。这也意味着,即使您的应用程序正在发送请求和/或接收来自 SUL 的响应,只要您暂停了录制,脚本就不会生成。

如果您暂停了录制,您将需要点击录制创建第一个 VuGen 脚本浮动条上的按钮以恢复录制。

当您在 vuser_init 部分录制时,您会注意到集合点按钮未启用。切换到 Action(或创建新的 Action)并继续录制。请参阅下面的快照以了解如何切换 Action。

Creating First VUGen Script

您会注意到,切换到 Action 后,集合点创建第一个 VuGen 脚本按钮将自动启用。这是因为 VuGen 不允许在 vuser_init 中插入集合点

录制时使用事务

假设您希望衡量 X 个用户同时注册时的响应时间。为了解决这个目标,让我们继续阅读。

到目前为止,您已经在 vuser_init 动作中录制了应用程序的打开。切换到 Action 后,输入 SUL 所需的用户信息。现在,在您点击“继续”按钮之前,请按照以下步骤操作。

通过单击浮动条中的按钮录制时使用事务开始一个事务。输入事务的名称,例如 01_Signup。

提示:给事务命名时加上前缀,例如 01_,以帮助保持其唯一性,这是一个好习惯。

浮动条将如下所示

Using Transactions at Record Time

单击“确定”关闭事务标签。

单击应用程序的“继续”按钮。

点击按钮录制时使用事务结束事务。选择您希望关闭的事务名称,例如本例中的 01_Signup。请参阅下面的快照进行说明。

Using Transactions at Record Time

如果您没有多个打开的事务,您将只看到一个名称。但是,如果您有多个,您将能够从列表中进行选择。

录制时插入注释

现在您已成功关闭事务,您可以在录制时添加注释,以便以后学习代码时提醒自己。从浮动条中,点击按钮插入注释。浮动条旁边会出现一个文本框,您可以在其中输入任何文本。

Insert Comments at Record Time

此注释将插入到您刚刚完成的步骤(代码)之后,然后点击“确定”按钮。

从应用程序中,您可以单击“继续”。您会看到应用程序发出的欢迎信息。

现在选择 vuser_end 动作,然后从应用程序中点击退出。关闭应用程序,然后点击浮动条上的停止按钮录制时插入注释

代码生成

录制停止后,您会注意到 VuGen 的后生成活动。这包括根据您的录制生成代码、事务和注释。请参阅下面的快照。

Code Generation

VuGen 完成“执行后生成操作”后,将立即开始“执行相关后生成操作扫描”。我们将更详细地了解相关性意味着什么。

Code Generation

后生成操作完成后,您将看到 Design Studio 窗口。如果找到任何相关性候选项,您将能够在此窗口中进行查看。

Code Generation

您可以安全地点击“关闭”按钮,VuGen 将带您到已生成的代码。

窗口将如下所示

Code Generation

如上图所示,编辑器包含易于理解、可读的代码。您可以查看录制时使用的参数。

VuGen 的左侧称为步骤导航器,它让您无需查看代码的细枝末节即可理解“脚本”。例如,您可以将步骤理解为:打开 URL,花费思考时间并提交表单。这封装了与每个请求关联的所有参数。

您的脚本已生成,点击“文件”菜单,然后点击“将脚本另存为”以浏览您希望保存脚本的位置。如果您之前已保存过脚本,VuGen 将自动建议上次使用的目录。建议的名称将是您开始录制时提到的名称。

一切完成。

现在,祝贺您成功生成并保存了您的第一个脚本。

决定协议和协议顾问

您可能已经问过自己,为什么我们使用 Web – HTTP/HTML 协议。我们是如何决定应该使用哪个协议的?答案并不那么简单。

您需要具备一套架构基础技能作为回答此问题的先决条件。如果您是初学者,您可以与具有扎实客户端架构和 SUL 开发技能的人合作。您可以与 SUL 的开发人员交谈,找出您的应用程序利用了哪些接口。这应该会引导您自然而然地选择用于虚拟用户脚本开发和协议选择的接口。

为了满足对架构技能知之甚少的初学者的需求,LoadRunner 在 LoadRunner 9.1 中引入了一项名为协议顾问的功能。虽然这让许多人更容易上手,但人们应该更多地依赖架构和开发技能,而不是协议顾问以及从开发团队获取有关底层开发技术的信息。协议可能并非在所有情况下都建议正确的协议。

要使用协议顾问,请转到“录制”=>“协议顾问”=>“分析应用程序”。

请参阅下面的快照

Deciding a Protocol and Protocol Advisor

这将打开协议顾问的主窗口。如果您注意,这有点类似于录制时出现的窗口。让我们看一下下面的窗口。

Deciding a Protocol and Protocol Advisor

由于我们使用的是基于 Web 的应用程序,因此请选择 Web 浏览器。

指定随后将调用的应用程序的 URL。工作目录可以保留不变,因为这只是 VuGen 使用的临时目录。确保您对该目录具有读写权限。

点击“开始分析”按钮。

将出现一个浮动条,与录制时的浮动条有些相似。请看快照。

Deciding a Protocol and Protocol Advisor

该过程将显示经过的时间和触发的事件数量。然而,此信息并非必需。此事件计数器唯一的优点是,您知道您的客户端 SUL 正在与服务器通信。

一次只分析一个业务流程是个好习惯,因为大型企业应用程序中的各种业务流程可能涉及各种协议。例如,某些应用程序中的仪表板可能具有 Ajax 或 Flex 等,但这不会出现在登录页面上。

一旦您完成了特定业务流程的执行,您可以点击“停止”按钮。VuGen 协议顾问将生成一份关于协议建议的摘要报告。请看它看起来是什么样子。

Deciding a Protocol and Protocol Advisor

您可以看到协议顾问的建议。这些可能不是最佳选择。

您现在已经学会了使用协议顾问。但是,这对于初学者或需要“另一种意见”的情况可能会有所帮助——依靠您的架构感、编程知识、开发技能以及从开发团队获得的信息来决定协议。

录制选项

每当 VuGen 生成脚本时,生成的代码都基于“录制选项”下的各种配置,或者您可以按 Ctrl + F7 在 LoadRunner 中查看“录制选项”。

让我们在讨论所有配置之前看一下录制选项窗口。

Recording Options

配置有各种类别,如通用、关联、网络和数据格式扩展。让我们逐一了解其中最重要的部分。

通用 => 录制:

本主题需要详细理解。因此,将单独讨论。

通用 => 脚本:

请看下面的快照以一瞥

Recording Options

您会注意到语言下拉列表已禁用。一个常见的误解是 LoadRunner 不会生成任何其他语言的代码。另一个误解是它需要许可证才能使用其他语言。

两者都是错误的。LoadRunner 会自行决定在生成脚本时使用哪种语言。在几乎所有情况下,您都会发现自己在使用 C 语言

对于某些 Java 应用程序(如 Java 小程序),生成的代码将采用 JavaScript 语言

VuGen 将仅为使用 Visual Basic classic (MS Visual Studio 2002) 开发的应用程序生成 VBScript 语言脚本。

脚本选项:

您可以选择“在事务结束时生成固定的思考时间”。这意味着,无论用户等待多长时间,生成的思考时间(延迟)都将等于指定的值。该值以秒为单位。

动作文件中的最大行数指的是 VuGen 将生成动作的最大行数。如果脚本太大,VuGen 将自动创建一个新动作。默认设置为 60,000。可指定的最大值为 65,000。

在处理后端为 Oracle 的桌面应用程序时,您可能会发现此配置很有用。

通用 => 协议为您提供选择和取消选择您在录制开始时选择的任何协议的选项。

本质上,这只会在您希望重新生成脚本时使用。

请看屏幕

Recording Options

当您在录制脚本时使用了多协议时,这很有用。您可以重新生成脚本并取消选择您不希望的协议,从而获得一个新脚本,而无需重新录制。

通用 => 代码生成

请看下面的快照

Recording Options

此配置告诉 VuGen 在录制时查找关联候选项。如果您不希望自动关联,则可能希望关闭此功能。

关联 => 配置:

请看下面的截图,熟悉一下屏幕。

Recording Options

尽管自动关联的帮助只有 5% 到 10%,但您仍然可以选择“规则扫描”和“自动关联找到的值”。但是,如果您的脚本无法运行,您可以考虑单击按钮恢复到默认设置。

关联 => 规则:

转到规则,您可以在此处查看 VuGen 用于查找关联候选项的各种规则。如果您知道您的应用程序 (SUL) 使用哪些参数,您可以添加自定义规则。但是,这是录制时间设置的高级用法。如果您是初学者,可以安全地跳过此主题。

Recording Options

HTTP 属性 => 高级:

此框架提供与 HTTP 绑定相关的各种设置。

“重置每个动作的上下文”:启用此选项会指示 VuGen 在录制之前将所有 HTP 上下文重置为初始状态,为录制会话提供一个干净的开始。此选项默认启用。

除非需要,否则您可以保留其余配置不变。

Recording Options

网络 => 端口映射:

此框架应保持不变。如果您正在录制桌面应用程序,则可能需要选择 WinINet 级别数据。

Recording Options

您可以转到“选项”(只要您使用套接字级别数据),然后选择各种选项,例如 SSL 版本或其他类型的安全套接字层。如果您是初学者级别或不需要这些选项,则可以跳过。请看一眼以熟悉屏幕。

Recording Options

现在您已经完成了大部分录制时间选项,让我们进入下一个主题,了解基于 HTML 和基于 URL 脚本之间的区别。

基于 HTML 和基于 URL 脚本之间的区别

您可能已经注意到有一个选项可以选择基于 HTML 的脚本或基于 URL 的脚本。请看快照,回忆一下。

Difference between HTML-based and URL-based Scripting

那么这个选项是什么意思,应该选择哪个呢?

基于 HTML 的脚本基于用户操作,脚本包含直接对应于所采取操作的函数。让我们理解一小段代码的示例。

示例

web_link(“Enterprise Systems Performance",
"Text=Enterprise Systems Performance,"
"Snapshot=t4.inf",
LAST);

基于 URL 的脚本基于由于用户操作而发送到服务器的 HTTP 请求。

下面是 URL 模式下针对相同操作(在 HTML 模式下)执行的代码示例。

示例

web_url(“Enterprise Systems Performance",
"URL=/esp.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=/atc?. . . ,
"Snapshot=t4.inf",
"Mode=URL",
LAST);

提示:在继续之前,最好自己进行实验。更改录制时间设置并录制相同的脚本两次,即一次使用 HTML 模式,一次使用 URL 模式——然后比较两者。保持脚本简短,以便您能理解差异。

我们如何决定使用哪种模式?

让我们了解这两种模式的优缺点,以便理解在某些情况下哪种模式更适合。

HTML 录制的好处

  • 减少捕获动态值的需要
    • Action 标签值和隐藏数据不会被硬编码
    • 它们在回放期间从内存中检索
    • 如果它们是动态的,VUser 仍然会运行
  • 脚本只与业务流程一样大——每页一个步骤

HTML 录制的缺点

  • 脚本可扩展性较低
  • 在回放期间搜索内存(缓存)
    • 需要更多内存
    • 需要更多 CPU 算力

URL 录制的好处

  • 灵活性
    • 支持页面上的 Java Applet 和 ActiveX 对象
    • 能够在 UNIX 上回放
  • 可扩展性
    • 脚本比 HTML 脚本更具可扩展性,因为它们需要更少的资源。

URL 录制的缺点

  • 脚本需要更多的关联(不会从缓存中检索任何内容)
  • 上下文敏感检查将不起作用(解析器已禁用)*
  • 脚本庞大(所有图像和框架都作为单独的步骤记录)

这里有一个快速图示

HTML 模式 URL 模式
直观且易于理解。 不如 HTML 脚本直观。
脚本更小,请求封装且易于理解。 脚本庞大,包含对每个图像、CSS、HTML 等的调用,因此难以理解。
可扩展。 更具可扩展性,对创建负载测试更有效。

重新生成脚本的用途

假设您想录制您刚刚录制的相同脚本,但使用不同的录制时间设置。在这种情况下,您可以使用重新生成脚本功能。

您可以在“录制”=>“重新生成脚本”下访问它,或者使用快捷键 Ctrl+Shift+R。

Use of Re-Generate Script

一旦您点击菜单,VuGen 将给您一个警告,即您现有脚本和您对现有脚本所做的所有更改都将丢失。警告消息如下所示:

Use of Re-Generate Script

您也可以点击“选项”从这里打开“录制时间选项”。

点击“确定”以继续重新生成脚本。

回放脚本并理解日志

保存脚本后,您可以点击工具栏中的回放脚本并理解日志按钮回放或按 F5。

您可以在工具栏中找到此按钮。

Playback a Script and understanding Log

您需要确保服务器正在运行(应用程序正常运行所需)。

当您回放脚本时,您会注意到与 QuickTest Professional 不同,它不会打开任何浏览器进行回放。请记住,此执行将仅模拟 SUL 上的 1(单个)用户负载。此执行的目的是确保您的脚本正常工作。

Playback a Script and understanding Log

提示:您需要从应用程序本身验证影响。例如,如果您正在创建记录,请转到应用程序并手动验证您的脚本是否确实创建了记录。您的脚本很可能不会由另一个测试或 QA 团队进行测试,因此您需要非常小心您的脚本,并确保它们经过彻底测试。

您可以保持回放日志处于活动状态,因为这对于识别关联候选、任何错误和警告将非常有帮助。由于生成日志需要大量资源,因此在完成脚本调试并将其用于场景时最好将其关闭。

录制和回放期间生成的文件概述

让我们关闭 VuGen,看看它在脚本文件夹中创建的文件。

VuGen 创建一系列配置文件、数据文件和源代码文件,其中包含 VUser 运行时和设置信息。脚本每次迭代的结果都单独存储。如果您已经执行过一次脚本,您会注意到一个名为 result1 的目录。此目录供系统使用,应由测试人员忽略。

您需要了解的重要文件

VuGen 将为每个动作创建一个 .c(C 语言代码文件)。因此,最后,您将拥有 vuser_init.c 和 vuser_end.c 以及 Action.c – 如果您创建了更多动作,您也将看到相应的文件。例如,myAction.c。

回放日志保存在一个名为 output.txt 的文件中。如果您多次替换它,output.txt 将包含最后一次执行日志,而 output.bak 将包含上一次执行日志。

<script_name>.usr 文件将包含您自定义的所有运行时配置。即使您将所有配置保留为默认值,此 usr 文件也将包含该信息。此文件还包含用于创建脚本的 LoadRunner 版本。如果您正在阅读无法回忆版本号的旧脚本,此信息将很有用。

您将看到一个名为“data”的文件夹。此文件夹保存事件图像以及代码副本。当您“重新生成”代码时,VuGen 会使用这些文件。