目录

前言

一、关联的含义

二、什么时候需要做关联

三、如何做关联

3.1 自动关联

3.2 手动关联


前言

带着问题看本文

  • 为什么录制的脚本回放会出错?出错时排查思路

  • 关联是什么为什么要做关联?

  • 怎么做关联?

  • session是什么?cookie是什么? session跟cookie的区别

一、关联的含义

在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。

换句话说,关联就是把脚本中某些静态值,用服务端返回的、动态的、每次都不同的数据来代替。

关联属于一种特殊的参数化。

为什么要做关联呢?这就需要理解服务端处理客户端请求时用到的一种技术:session和cookie。

每当有请求发送到服务端时,服务器首先检查这个请求里是否已包含了一个sessionID(可以看做是一个具有唯一标识的辨识码),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用,如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的sessionID,这个session id将被在本次响应中返回给客户端保存。这就是回放录制的脚本会失败的原因。

下面的图可以更形象的解释:

当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个sessionID=123的数据,当浏览器再送出网页B的请求时,这时就要用到sessionID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。

在回放脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的sessionID=123的数据,而不是用服务器新给的sessionID=456,所以执行到对session校验的地方时就会失败。

如果这个解释还不够清晰,我们以LR自带的订票系统来解释。

此时客户端发出获得登录页面的请求,服务器端得到该请求后,动态生成一个Session Id,并将其连同登录网页的信息一同返回给客户端。如图所示。

当用户输入用户名密码,请求登录时,该Session Id同时被发送到服务器端;

如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败。

在第一次录制过程中LR把这个值记录了下来,写到了脚本里,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了Session Id,此时客户端浏览器再次输入用户名和密码请求登录时,还是用旧的Session Id,发出的请求就是错误的,为了获得这个动态的session Id我们就需要用到关联。

若需要对session和cookie加深理解,可以参考本文《session与cookie的区别详解》。

二、什么时候需要做关联

换句话说,如何找出要关联数据呢?

原则上,当客户端的某个请求是随着服务端的响应而动态变化的时候,我们就需要用到关联。(即脚本每次执行时都需要获得唯一标识的地方就需要关联。简单地说,每一次执行时都会变动的值,就有可能需要做关联。)

在录制脚本前,我们可以对测试的项目进行适当的了解,弄清楚哪些请求需要用到服务器响应的动态值,如果我们不明确哪些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分。

三、如何做关联

关联相关的函数:

web_reg_save_param;

web_create_html_param;

web_create_parmam_ex;

其中,web_create_html_param和web_create_parmam_ex这两个函数保留下来主要是为了兼容以前旧版本。目前主要使用web_reg_save_param。

关联有两种机制:自动关联和手动关联。

3.1 自动关联


VuGen内建自动关联引擎(Auto-correlation Eengine),提供Rules Correlation 和Correlation Studio 两种机制,可以自动找出需要关联的值,并自动建立关联。

Rules Correlation

在录制过程中VuGen会根据使用者事先制定的规则,实时自动找出要关联的值。规则的来源有内建(Built-in Correlation)和使用者自定义(User-defined  Rules Correlation)关联规则两种。

内建(Built-in Correlation):VuGen已经针对常用的一些应用系统(如AribaBuyer、BlueMartini等),内建了一些关联规则。可以在【Recording Options】>【HTTP Properties】>【Correlation】中启用关联规则,启动关联后,当录制这些应用系统脚本时,VuGen会在脚本中自动建立关联。

除了内建的关联则之外,使用者也可以自定关联规则。可以在【Recording Options】>【HTTP Properties】>【Correlation】建立新的关联规则。

Correlation Studio

有别于“Rules Correlation”,“Correlation Studio”是在执行脚本后才会建立关联,也就是说当录制脚本后,脚本至少需被执行过一次时“Correlation Studio”才会起作用。“correlation studio”会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。

当录制的应用系统不属于VuGen预设支持的应用系统时,“Rules correlation”可能无法发挥作用,这时可以利用“Correlation Studio”来进行关联。

使用“Correlation Studio” 的步骤如下:

  1. 录制脚本并执行。

  2. 执行完毕后,VuGen会跳出“Scan Action for Correlation”窗口,询问用户是否要扫描脚本并建立关联,单击“yes”按钮,扫描脚本。

  3. 扫描完后,可以在脚本下方的“Correlation Results”中看到扫描的结果。

  4. 检查一下扫描的结果,选择要做关联的数据,然后单击“Correlation”按钮,逐次关联,或是单击“Correlate All” 让VuGen 一次就对所有的数据建立关联。由于Correlation  studio会找出所有有变得的数据,但是并不是所有的数据都需要做关联,所以不是建议用户直接“Correlate All”。

  5. 重复步骤(1)~(4),直到所有需要做关联的数据都找出来为止。

