关联(correlation):脚本回放过程当中,客户端发出请求,经过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,获得相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态得到服务器响应内容的方法被称做关联。也是把脚本中某些写死的数据,转变成动态的数据。
什么内容须要关联:当脚本中的数据每次回放都发生变化时,而且这个动态数据在后面的请求中须要发送给服务器,那么这个内容须要经过关联来询问服务器,得到该数据的变化结果。例如:
1.登陆字符串。带有会话 ID 或时间戳等动态数据的登陆字符串。
2.日期/时间戳。使用日期或时间戳或者其余用户凭据的任意字符串。
3.常见前缀。后跟字符串的常见前缀,如 SessionID 或 CustomerID数组
语法:函数
int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);日志
参数说明:blog
· ParamName: 存放获得的动态内容的参数名称字符串
· list of Attributes: 其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写get
o Notfound: 当在返回信息中找不到要找的内容时应该怎么处理it
o Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。io
o Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执行下去不会中断。
o LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,而且区分大小写。
o RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,而且区分大小写。
o RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质能够是All或是数字,该属性无关紧要。
o Search : 返回信息的查找范围。能够是Headers,Body,Noresource,All(缺省)。该属性质无关紧要。
o ORD : 说明第几回出现的左边界子串的匹配项才是须要的内容。该属性无关紧要,缺省值是1。如为All,则将全部找到的内容储存起来。
o SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。
o SaveLen :当找到匹配项后,偏移量以后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。
3、实例解析
例1:
如图所示,不输入查询条件,直接点击【查询】按钮。生成的数据提交脚本以下:
该value值为请求的数据总数,该值是动态变化的。为了正确的发送请求并获得正确的结果,须要对该值进行关联。
在Generation Log中搜索“totalItem”,如图所示,从而能够肯定该value值的左右边界。
在脚本的请求前插入web_reg_save_param方法,并在提交数据请求的时候使用{count}来替代录制时实际的值。以下图:
打开扩展日志,运行脚本,能够看到正确的关联出告终果。
例2:
上面实例是使用web_reg_save_param的ORD=1,只是取第1次出现的左边界子串的匹配项为须要的内容,下面例子使用web_reg_save_param的ORD=ALL,将匹配到的内容保存到数组中。
根据消息列表中的记录数来进行关联(只是为了演示,分页不考虑),跟踪Generation Log能够看到,一条记录的内容会包含5列内容。以下图:
从上图中能够肯定其左右边界,在脚本的请求前插入web_reg_save_param方法,并在提交数据请求的时候使用arrSize/5来替代录制时实际的值。以下图:
其中lr_paramarr_len方法用于取出数字长度,lr_paramarr_idx方法用于取数组指定下标的值。打开扩展日志,运行脚本,能够看到正确的关联出告终果。