`

LR 中手工关联web_reg_save_param 函数用法

阅读更多
LR 中手工关联web_reg_save_param 函数用法
2010年02月25日 星期四 11:29

LR中对参数关联分两种,一种是手工关联,一种是自动关联,自动关联就是LR工具帮你找到,比如按CTRL+F8 可以进行自动关联,这种方法可以满足一些简单的需求,使用比较方便,但当LR工具找不到关联时,我们就要考虑自动关联了。而web_reg_save_param 函数一般用于LR中进行手工关联,运行脚本时,web_reg_save_param 函数将扫描所访问的后续 HTML 页。如果指
定左边界和/ 或右边界, VuGen 将搜索这些边界之间的文本。VuGen 找到文本
后,会将其分配给某个参数。具体函数请看文章附件即HELP。

举个例子说明吧:

比如说对源码中的<input type="hidden" id="orderId" name="orderId" value="f28958249e141e62312d855ce73252d3"/>的orderId的值进行关联,那么我们可以这样写:

web_reg_save_param("orderId",
   "LB=name=\"orderId\" value=\"",
   "RB=\"",
   LAST);

这个就是要在整个HTML文件中找左边界是:name="orderId" value="

右边界是:"

中间文本的值,找到后赋给orderId。

这样一个手工关联就做好了,很简单吧。

另外:web_reg_save_param一般用在提交web_submit_form,或web_url函数之前。

 

附件:

函数的语法如下所示:

下表列出可用的属性。注意,属性值字符串(例如 Search=all)不区分大小写。

NotFound
找不到边界并且生成了空字符串时的处理方法。默认值
“ERROR”表示找不到边界时 LoadRunner 应发出错误消
息。如果设置为“EMPTY”,则不会发出错误消息,并且
脚本的执行将继续进行。注意,如果为脚本启用了“出现
错误时仍继续”,则即使将 NOTFOUND 设置为
“ERROR”,在找不到边界时脚本将仍然会继续执行,但
会将错误消息写入扩展日志文件中

LB
参数或动态数据的左边界。此参数必须为非空的、以 null
结尾的字符串。边界参数区分大小写;要忽略大小写,请
在边界之后添加“/IC”。如果在边界之后指定“/BIN”,
则指定为二进制数据

RB
参数或动态数据的右边界。此参数必须为非空的、以 null
结尾的字符串。边界参数区分大小写;要忽略大小写,请
在边界之后添加“/IC”。如果在边界之后指定“/BIN”,
则指定为二进制数据.

LB/RB赋值的是你要抓取文本的左/右边的内容,例如你要从"abcdefghijk"中抓取"de"保存在变量中,那么LB="abc"和RB="fghijk"就可以抓到你要的东西了

RelFrameID
与请求的 URL 相关的 HTML 页的层次结构级别。可能的
值为 ALL 或数字

Search
搜索的范围 - 搜索已分隔的数据的位置。可能的值为
Headers (仅搜索页眉)、Body (仅搜索正文数据,而不
包括页眉)或 ALL (搜索正文和页眉)。默认值为 ALL

ORD
此可选参数表示匹配的序号或出现的次数。默认序号为 1。
如果指定“All”,则会将参数值保存在数组中,是将找到的动态变量保存到数组中。默认是ord=1.如果搜索到的字符是多个,并想将他保存在数组里,则ord=all;他们分别保存到pr_1 pr_2 .....。其中pr_count为内部函数,统计数组的个数。

SaveOffset
找到的值的子字符串偏移量,将保存到参数。默认值为 0。
偏移量值必须为非负数,偏移量。从搜索到的字符串中,取子串。默认saveoffset=0.

Savelen
找到的值的子字符串的长度(在指定的偏移量中),将保
存到参数。默认值为 &ntilde;1,表示直到字符串的末尾

Convert
要应用于数据的转换方法:
HTML_TO_URL:将 HTML 编码数据转换为 URL 编码数
据格式
HTML_TO_TEXT:将 HTML 编码数据转换为纯文本格式。

      函数的一些使用技巧:
        1、web_reg_save_param必须在获取返回值的操作前面注册,在获取返回值的操作后面使用
        2、保存参数最大不能超过256字节,如果超过256字节请使用int web_set_max_html_param_len (const char *length )函数扩大参数保存范围
        例如:web_set_max_html_param_len ("1024"); //扩大参数最大保存范围为1024字节
        3、LB和RB后面跟着"/ic",则边界大小写都匹配(不加,也就是默认是大小写敏感的)
        例如:web_reg_save_param("IsRight","LB/ic=cache-control: private\r\n\r\n","RB/ic=|",LAST);

  • 实例讲解

目的:取得页面中的商品状态,如果状态是正常态就改为注销态,否则改为正常态。

录制脚本使用的是URL based script

将返回的数据记录到日志

  • 直接手工访问页面,检查URL

该页面上点击右键,选择属性

看到URL,对照录制下的脚本中有:
web_url("modifyOfferingStatePage.do",
"URL={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=
{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",

 

"Resource=0",
"RecContentType=text/html",
"Referer={url}/web/businessAccept/order/orderMenu.do",
"Snapshot=t23.inf",
"Mode=HTTP",
LAST);
于是在这段代码前添加注册函数:
web_reg_save_param("oldstate",
"LB/IC=原有商品状态:</td>",
"RB/IC=</td>",
"Search=body",
"Ord=1",
"RelFrameId=1",
"SaveOffset=57",
"SaveLen=4",
LAST);
web_url("modifyOfferingStatePage.do",
"URL={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=
282172&offeringSpecId=1&offeringSpecName=
普通宽带(ADSL/LAN)&customerName={clientname}&nodeId=
260000&pos1=定购管理&pos2=修改商品状态",

"Resource=0",
"RecContentType=text/html",
"Referer={url}/web/businessAccept/order/orderMenu.do",
"Snapshot=t23.inf",
"Mode=HTTP",
LAST);
...............
//将得到的内容存入日志用于检查
lr_log_message("getvalue : %s",lr_eval_string ("{oldstate}"));

if ( lr_eval_string ("{oldstate}") == "正常"){
web_submit_data("modifyOfferingState.do",
"Action={url}/web/businessAccept/order/modifyOfferingState.do",
"Method=POST",
"RecContentType=text/html",
"Referer={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=
{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",

"Snapshot=t24.inf",
"Mode=HTTP",
ITEMDATA,
"Name=offering.state", "Value=1", ENDITEM,
"Name=offering.recentModifyReason", "Value=修改原因", ENDITEM,
"Name=offering.customerId", "Value=281218", ENDITEM,
"Name=offering.offeringId", "Value=282172", ENDITEM,
"Name=offering.offeringSpecId", "Value=1", ENDITEM,
"Name=offering.recentMender", "Value=root", ENDITEM,
"Name=offering.recentModifyDatetime", "Value=2005-01-16", ENDITEM,
"Name=nodeId", "Value=260000", ENDITEM,
"Name=customerName", "Value={clientname}", ENDITEM,
"Name=offeringSpecName", "Value=普通宽带(ADSL/LAN)", ENDITEM,
"Name=submit.x", "Value=33", ENDITEM,
"Name=submit.y", "Value=13", ENDITEM,
LAST);
}
Else
{
web_submit_data("modifyOfferingState.do",
"Action={url}/web/businessAccept/order/modifyOfferingState.do",
"Method=POST",
"RecContentType=text/html",
"Referer={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=
{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",

"Snapshot=t24.inf",
"Mode=HTTP",
ITEMDATA,
"Name=offering.state", "Value=0", ENDITEM,
"Name=offering.recentModifyReason", "Value=修改原因", ENDITEM,
"Name=offering.customerId", "Value=281218", ENDITEM,
"Name=offering.offeringId", "Value=282172", ENDITEM,
"Name=offering.offeringSpecId", "Value=1", ENDITEM,
"Name=offering.recentMender", "Value=root", ENDITEM,
"Name=offering.recentModifyDatetime", "Value=2005-01-16", ENDITEM,
"Name=nodeId", "Value=260000", ENDITEM,
"Name=customerName", "Value={clientname}", ENDITEM,
"Name=offeringSpecName", "Value=普通宽带(ADSL/LAN)", ENDITEM,
"Name=submit.x", "Value=33", ENDITEM,
"Name=submit.y", "Value=13", ENDITEM,
LAST);
}
从日志中截取的真实的返回内容为:
vuser_init.c(689): <tr bgcolor="#F6F6F6">\r\n
vuser_init.c(689): <td width="30%" height="23" align="right">\r\n
vuser_init.c(689): 原有商品状态:</td>\r\n
vuser_init.c(689): <td width="70%" height="23"> 正常 </td>\r\n
vuser_init.c(689): </tr>\r\n
vuser_init.c(689): <tr bgcolor="#F4FBFE">\r\n
vuser_init.c(689): <td width="30%" height="23" align="right">\r\n
vuser_init.c(689): 修改后的状态:</td>\r\n
vuser_init.c(689): <td width="70%" height="23">\r\n
vuser_init.c(689): \r\n
vuser_init.c(689): \r\n
vuser_init.c(689): \r\n
vuser_init.c(689): <input type="radio" name='offering.state' value='4' checked>
可以看到左边界是:原有商品状态:</td>,
右边界是:</td>,偏移量为:57(包括了空格),
长度为:4(因为一个汉字长度为2),最后存入变量的值是:正常

4.经验总结
1)为了便于脚本的调试,将返回的数据都写入日志是个好办法;
2)为了验证取得的数据是否是自己期望的,可以将取得的数据写入日志中进行验证,
例:lr_log_message("getvalue : %s",lr_eval_string ("{oldstate}"));
3)因为它是一个注册函数,必须在返回信息前使用,所以注册的位置必须正确,否则很可能得到类似如下错误:
4)vuser_init.c(734): Error -27190: No match found for the requested parameter "oldstate".
Check whether the requested boundaries exist in the response data. Also,
if the data you want to save exceeds 1024 bytes,
use web_set_max_html_param_len to increase the parameter size [MsgId: MERR-27190]
5)vuser_init.c(734): Error -27187: The above "not found"
error(s) may be explained by header and body byte counts being 0 and 0,
respectively. [MsgId: MERR-27187]
6)vuser_init.c(734):
web_concurrent_end highest severity level was "ERROR" [MsgId: MMSG-27181]
7)所以使用手工方法,右键页面确定在代码中哪个位置之前注册函数至关重要
8)如果脚本中中文为乱码,可能是因为源文件的字符集和操作系统字符集不匹配。试试:

分享到:
评论

相关推荐

    LR产用函数的应用web_reg_save,lr_save_string,lr_eval_string等函数

    本文将深入探讨LoadRunner中的几个关键函数——`web_reg_save_param`、`lr_save_string`和`lr_eval_string`,它们在实际测试场景中扮演着重要角色。 1. `web_reg_save_param`函数: 这个函数主要用于动态参数的...

    loadRunner常用函数

    如果参数有多个值,可以使用 web_reg_save_param 函数带有 "Ord=All" 参数来获取所有的数值。例如: web_reg_save_param("参数名","LB=左边界","RB=右边界","Ord=All",LAST); 注册成功后,{参数名_count} 表示取得...

    LR中的WEB函数列表

    - `web_custom_request`:此函数允许用户发送自定义HTTP请求,可以使用任何HTTP方法,如GET、POST等,以模拟用户可能执行的复杂操作。 - `web_image`:模拟用户在网页上点击图像,通常用于交互式地图或图片操作。 ...

    LR系统讲座之关联函数(视频)

    然后,我们可以使用LoadRunner提供的关联函数(如web_reg_save_param或web_custom_request)来提取并保存这个动态数据。创建关联时,可以设置匹配规则,如正则表达式,确保正确提取所需信息。 在使用关联时,我们将...

    loadrunner脚本录制, LR录制网页上下载附件

    在录制网页上下载附件时,需要使用 web_reg_save_param 函数来保存服务器的响应内容。web_reg_save_param 函数可以根据左、右边界和搜索模式来保存响应内容。 在实际应用中, LoadRunner 提供了丰富的 API 函数,...

    LR 关联高级篇

    2. **关联组件**:LR提供了多种关联组件,如Web_reg_save_param、Web_reg_save_param_ex、Web_reg_find等,它们分别有不同的用途和使用场景。 3. **正则表达式**:在LR中,通常使用正则表达式来识别和提取动态数据...

    LR 教程_关联(Correlation).pdf

    3. **手动关联**:使用`web_reg_save_param`函数将Session ID保存为参数。 - 代码示例: ```c web_reg_save_param("SessionID", SEARCH_STRINGARRAY("id=", "Expires"), LAST); ``` 4. **替换硬编码数据**:在...

    LR 教程_关联 (貌似《软件性能测试与LR实战》其中介绍内容的电子版)

    一旦识别出这些动态数据,就可以使用`web_reg_save_param`创建一个参数,并在脚本中使用这个参数替换硬编码的值,确保每次请求都能正确反映实际用户的行为。 关联是LoadRunner性能测试中的关键技术,它使得脚本能够...

    lr 函数大全之中文解释

    - 参数化:通过`Web_reg_save_param()`捕获动态数据,并使用`Web_set_variable()`在后续请求中使用这些参数,实现动态脚本。 - 错误处理:使用`web_set_selenium_speed()`控制执行速度,`Web_check_options()`检查...

    LoadRunner函数使用说明

    - Web协议:以"web"为前缀的函数,如`web_reg_save_param`,用于注册和保存网页元素,例如`web_reg_save_param("flight_name", "LB=Select your departure ", "RB=", LAST);`,用于捕获动态参数。 - 数据库相关的...

    soap协议解析

    在使用`web_custom_request`时,通常会配合`web_reg_save_param`函数来保存或提取响应中的特定参数。`web_reg_save_param`可以在响应中注册并保存一个参数,这对于解析XML响应尤其有用。然而,正确使用该函数需要...

    灵活运用LR函数编写测试脚本

    首先,当服务器返回的动态数据需要被测试脚本使用时,我们需要使用关联函数(如`web_reg_save_param`)来捕获并存储这些数据。在上述案例中,作者遇到了一个特定场景:银行内部评级系统的一个页面,其中客户编号是...

    新建 LR手动关联Microsoft Office Word 文档.docx

    `web_reg_save_param`是LR中用于保存动态数据的关键函数,它从服务器响应中提取特定数据并将其存储为参数。例如: ```c web_reg_save_param("sessionid", "LB=Session_id:", "RB=;", "Search=Body", LAST); ``` ...

    LR手动关联Microsoft Office Word 文档.docx

    手动关联允许用户识别脚本中哪些变量是动态变化的,并通过特定函数(如`web_reg_save_param`)来捕获这些变量的值,以便后续请求使用。 #### 手动关联步骤详解 1. **录制脚本**:首先,使用VuGen录制一个简单的...

    LR函数大全[参考].pdf

    1. `Intweb_reg_save_param`:这是一个用于提取网页响应中的参数值的函数。通过定义左边界和右边界,可以定位并保存目标参数。当参数只出现一次时,使用该函数;如果注册成功,返回0,失败则返回1。 2. `web_reg_...

    loadrunner函数

    ### LoadRunner函数详解 LoadRunner是一款强大的性能测试工具,它能够模拟实际用户的操作行为和大量并发行为,并且...了解并熟练掌握这些函数的使用方法,将大大提高脚本编写的效率和准确性,从而更好地进行性能测试。

    LoadRunner中的常用函数整理-新.docx

    除了以上提到的函数,LoadRunner还有许多其他功能强大的函数,如web_image_check用于验证网页上的图像,web_reg_save_param用于提取和保存响应中的动态数据,web_submit_data和web_submit_form用于处理表单提交等。...

    LR手动关联参数化问题总结

    ### LR手动关联参数化...2. **深入理解LR函数**:熟悉`web_reg_save_param`的所有可用属性,以便更好地定制关联过程。 通过上述方法,你可以有效地解决LR测试中遇到的手动关联问题,提高测试脚本的可靠性和准确性。

Global site tag (gtag.js) - Google Analytics