注意:

  • 有时关联的地方有多处,前面的管理如果没有执行通过,执行将停止验证脚本的正确性,后面需要做关联的部分无法被扫描出来。

  • 很多时候自动关联的手段不好用,所以很有必要掌握手动关联的技巧。

3.2 手动关联


手动关联的步骤如下(1、2步可选):

第一步:录制测试脚本,录制两遍;

第二步:使用文本比较(如Bcompare)工具找出两次脚本的不同,判断是否需要进行关联;

第三步:使用web_reg_save_param函数手动建立关联;

第四步:验证关联函数是否正确。

具体执行如下:

第一步:录制测试脚本,录制两遍;

先录制一份脚本存档,取名为loginA,再依照相同的操作步骤与数据录制第二份脚本并保存,取名为loginB并关闭loginB;(两次录制的操作步骤及使用的数据最好保持一致)

第二步:使用文本比较(如Bcompare)工具找出两次脚本的不同,判断是否需要进行关联;

用LR自带的工具WinDiff举例。在脚本loginA中,单击VuGen的菜单tool→compare with vuser...,并选择loginB,如下图所示:

接着WinDiff会开启,同时显示两份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。

假如没有看到红色字体,请单击“Options>View>Show inline Differences”,如下图所示:

逐一检查两份脚本中差异的部分,每一处差异都有可能是需要做关联的地方。

第三步:使用web_reg_save_param函数手动建立关联

  在插入关联函数前,我们先介绍关联函数web_reg_save_param

语法:int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

用法举例:

web_reg_save_param ("sessionid","LB=Session_id:","RB=;","Search=Body",LAST);

  参数说明:

  ParamName: 存放得到的动态内容的参数名称;

  list of Attributes: 其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写;

  • Notfound:指定当找不到要找的动态数据时该怎么处理。

  • 当指定Notfound=error时,表示着找不到动态数据时,就发出一个错误消息。此为该属性的默认值。

  • 当指定Notfound=warning时,表示当找不到动态数据时,不发出错误消息,只发出警告,脚本也会继续执行下去不会中断。在对脚本出错时,可以如此设置。

  • LB:动态数据的左边界字符串。此属性是必须要有的,而且区分大小写。

  • RB:动态数据的右边界字符串。此属性是必须要有的,而且区分大小写。

  • RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性可以是All或是数字,而且可有可无。

  • Search:搜寻的范围,其值可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值),此属性可有可无。

  • ORD:指明从第几次出现的左边界开始才是要撷取的数据,默认值是1。假如该属性值为All,则所有找到符合的数据会存储在数组中。此属性可有可无。

  • SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0。

  • Convert:转换数据格式。当指定该属性值为HTML_TO_URL时,意味着将HTML-encoded数据转成URL-encoded数据格式。如果是HTML_TO_TEXT,表示将HTML-encoded数据转成纯文字数据格式。

  • SaveLen:当找到匹配项后,偏移量之后的几个字元存储到参数中。此参数可有可无,默认值是-1,表示一直到结尾的整个字符串都存入参数中。

怎么插入关联函数呢?

在Function Reference 中搜索web_reg_save_param,找到C语言下的实例进行复制,然后粘贴到脚本对应区域,然后对对应的值进行替换。

一般情况下关联函数写到发出请求的函数之前就可以了。如下图所示:

还有一种添加的方法,鼠标右键选择【insert】>【net step...】>在add step界面,step type中选择services>web_reg_save_param,单击【ok】键,弹出如下图所示:

单击【OK】键,显示如下信息:

web_reg_save_param("11",

"LB=2",

"RB=2",

"Search=Body",

LAST);

最后,对脚本中需要参数化进行替代。

对于确定参数的左右边界,可以在Replay Log中通过ctrl+F查找,如下图所示:

对于引号需要使用【\】作转义,例如上面的左边界可以写成name\"lt\"  value=\"   ,右边界可以写成\"  。

转义字符总结

在做手动关联时,取边界值的时候,会经常用到转义字符,现将转义字符整理如下:

\b 退格

\f 换页

\n 换行

\r 回车

\t 水平制表

\v 垂直制表

\\ 反斜杠

\? 问号字符

\' 单引号字符

\" 双引号字符

\0 空字符

第四步:验证关联函数是否正确。

首先设置一下输出日志,在VuGen的工具栏运行时设置【Run-time Settings】>log>勾选Enable logging>Always send messages>Extended log>勾选Parameter substitution。如下图所示:

