LR中的关联
自动关联
说明:
只能针对使用HTTP协议、部分Client/Server协议的脚本,针对Socket协议的脚本不能使用自动关联方式。
自动关联的原理:
LR内置了部分常用应用程序和框架产生的特征字符串,通过在脚本中搜索特征字符串进行替换处理关联。
自动关联的操作步骤:
¨ 在“Recording Options”中选中“Enable Correlation During Recording”
¨ 录制脚本,运行脚本后,通过菜单“VUser”-“Scan Action for Correlation”
手动关联
手动关联的操作步骤:
¨ 对同一个测试用例录制两次脚本
¨ 在这两个脚本中找到不一样的地方
¨ 对这些不一样的地方建立关联
建立关联的方法:
步骤:
¨ 添加关联函数
¨ 给需要关联的地方进行参数化
关联的应用场合:
SessionID的关联最能说明这一点,为了保持会话的连续性,应用程序中使用SessionID。在ViewState中;附加在URL后的SessionID;用Cookie保留的SessionID。当再次运行脚本时,SessionID的值已经改变了。所以需要关联。
(我个人认为,其实,你可以给任何一个能参数化的地方进行关联,只是这些地方作关联没有必要而已。为了证明我的观点,下面这个例子就是给续费金额作关联)
实例说明:
下面的例子是我录制的某软件的续费功能,对每次的续费金额进行关联,脚本如下:
//添加关联的函数 ,这个函数放在web_submit_form函数的前面
web_reg_save_param("moneyValue", "LB=1", "RB=", LAST); //续费金额的首位必须是‘1…’
//使用关联
web_submit_form("CompanyAccountAddCash.aspx",
"Snapshot=t7.inf",
ITEMDATA,
//需要关联的字符串用参数表示,方法与参数化一样
"Name=_ctl0:placeContent:CompanyAccountAddCash1:tbCash", "Value={moneyValue}", ENDITEM, // moneyValue是参数化了的‘续费金额’
"Name=_ctl0:placeContent:CompanyAccountAddCash1:btnAdd", "Value=提交", ENDITEM,
EXTRARES,
"URL=../Images/bodybg.gif", "Referer=http://admin.bnet.com/Companys/CompanyAccountAddCash.aspx?companyId=32&accountId=24", ENDITEM,
"URL=../Images/buttonb.gif", "Referer=http://admin.bnet.com/Companys/CompanyAccountAddCash.aspx?companyId=32&accountId=24", ENDITEM,
"URL=../Styles/menu.htc", ENDITEM,
"URL=../images/vnetcenter_02.gif", "Referer=http://admin.bnet.com/Companys/CompanyAccountAddCash.aspx?companyId=32&accountId=24", ENDITEM,
"URL=../Images/vnetcenter_11.gif", "Referer=http://admin.bnet.com/Companys/CompanyAccountAddCash.aspx?companyId=32&accountId=24", ENDITEM,
LAST);
return 0;
}
关联函数
int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);
第一部分:参数名字,用双引号括起,逗号分开;
第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、SaveLen等,
第三部分:LAST,结束标志。
左边界:LB是左边界,要查找的字符串左面的边界值,即位于查找字符串的最左边的字符串;
RB是右边界:要查找的字符串右面的边界值,即位于查找字符串的最右边的字符串,
常见情况:
比如说吧,程序中有这么一个赋值,ProcessID =A53625E18440FCE81F26DCE712E65EBA;如果ProcessID的值是动态的,我想使用动态变量,那我设定查找左边界为LB=ProcessID=,右边界为RB=;的字符,如果找到了,就替换成变量.
















