当我们每次访问网站都需要提交从服务器获取的动态文本时就会需要用到关联函数,就好像每次乘坐火车票我们都需要用最新的火车票,如果用旧车票就不能做火车,如果我们采用了录制时的旧动态码如usersession再次访问服务器,跟服务器通信就是失败,于是我们就需要用到web_reg_save_param函数将服务器反馈的动态码保存成文本字符串到一个参数,而这个函数必须要放在动作函数之前,如web_url,放在动作函数之后就无法取到想要的数据。

第一,函数各参数描述

int web_reg_save_param( const char *ParamName, <List of Attributes>, LAST );  

1. ParaName:要创建的参数名,用来保存获取的动态文本

2. List of Attributes包含:

Convert:可选属性

HTML_TO_URL:将html编码的数据转换为url编码的数据格式

HTML_TO_TEXT:将html编码的数据转换为纯文本格式

LB:左边界,不支援正则表达式,如果没有指定则从数据开始的字符算

NOTFOUND:

"Notfound=error",默认设置,当找不到边界时触发一个错误

"Notfound=warning",如果找不到边界,触发一个警告,继续运行脚本

两种设置触发的log message如下2条,一条显示错误,一条显示警告。

submit_login.c(6): 错误 -26377: 找不到所请求参数“usersession”的匹配项。请检查响应数据中是否存在请求的边界。此外,如果要保存的数据超过 256 字节,请使用 web_set_max_html_param_len 增加参数大小 [MsgId: MERR-26377]
submit_login.c(6): 通知: 保存参数“usersession = ”。
submit_login.c(6): web_submit_data("login.pl") 最高严重级别为“ERROR”,795 个正文字节,225 个标头字节 [MsgId: MMSG-26388]

submit_login.c(): 警告 -26377: 找不到所请求参数“usersession”的匹配项。请检查响应数据中是否存在请求的边界。此外,如果要保存的数据超过  字节,请使用 web_set_max_html_param_len 增加参数大小      [MsgId: MWAR-]
submit_login.c(): 通知: 保存参数“usersession = ”。
submit_login.c(): web_submit_data("login.pl") 最高严重级别为“warning”, 个正文字节, 个标头字节 [MsgId: MMSG-]

ORD:默认设置为1,把查找到的第1个符合边界设置的文本字串赋值给变量;如果设置为All则把所有找到的结果都赋值给变量,而变量则变成数组类型

RB:右边界,不支援正则表达式,如果为空则使用直到数据结束的所有字符作为边界。

RelFrameID:可选,在GUI脚本中不支持

SaveLen:可选,从指定偏移量中找到的值的子字符串的长度,以便保存到参数中。默认是-1,表示保存到字符串末尾

SaveOffset:可选,找到值的子字符串的偏移量,以保存到参数中。

以下查找到的子字符“125219.9064zttAQQQpVDDDDDDDDiztfpQQti”,如果设置"SaveLen=5","SaveOffset=8"则保存到参数中的文本为10247。

Search:可选,查找范围,可能的值是header(只搜索header)、Body(只搜索Body数据,而不是Headers)、Noresource(只搜索HTML Body,不包括所有header和资源)或all(搜索Body、Headers和资源)。默认值为ALL

第二,实际应用

Loadrunner自带的飞机订票系统,在登陆的时候需要提供usersession,这是一个动态码,每次访问打开网站都会不同,我们就用关联函数来获取这个值。

查看网页源代码:

</style>
<form method=post action=error.pl onSubmit='doJSFormSubmit1(this)' target=body>
<input type=hidden name=userSession value=125220.012555691zttVAAtpDQfiDDDDDiztzpAczDHf>
<table border=0><tr><td>&nbsp;</td>

找到userSession所在位置,在设定左右边界时,最好先在源代码中查找一下看设定哪个边界查找结果为1,如设定左边界为“Value=”,又边界为“>“,取到的usersession不一定是我们想要的值。

Action()
{
web_reg_save_param("usersession","LB=userSession value=","RB=>",LAST); web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
web_reg_find("Text=Welcome, <b>llll</b>","SaveCount=count",LAST); web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t4.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={usersession}", ENDITEM,
"Name=username", "Value=llll", ENDITEM,
"Name=password", "Value=1234", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
"Name=login.x", "Value=43", ENDITEM,
"Name=login.y", "Value=10", ENDITEM,
LAST);
if(atoi(lr_eval_string("{count}"))>)
lr_output_message("%s login pass",lr_eval_string("{username}"));
else
lr_output_message("%s login fail",lr_eval_string("{username}"));
lr_think_time(); web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t5.inf",
"Mode=HTML",
LAST); return ;
}

第三,查找结果多个的使用方法:

在LR自带的飞机登陆网站,源代码如下,我们用Web_reg_save_param关联函数来关联href内容,期待结果应该是源代码中标记蓝色底的部分。