回放脚本时,会在Replay Log日志中可以显示关联参数的相应值,此值是动态变化的,每一次执行后,显示的值都不一样。如下图所示:

 

感谢每一个认真阅读我文章的人!!!

如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。需要的评论区找我谢谢。

资料领取点击https://mp.weixin.qq.com/s?__biz=MzU1ODc2NzAxMw==&mid=2247483738&idx=1&sn=32e1bfb005ad0fdf609e86186fb5eaf8&chksm=fc20cf90cb5746865ecc97a3a3c4ef4a4eec8e26c16358f743194e548469c90af1a2dc6c0078#rd

LR关联知识点详解(精品总结)一定要看相关推荐

  1. Zookeeper知识点详解

    Zookeeper知识点详解 目录 ZooKeeper 集群原理 ZooKeeper 分布式锁 ZooKeeper 分布式事务 ZooKeeper 选举原理 Paxos 协议 ZAB 协议 ZooKe ...

  2. python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

  3. mysql text类型 使用方法_MySQL使用TEXT/BLOB类型的知识点详解

    一.TEXT和BLOB的区别 TEXT和BLOB家族之间仅有的不同是BLOB类型存储的是二进制数据,没有排序规则或字符集,而TEXT类型有字符集或排序规则.说白了如果要储存中文则选择TEXT. 二.默 ...

  4. python源程序文件的扩展名_python程序文件扩展名知识点详解

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言 ...

  5. java中流_Java中流的有关知识点详解

    Java中流的有关知识点详解 发布时间:2020-09-17 03:50:59 来源:脚本之家 阅读:103 作者:mumu1998 什么是流? 流:程序和设备之间连接起来的一根用于数据传输的管道,流 ...

  6. design短语的用法总结_最新高中英语知识点详解之design的用法及常见短语

    英语的应用越来越广泛了,我们必须好好来学习英语知识.对此小学频道编辑为大家整理了最新高中英语知识点详解之design的用法及常见短语.详情如下: design的用法 n.设计;图案;构思 vt.设计; ...

  7. 学习电气自动化PLC编程最基础的十大知识点详解

    这篇文章其实是学习PLC自动化过程中必须要理解的基础问题,不管是西门子PLC还是三菱PLC,抑或欧姆龙PLC,以及国产品牌的PLC,这些问题都必须理解透,才能更好的开始自动化编程.不然指令学完了梯形图 ...

  8. Pandas知识点-详解行列级批处理函数apply

    Pandas知识点-详解行列级批处理函数apply 在Pandas中,DataFrame和Series等对象需要执行批量处理操作时,可以借用apply()函数来实现. apply()的核心功能是实现& ...

  9. python 消息队列 flask_python分布式爬虫中消息队列知识点详解

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

最新文章

  1. XFCE字体发虚的解决方法
  2. char 转为 int 类型
  3. python可迭代对象,迭代器,生成器
  4. css 特殊性 权重排列
  5. 互联网行业的体面隐退 | 畅言
  6. mysql数据库备份注意,Tips: MySQL数据库使用mysqldump备份恢复时的注意事项
  7. Putty连接TPYBorad v102 开发板教程
  8. [给创业公司的原生云] ②Spine L1
  9. Java网络编程之通过代码实现Socket通信
  10. Arduino驱动IIC/I2C LCD1602模块显示
  11. 《最受欢迎的男友职业排行榜Top10》
  12. html前端毕业设计项目,web前端毕业设计论文..doc
  13. 扫描转换html,HTML5/CSS3 3D雷达扫描动画
  14. 计算机科学与技术_基于Java web的计算机图书借阅管理系统的设计与实现.docx
  15. 电脑知识:台式电脑如何使用无线网上网?
  16. gradle启动项目编译报错:Executing task ‘clean‘...Task execution finished
  17. Java实现QQ邮件群发功能
  18. 大厂算法面试之leetcode精讲4.贪心
  19. 开工干活累了,晚上不得找个陪玩打打游戏?我教你们用python找个人美声甜的
  20. 将电脑的无线网通过有线分享给其他设备

热门文章

  1. 微信的隐藏功能竟然可以一秒获取好友位置!这到底是神马操作
  2. 计算机0基础知识,计算机基础知识0课件.ppt
  3. 【计算机408--计算机学科专业基础】
  4. SQL Server的错误日志
  5. 关于云开发数据库的使用经验和建议
  6. HDU 4379 - The More The Better
  7. golang 浮点数操作
  8. win7怎么不能无线连接网络连接服务器,win7网络连接不上|windows7无线网络连接不上怎么办?...
  9. 机器视觉学习资料了解
  10. 编写java百分制转化五分制_百分制与五分制的换算(百分制转换五分制公式)