LoadRunner 中的关联与 Web_Reg_Save_Param 示例
什么是关联?
关联,顾名思义,是定义两个变量或实体之间关系的一种机制。字典将其定义为“两个或多个变量之间的统计关系,其中一个变量值的系统变化伴随着另一个变量值的系统变化”。
为什么我们需要关联?
让我们通过以下场景来理解关联。
假设您正在使用 LoadRunner 录制脚本。
客户端-服务器通信
- 在录制过程中,客户端向服务器发送请求以开始会话。
- 服务器收到请求并分配一个新的会话 ID ABC。
- 客户端将此会话 ID ABC 存储在脚本中。
- 客户端使用 ID ABC 启动会话,并向服务器发送请求以允许其录制。
- 服务器识别 ID ABC 并允许客户端录制脚本。
- 现在,让我们研究一下回放期间的客户端-服务器通信。
- 在回放过程中,客户端向服务器发送请求以开始会话。
- 服务器收到请求并分配一个新的会话 ID XYZ。
- 客户端使用先前录制的会话 ID ABC 启动会话,并向服务器发送请求以允许其录制。
- 服务器无法识别 ID ABC,因为它预期的是它分配的 ID XYZ,因此会话失败。
我们需要一个解决方案,用于捕获运行时发送的动态值并将其返回给服务器。以下是使用此解决方案时的客户端-服务器通信方式:
- 在回放过程中,客户端向服务器发送请求以开始会话。
- 服务器收到请求,并分配一个新的会话 ID ZZZ。
- 客户端从请求中解析出这个新的会话 ID ZZZ。
- 客户端发送请求以使用 ID ZZZ 启动会话。
- 服务器识别 ID ZZZ 并允许客户端回放脚本。
这正是关联。
如果视频无法访问,请点击此处
在 VUGen 中,关联是响应与任何先行请求之间的绑定关系。
在各种情况下,请求是基于服务器先前收到的响应,例如,会话 ID、从服务器获取的服务器日期/时间。这些值每次运行应用程序或录制脚本时都不同。显然,如果脚本的执行依赖于服务器返回的值,这意味着您需要找到一种机制,可以“捕获”服务器响应并将其附加到服务器期望的那些请求中。这在 LoadRunner 中通常称为关联。
简而言之,使用关联的解决方案是:
- 从一个步骤中捕获输出值
- 使用上述捕获的值作为所有后续步骤的输入
关联在 VUGen/LoadRunner 中分为两类:
- 自动关联
- 手动关联
自动关联
LoadRunner 提供了一种机制,可以轻松地以自动方式执行关联。
VUGen 将要求您至少运行两次录制好的脚本,以便它可以在内部比较服务器响应中变化的值。
自动关联可分为三类:
- 自动检测关联
- 基于规则的关联
- 关联所有语句
规则名称 | 何时使用 |
---|---|
自动检测关联 | 检测并关联 HP LoadRunner 支持的应用程序服务器的动态数据 |
基于规则的 | 用于处理上下文已知但不受支持的应用程序服务器。 |
关联所有 | 帮助盲目关联所有动态数据。 |
尽管自动关联看起来更简单,但它可能容易出错,并且仅在不到 5% 的情况下有效。始终建议使用手动关联。
要在录制时配置自动关联,请在录制脚本后在录制时间设置中执行以下配置。
点击录制 => 录制选项(或点击 Ctrl + F7),
将打开以下窗口
点击关联 => 配置 – 将打开以下窗口。
在这里,您需要勾选在您的目标应用程序中使用的所有应用程序(如 ASPNET 等)。在右侧,您可以看到将检测关联可能候选项的规则,例如 _VIEWSTATE。您还可以通过点击“新规则”按钮添加更多应用程序或自定义规则。
您也可以点击“规则”,您会看到如下内容:
为了使自动关联生效,您需要确保“规则扫描”已勾选。如果您点击“自动关联找到的值”,VUGen 在找到关联候选项时不会提示您选择,而是直接关联它们。
我们稍后会了解用于关联的 API。但是,建议使用 HTML 比较而不是文本比较。
选择任何规则后,点击“确定”按钮关闭窗口。
从菜单中点击,VUGen 将使用新的配置重新生成脚本(无需录制)。VUGen 会自动添加所需的代码片段来处理关联。我们将在手动关联中更详细地查看示例。
请注意,无论您是手动执行关联还是使用自动关联,代码片段都将包含完全相同的语法和函数。
自动关联脚本的步骤
- 录制脚本
- 回放脚本
- 识别需要关联的值
- 选择这些值并点击自动关联按钮
- 再次运行脚本进行验证。成功运行表示关联成功。
提示
- 关联有助于使用不同的值运行脚本
- 关联还可以减小脚本的大小
手动关联
手动关联是指直接在脚本中编写代码,以应对不断变化的值。我们可以将其分为以下步骤:
- 确定要捕获的值
- 找到要捕获的值的左右文本边界(WEB)
- 找到应该使用哪个文本边界的出现次数
- 在请求包含要捕获值的页面的代码片段上方,向脚本添加一个 web_reg_save_param 函数
- 向函数添加参数名称、左边界、右边界和出现次数
- 每次出现动态值时,将其参数化
- 验证正确执行
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 比较方法中的关联步骤可以分为以下几步:
- 识别需要关联的动态值
- 找到包含动态值的服务器响应
- 将动态值捕获到参数中
- 用参数替换动态值的每次出现
- 验证更改
理解 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。此属性是可选的,但通常是首选。