LoadRunner 中的关联与 Web_Reg_Save_Param 示例

什么是关联?

关联,顾名思义,是定义两个变量或实体之间关系的一种机制。字典将其定义为“两个或多个变量之间的统计关系,其中一个变量值的系统变化伴随着另一个变量值的系统变化”。

为什么我们需要关联?

让我们通过以下场景来理解关联。

假设您正在使用 LoadRunner 录制脚本。

客户端-服务器通信

  1. 在录制过程中,客户端向服务器发送请求以开始会话。
  2. 服务器收到请求并分配一个新的会话 ID ABC。
  3. 客户端将此会话 ID ABC 存储在脚本中。
  4. 客户端使用 ID ABC 启动会话,并向服务器发送请求以允许其录制。
  5. 服务器识别 ID ABC 并允许客户端录制脚本。

Correlation While Recording

  1. 现在,让我们研究一下回放期间的客户端-服务器通信。
  2. 在回放过程中,客户端向服务器发送请求以开始会话。
  3. 服务器收到请求并分配一个新的会话 ID XYZ。
  4. 客户端使用先前录制的会话 ID ABC 启动会话,并向服务器发送请求以允许其录制。
  5. 服务器无法识别 ID ABC,因为它预期的是它分配的 ID XYZ,因此会话失败。

Correlation While Replay

我们需要一个解决方案,用于捕获运行时发送的动态值并将其返回给服务器。以下是使用此解决方案时的客户端-服务器通信方式:

  1. 在回放过程中,客户端向服务器发送请求以开始会话。
  2. 服务器收到请求,并分配一个新的会话 ID ZZZ。
  3. 客户端从请求中解析出这个新的会话 ID ZZZ。
  4. 客户端发送请求以使用 ID ZZZ 启动会话。
  5. 服务器识别 ID ZZZ 并允许客户端回放脚本。

We Need Correlation

这正是关联

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

在 VUGen 中,关联是响应与任何先行请求之间的绑定关系。

在各种情况下,请求是基于服务器先前收到的响应,例如,会话 ID、从服务器获取的服务器日期/时间。这些值每次运行应用程序或录制脚本时都不同。显然,如果脚本的执行依赖于服务器返回的值,这意味着您需要找到一种机制,可以“捕获”服务器响应并将其附加到服务器期望的那些请求中。这在 LoadRunner 中通常称为关联。

简而言之,使用关联的解决方案是:

  1. 从一个步骤中捕获输出值
  2. 使用上述捕获的值作为所有后续步骤的输入

关联在 VUGen/LoadRunner 中分为两类:

  • 自动关联
  • 手动关联

自动关联

LoadRunner 提供了一种机制,可以轻松地以自动方式执行关联。

VUGen 将要求您至少运行两次录制好的脚本,以便它可以在内部比较服务器响应中变化的值。

自动关联可分为三类:

  • 自动检测关联
  • 基于规则的关联
  • 关联所有语句
规则名称 何时使用
自动检测关联 检测并关联 HP LoadRunner 支持的应用程序服务器的动态数据
基于规则的 用于处理上下文已知但不受支持的应用程序服务器。
关联所有 帮助盲目关联所有动态数据。

尽管自动关联看起来更简单,但它可能容易出错,并且仅在不到 5% 的情况下有效。始终建议使用手动关联。

要在录制时配置自动关联,请在录制脚本后在录制时间设置中执行以下配置。

点击录制 => 录制选项(或点击 Ctrl + F7),

Automatic Correlation

将打开以下窗口

Automatic Correlation

点击关联 => 配置 – 将打开以下窗口。

Automatic Correlation

在这里,您需要勾选在您的目标应用程序中使用的所有应用程序(如 ASPNET 等)。在右侧,您可以看到将检测关联可能候选项的规则,例如 _VIEWSTATE。您还可以通过点击“新规则”按钮添加更多应用程序或自定义规则。

您也可以点击“规则”,您会看到如下内容:

Automatic Correlation

为了使自动关联生效,您需要确保“规则扫描”已勾选。如果您点击“自动关联找到的值”,VUGen 在找到关联候选项时不会提示您选择,而是直接关联它们。

我们稍后会了解用于关联的 API。但是,建议使用 HTML 比较而不是文本比较。

选择任何规则后,点击“确定”按钮关闭窗口。

从菜单中点击自动关联,VUGen 将使用新的配置重新生成脚本(无需录制)。VUGen 会自动添加所需的代码片段来处理关联。我们将在手动关联中更详细地查看示例。

请注意,无论您是手动执行关联还是使用自动关联,代码片段都将包含完全相同的语法和函数。

自动关联脚本的步骤

  1. 录制脚本
  2. 回放脚本
  3. 识别需要关联的值
  4. 选择这些值并点击自动关联按钮
  5. 再次运行脚本进行验证。成功运行表示关联成功。

