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=;的字符,如果找到了,就替换成变量.