<HTML>
<HEAD>
<title>Web Tours</title>
</head>
<style>
blockquote {font-family: tahoma; font-size : 10pt}
H1 {font-family: tahoma; font-size : 22pt; color: #003366}
small {font-family: tahoma; font-size : 8pt}
H3{font-family: tahoma; font-size : 10pt; color: black}
A {FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Tahoma; TEXT-DECORATION: none}
A:hover{ FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #993333; FONT-FAMILY: Tahoma;TEXT-DECORATION: underline}
TD {font-family: tahoma; font-size : 10pt; color: black}
</style>
<body bgcolor=#e0e7f1>
<BR>
<BR>
<BR>
<br >
<table border=0>
<tr><td></td></tr>
<TR><TD></TD></TR>
<TR><TD>
<blockquote>
<H1><b>Web Tours</b></H1>
Welcome to the Web Tours site.
<br>
To make reservations,please enter your account information to the left.
<br>
If you haven't registered yet, <A href="login.pl?username=&amp;password=&amp;getInfo=true" ><B>sign up now</B></A> to get access to all our resources.
<br>
To configure the server options, use <A href="admin.pl" target=body ><b>administration</b></A> link.
<br><br><br><br><br><br>
<br><small>
This product uses parts of the SMT Kernel, Copyright (c) 1991-99 <A href="http://www.imatix.com" target=new><B><small>iMatix Corporation</small></B></A>
</small>
</blockquote></TD>
<TD></TD></TR>
</table>
</body>
</html>

设置左边界LB为href=",右边界RB为",要保存所有的href到参数所以ORD设置成all,下边是代码内容:

Action()
{
int i=,count=;
char hrefname[];
web_reg_save_param("hrefs","LB=href=\"","RB=\"","ORD=all",LAST);//把所有找到的href值保存到hrefs数组中 //打开hp lr自带的飞机订票系统
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST); count=atoi(lr_eval_string("{hrefs_count}"));//总共找到的href项目,把总数保存到count
lr_output_message("Number of items found = %d",count);
for (i=;i<=count;i++) {
sprintf(hrefname,"{hrefs_%d}",i);//将hrefs参数名称格式化到变量hrefname中
lr_output_message("%s=%s",hrefname,lr_eval_string(hrefname));//输出各href值
} return ;
}

输出结果符合我们在源代码中标记的绿底部分.

Action.c(): Number of items found =
Action.c(): {hrefs_1}=login.pl?username=&amp;password=&amp;getInfo=true
Action.c(): {hrefs_2}=admin.pl
Action.c(): {hrefs_3}=http://www.imatix.com

loadrunner 关联函数web_reg_save_param的更多相关文章

  1. loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

    脚本优化-关联函数web_reg_save_param()函数详解   by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...

  2. LoadRunner关联函数的脚本实例--如何操作关联参数

    LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...

  3. loadrunner中web_reg_save_param和web_reg_save_param_ex的区别

    在使用Loadrunner进行性能测试,编写接口请求脚本时,通过会用到关联函数,而web_reg_save_param和web_reg_save_param_ex的函数有什么区别呢?以下为总结的两点, ...

  4. Loadrunner中web_reg_save_param的使用详解

    [摘要]利用实际案例说明如何使用Mercury LoadRunner提取包含在HTML页内的动态信息并创建参数. [关键词]性能测试,压力测试,Mercury LoadRunner 应用范围 在使用L ...

  5. 关联函数-web_reg_save_param

    int web_reg_save_param(const char *ParamName,<List of Attributes>,LAST) 返回值:成功时返回LR_PASS,失败时返回 ...

  6. loadrunner提高篇-插入检查点与关联函数

    插入检查点   靠LR自动生成的脚本是不够的,很难达到业务要求,因此需要对录制完的脚本进行完善,使其能达到业务模拟的要求 ,这样尽可能地使虚拟用户模拟时更接近用户的实际使用. 在进行压力测试时,经常会 ...

  7. loadrunner 脚本和replaylog中的中文乱码问题(转载)

    解决这个问题必须认识到一个事实就是,loadrunner和测试服务器交换数据使用的是utf8格式,但是展现在replaylog中是使用gb2312格式,而且在脚本中如何使用web_reg_find的时 ...

  8. LoadRunner脚本参数化之自动关联和手动关联

    一.关联的意义  1.关联的含义 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的 ...

  9. Loadrunner手动关联详解

    Loadrunner手动关联详解 一.关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到 ...

随机推荐

  1. 多线程shell脚本检测主机存活

    局域网中分了很多网段,而IP地址使用情况也未知,前期也没有规划和记录,当新的主机需要使用固定IP的时候,能否第一时间知道哪个IP空闲就显得很重要了,如果一个一个去ping的话太浪费时间. 这里分享一个 ...

  2. failed: dlopen failed: cannot locate symbol

    修改proj.android/jni/Application.mk 添加:APP_PLATFORM := android-19

  3. 【java】异常

    异常体系:Throwable ---Error 通常出现重大问题:如类不存在或者内存溢出.停止运行,不对代码进行处理 ---Exception 在运行时出现的情况,可以进行针对性处理.可以通过try ...

  4. JDK安装教程

    打开我的电脑,在D盘中新建一个文件夹,名字为develop 进入develop,创建一个新文件夹,名字叫做jdk 双击JDK的安装包, .4.出如图所示的框,选择下一步 .5.更改安装路径,选择更改 ...

  5. JavaScript 对象属性底层原理

    对象属性类型 1. 数据属性 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,特性默认值为true [[Enum ...

  6. SX_WIN10X64LTSB2016_EN_LITE英文精简版

    SX_WIN10X64LTSB2016_EN_LITE英文精简版该版本为英文版!该版本为英文版!该版本为英文版!因为论坛巴基斯坦的maanu兄弟PM我,所以抽空做了一个.介绍沿用原来的,中文用谷歌翻译 ...

  7. 前端-JavaScript1-8——JavaScript之作业练习

    1.表示气温有两种方法:摄氏度和华氏度.两者的关系是: 编写程序,让用户输入摄氏度,弹出对应的华氏温度. //第一步,让用户输入数字 var sheshidu = parseFloat(prompt( ...

  8. MySQL Group Replication-MGR集群

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  9. OpenCV模板匹配函数matchTemplate详解

    参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matchin ...

  10. Could not initialize class utils.JdbcUtils

    今天用JdbcUtils时出现了一个问题,被困扰了一晚上.从网上找的原因,说什么url错了,版本不一致等等都不能解决我的问题, 我写好了一个JdbcUtils准备测试,发现从后台用Dao测试完全没问题 ...