提示

  • 关联有助于使用不同的值运行脚本
  • 关联还可以减小脚本的大小

手动关联

手动关联是指直接在脚本中编写代码,以应对不断变化的值。我们可以将其分为以下步骤:

  1. 确定要捕获的值
  2. 找到要捕获的值的左右文本边界(WEB)
  3. 找到应该使用哪个文本边界的出现次数
  4. 在请求包含要捕获值的页面的代码片段上方,向脚本添加一个 web_reg_save_param 函数
  5. 向函数添加参数名称、左边界、右边界和出现次数
  6. 每次出现动态值时,将其参数化
  7. 验证正确执行
web_reg_save_param (" OracleAppJSESSIONID3",
	"LB/IC=JSESSIONID=",
	"RB/IC=;",
	"Ord=l",
	"Search=headers",
	"RelFrameId=l",
	LAST);

web_reg_save_param("Siebel_Analytic_ViewState2",
	"LB/IC=ViewState\" value=\"",
	"RB/IC=\"",
	"Ord=1",
	"Search=Body",
	"RelFrameId=l",
	LAST);

手动关联可以通过 VUser 比较来完成。VUser 比较方法中的关联步骤可以分为以下几步:

  1. 识别需要关联的动态值
  2. 找到包含动态值的服务器响应
  3. 将动态值捕获到参数中
  4. 用参数替换动态值的每次出现
  5. 验证更改

理解 Web_reg_save_param 函数

VUGen 提供了多种函数或 API 来关联候选项,包括:

  • web_reg_save_param
  • web_reg_save_param_ex
  • web_reg_save_param_regexp
  • web_reg_save_param_xpath

这里只提供了一个简要的介绍,如需详细了解函数及其参数,请打开 VUGen,编写函数(或使用“步骤工具箱”),将光标移至函数上并按 F1 键——熟悉 VUGen 帮助并养成习惯。在行业中工作时,您将大量接触它。

以下是函数详情

web_reg_save_param(参数名称,左边界,右边界)

属性列表

Convert(转换):可能的值为

HTML_TO_URL:将 HTML 编码数据转换为 URL 编码数据格式

HTML_TO_TEXT:将 HTML 编码数据转换为纯文本格式;此属性是可选的。

忽略重定向:如果指定“Ignore Redirections=Yes”,并且服务器响应是重定向信息(HTTP 状态码 300-303、307),则不搜索响应。相反,在收到重定向响应后,GET 请求会发送到重定向位置,并在该位置的响应上执行搜索。

此属性是可选的。默认值为“Ignore Redirections=No”。

LB: 参数或动态数据的左边界。如果您不指定 LB 值,它将使用数据开头的所有字符作为边界。边界参数区分大小写。要进一步自定义搜索文本,请使用一个或多个文本标志。此属性是必需的。请参阅“边界参数”部分。

NOTFOUND:未找到边界时处理选项,并生成空字符串。

“Not found=error”,默认值,表示在未找到边界时会引发错误。

“Not found=warning”(早期版本为“Not found=empty”),不会发出错误。如果未找到边界,它会将参数计数设置为 0 并继续执行脚本。“warning”选项非常适合您希望查看是否找到字符串,但又不希望脚本失败的情况。

注意:如果脚本启用了“继续错误”,那么即使将 NOTFOUND 设置为“error”,当未找到边界时,脚本也会继续执行,但错误消息会写入扩展日志文件。

此属性也是可选的。

ORD:指示匹配的序号位置或实例。默认实例为 1。如果您指定“All”,它会将参数值保存到数组中。此属性是可选的。

注意:支持使用 Instance 代替 ORD 以实现向后兼容性,但此用法已被弃用。

RB:参数或动态数据的右边界。如果您不指定 RB 值,它将使用数据结尾前的所有字符作为边界。边界参数区分大小写。要进一步自定义搜索文本,请使用一个或多个文本标志。此属性是必需的。请参阅“边界参数”部分。

RelFrameID:HTML 页面相对于请求 URL 的层次结构级别。可能的值为 ALL 或一个数字。点击 RelFrameID 属性查看详细描述。此属性是可选的。

注意:RelFrameID 在 GUI 级别脚本中不受支持。

SaveLen:要保存到参数的找到值的子字符串长度,从指定的偏移量开始。此属性是可选的。默认值为 -1,表示保存到字符串末尾。

SaveOffset:要保存到参数的找到值的子字符串偏移量。偏移量值必须为非负数。默认值为 0。此属性是可选的。

Search(搜索):搜索范围 - 在何处搜索分隔数据。可能的值是 Headers(仅搜索标头)、Body(仅搜索正文数据,不包括标头)、No resource(仅搜索 HTML 正文,排除所有标头和资源)或 ALL(搜索正文、标头和资源)。默认值为 ALL。此属性是可选的,但通常是首选。