为什么需要关联呢,书上说的是,当客户端向服务器发起请求时,服务器会验证。验证通过后返回一个Session ID,该Session ID对本次会话期间所有访问生效,后续客户端的请求只要带上这个Session ID就会被认为是合法的请求。但是一旦会话结束,客户端再次向服务器发起新的请求时,服务器将会重新判断是否为合法用户,如果是合法用户,则会分配一个新的Session ID给到当前客户端。而使用录制的脚本回放时,仍然使用的是之前的Session ID,意思就是说,使用旧的Session ID去访问新的页面,服务器必然会拒绝。解决这个问题采用的方式就是关联了。
关联的三个特征:
特征一:该数据一定是从服务器返回的值
特征二:改数据一定是在后面的请求中要被调用的
特征三:改数据必须是动态变化的
两种关联方式:
自动关联
在录制选项中选择Correlations->Configuration,脚本录制期间会自动扫描需要关联的字段,并在脚本停止录制以后弹出对话框确认关联参数。
手动关联
如图所示,在回放登录页面的时候会发现有报错信息,初步猜测是和Session有关系,下面我们就开始去试试通过关联能不能解决该问题。
步骤一:在脚本中找到以下代码段
找到该值以后只是推测,是不是还需要进一步去确认,在Output->Code generation窗体下找到该值,并确保他第一次出现地方是在Response请求中。
找到第一次出现的位置后,如果是在Response中出现(上图中标红查看),且同时也会在Request中出现,name基本上就可以肯定是我们需要去关联的对象。
【特别说明】:一般需要关联的字段并非是纯数字或者字母有意义的组合,而是不太能理解的随机数
步骤二
确定关联对象后,需要记住在Code generation中第一次出现位置的左右边界,然后调用web_reg_save_param函数实现关联中变量的替换。
在我们找到的Session值上,单击鼠标右键Insert->New Step,在Steps Toolbox中输入web_reg_save_param,双击后弹出Save Data to a Parameter
单击确定按钮后,会生成以下脚本
因在左右边界的数据中出现了""(双引号),必须使用转义字符 "\" 才能生效,所以对以上脚本进行微调,最终结果如下
步骤三
下面将原有的Session value改成参数形式,这样系统每一次运行都会重新捕获数据到参数中,变量值的替换也就实现了
再次运行脚本,在Snapshot->Replay(Page View)中查看,运行OK
注:在运行过程中出现了 Error -27257 错误,引起这个问题的原因是因为没有将关联函数放在响应前面。
【特别说明】:关联的脚本除了web_reg_save_param,还包括以下四个
web_reg_save_param_regexp:正则表达式关联
web_reg_save_param_ex:扩展关联
web_reg_save_param_jesion:JS关联
web_reg_save_param_xpath:路径关联
最常用的主要是web_reg_save_param和web_reg_save_param_regexp,正则的用法主要是针对取值边长是动态生成的,使用该函数关联如下
关联返回的内容在正则表达式中需要用()标记。
【补充说明】;如果脚本过于复杂,无法确定需要关联的地方。可以重新录制一次脚本,对比两次脚本不一样之处,这样操作也可以发现动态数据。操作如下:
在解决方案管理器上单击右键,在弹出菜单中选择点击 Compare to External File 选择要对比的文件
要对比的文件被保存在以下路径