LoadRunner 与 Web_Reg_Save_Param 示例的关联

什么是相关性?

相关性,顾名思义,是一种定义两个变量或实体之间关系的机制。一本词典将其定义为“两个或多个变量之间的统计关系,其中一个变量的值发生系统性变化,另一个变量的值也发生系统性变化”。

为什么我们需要相关性?

让我们了解与以下场景的相互关系。

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

客户端-服务器通信

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

录音时的相关性

  1. 现在,让我们研究一下重放过程中的客户端与服务器通信
  2. 在重播期间,客户端向服务器发送请求以启动会话
  3. 服务器接收请求并分配新的会话 ID XYZ
  4. 客户端使用之前记录的会话 ID ABC 启动会话,并向服务器发送请求以允许其记录
  5. 服务器无法识别 ID ABC,因为它期望已分配的 ID XYZ,因此会话失败。

重放时关联

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

  1. 在重播期间,客户端向服务器发送请求以启动会话
  2. 服务器接收请求,并分配一个新的会话 ID ZZZ
  3. 客户端从请求中解析这个新的会话 ID ZZZ。
  4. 客户端发送请求以启动 ID 为 ZZZ 的会话
  5. 服务器识别 ID ZZZ 并允许客户端重放脚本

我们需要关联

没什么 相关.

点击 点击这里 如果视频无法访问

对于 VUGen 来说,相关性是响应和任何先前请求之间的绑定关系。

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

简单来说,使用 Correlation 的解决方案是:

  1. 捕获步骤的输出值
  2. 使用上面捕获的值作为所有后续步骤的输入

在VUGen/LoadRunner中,相关性分为两类:

  • 自动关联
  • 手动关联

自动关联

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

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

自动关联可以分为 3 类:

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

虽然自动关联看起来更简单,但它很容易出错,而且只有不到 5% 的情况有效。始终建议使用手动关联。

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

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

自动关联

将打开以下窗口:

自动关联

单击“关联”=>“配置”– 将打开下面的窗口。

自动关联

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

您也可以点击“RULES”,您将看到以下内容:

自动关联

为了使自动关联功能正常工作,您需要确保规则扫描已标记为已选中。如果您单击自动关联找到的值,一旦找到关联候选,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(参数名称,左边界,右边界)

属性列表

兑换: 可能的值是:

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

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

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

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

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

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

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

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

备注:如果为脚本启用了“出错时继续”功能,则即使将 NOTFOUND 设置为“error”,当未找到边界时,脚本仍会继续运行,但会将错误消息写入扩展日志文件。

此属性也是可选的。

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

注意:为了向后兼容,支持使用 Instance 代替 ORD,但现已弃用。

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

关联帧ID:相对于所请求 URL 的 HTML 页面层次结构。可能值为 ALL 或数字。单击 RelFrameID 属性可查看详细说明。此属性为可选。

请注意: GUI 级脚本不支持 RelFrameID。

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

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

使用以下 search 搜索栏来有系统地查看 搜索范围 - 搜索分隔数据的位置。可能的值包括 Headers(仅搜索标头)、Body(仅搜索正文数据,不搜索标头)、No resource(仅搜索 HTML 正文,不包括所有标头和资源)或 全部 (搜索正文、标题和资源)。默认值为 ALL。此属性是可选的,但通常是首选。