1、2019/6/29,1,LoadRunner学习-关联,国瑞数码 吴凤军,主要内容,一、关联原理 二、自动关联 三、手动关联 四、一边录制一边关联 五、关联函数Web_reg_save_param详解,2019/6/29,2,2019/6/29,3,一、关联原理,为什么要使用关联? 当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。 当执行脚本时,可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,企图骗过服务器,让服务器把网站内容传送给VuGen 纪录在
2、脚本中要跟服务器所说的话,完全与当初录制时所说的一样。这样的作法在遇到有些服务器时还是会失效的。这时就需要关联的做法骗过服务器,一、关联原理,什么是关联? 所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。 例如:我们去做飞机,登机之前要检票(机票信息相对固定),通过可以登机。过了几天拿着同一机票再去登机,自然不能登机(机票信息已过期)。那怎样才能顺利登机?可以伪造机票信息这里我们通过收集别人返回的信息(机票)伪造机票,从而满足登机的验证策略。在脚本中也有类似的情况,2019/6/29,4,一、关联原
3、理,举例:登陆系统-录制 常见系统中的登陆功能,在登陆后服务器会返回SessionID,登陆后的操作都需要提交该ID确认身份。使用VuGen录制时,将会记录服务器返回的SessionID并原封不动的在下个请求中发给服务器,2019/6/29,5,一、关联原理,举例:登陆系统-回放 待到回放时,服务器会在接收到用户名和密码后返回一个新的SessionID,而脚本依然发送旧的SessionID给服务器,最终因SessionID错误,导致脚本回放失败。,2019/6/29,6,二、自动关联,自动关联原理: 自动关联是VuGen提供的自动扫描关联处理策略,它的原理是对同一个脚本运行和录制时的服务器的返
4、回进行比较,来自动查找变化部分,并且提示是否生成关联。,2019/6/29,7,二、自动关联,自动关联举例: 举例:用LoadRunner自带的Web Tours网站,录制一个登陆的过程然后再回放。编译时没有错,运行时会报错,通过Test Result看到错误信息,2019/6/29,8,二、自动关联,问题就出在脚本中 Web_submit_data()函数 web_submit_data(“login.pl“, 。ITEMDATA, “Name=userSession“, “Value=105473.508302957ftcfcQDpfiDDDDDDDcffVpHzVf“, ENDITEM,
5、 “Name=username“, “Value=wfj“, ENDITEM, “Name=password“, “Value=111111“, ENDITEM, “Name=JSFormSubmit“, “Value=off“, ENDITEM, “Name=login.x“, “Value=64“, ENDITEM, “Name=login.y“, “Value=10“, ENDITEM, LAST);,2019/6/29,9,二、自动关联,单击Vuser菜单中Scan Script for Correlations选项(使用自动关联前,脚本需运行一次)运行后会看到以下内容,VuGen已识
6、别出脚本中动态内容,2019/6/29,10,二、自动关联,单击Correlate按钮后,便生成了一个关联。关联前后的内容以及所属的Action也被列了出来。,2019/6/29,11,二、自动关联,此时切换到Script模式看看脚本发生了什么变化 web_submit_data(“login.pl“, 。 ITEMDATA, “Name=userSession“, “Value=WCSParam_Diff1“, ENDITEM, “Name=username“, “Value=wfj“, ENDITEM, “Name=password“, “Value=111111“, ENDITEM, “
7、Name=JSFormSubmit“, “Value=off“, ENDITEM, “Name=login.x“, “Value=64“, ENDITEM, “Name=login.y“, “Value=10“, ENDITEM, LAST);,2019/6/29,12,三、手动关联,手动关联原理: 手动关联是关联应用中的最有效手段,通过手动关联函数 Web_reg_save_param()将想要的字符串保存到一个参数中。,2019/6/29,13,三、手动关联,手动关联的主要步骤: 第一步:录制测试脚本,录制二遍 第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联 第三步
8、:确定插入关联的位置 第四步:在View Script中使用web_reg_save_param函数手动建立关联 第五步:将脚本中有用到关联的数据,用参数代替 第六步:验证关联的正确性,2019/6/29,14,三、手动关联,手动关联详细介绍: 第一步:这一步就不用多说了,相同的操作,录制两份,分别保存 第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联1、在第二份脚本中,点选VuGen的【Tools】【 ComparewithVuser】,并选择第一份脚本2、接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。3、查看二份脚本中差异的部份,每一个差异都可能是需
9、要做关联的地方。选取差异的脚本,然后复制。,2019/6/29,15,三、手动关联,手动关联详细介绍:4、接着要在Recording Log或是Generation Log中找这个值。按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。5、现在已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联 第三步:确定插入关联的位置。 重新执行一遍脚本,而且这次会开启所有的Log。1、在VuGen中点选【Vuser】【Run-Time Settings】。 2、点选【General】【Log】。,2019/6/2
10、9,16,三、手动关联,手动关联详细介绍:3、勾选【Enable logging】、 【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。4、按下【OK】就可以执行脚本了。5、执行完脚本之后,在Replay Log 中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有vuser_init.c(18): ,这个18就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第18行。也可以在 Replay Log右键选择jump to source line跳到脚本中的位置。,2019/6/29,1
11、7,三、手动关联,手动关联详细介绍: 第四步:在View Script中使用web_reg_save_param函数手动建立关联1、在找到的代码行的上方点击鼠标右键,选择【insert】【New step】2、在【Add Step】 窗口的【Find Function】中输入Web_reg_save_param 函数并选中后点击【OK】3、Parameter Name处输入参数名称,建议有意义的名字。4、在【Left Boundary】中输入左边界字符串5、在【Right Boundary】中输入右边界字符串6、点击【OK】按钮,2019/6/29,18,三、手动关联,手动关联详细介绍: 第五
12、步:将脚本中有用到关联的数据,用参数代替1、当使用web_reg_save_param建立参数后,接下来就是用“之前定义的参数名”参数去取代脚本中写死的(hard-coded)资料。第六步:验证关联的正确性1、执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。,2019/6/29,19,四、一边录制一边关联,一边录制一边关联: 接着来看最后一种关联方式,上面的关联都需要进行一定的操作,那么为什么录制某些系统,会得到一些自动的关联函数呢?这就是系统默认提供的自动关联设置,打开录制选项。【Tools】【recording options】【Correlation】,2
13、019/6/29,20,四、一边录制一边关联,一边录制一边关联:,2019/6/29,21,四、一边录制一边关联,一边录制一边关联: 点击 New Application,创建一个新的应用 在之前的应用上点击New Rule 新建一个规则 为该规则填写左右边界后点击保存 现在新建一个脚本,重新录制一次Web Tours登录的操作,录制结束查看一下脚本,可以发现系统已经自动按照规则生成了关联函数,运行脚本直接通过。,2019/6/29,22,五、Web_reg_save_param详解,关联函数Web_reg_save_param详解 打开Add Step添加步骤选择Web_reg_save_p
14、ara 打开关联设置窗口,如下所示:,2019/6/29,23,五、Web_reg_save_param详解,关联函数Web_reg_save_param详解 Parameter Name :此处设置存放参数的名称,关联出来的内容将会存放在该参数中,这里受到Instance选项的影响。 例如: Parameter Name 为Temp,当对应的Instance选项是 任意一个数字的时候,只会关联一个匹配的记录,关联值存放在Temp中。当Instance是ALL的时候,关联成功后的值将会依次存放在“Temp_数字”这样的参数数组中,并且会添加一个temp_ count的参数存放关联出来的记录条数
15、。 Left Boundary:此处设置左边界,这里用来填写关联对于数据处理的左匹配内容规则。此处是一个字符串。 注意:转义字符为,2019/6/29,24,五、Web_reg_save_param详解,关联函数Web_reg_save_param详解 Match case :默认情况下边界是Match case的,即检查大小写的。可以取消下面的选项来忽略大小写检查。 Binary data:如果需要关联的内容是非ASC 字符的,需要使用该选项。 Use # for any digit:有些时候需要关联的边界中有些变动的数字,并且由于这个数字导致关联非常难以设置边界,可以使用该选项 Use a
16、s a wildcard for xxx alphanumerical characters :这里使用可以代替任何常用的字符。仅代表一个字符。,2019/6/29,25,五、Web_reg_save_param详解,关联函数Web_reg_save_param详解 Right Boundary:此处设置右边界。选项同左边界。 Instance:在这里可以填写一个任意整数,也可以填ALL。如果填写数字那么说明返回的记录中取出对应顺序的值。而填写ALL的话将会返回所有的内容。 Relative Frame ID:这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个
17、时候就需要说明所关联的页面是框架中的哪一个了。 Not Found:默认值为error,默认情况下如果没有关联到任何内容则提示错误。而选择WARNING,则只会简单提示没有抓到内容,不会产生错误。,2019/6/29,26,五、Web_reg_save_param详解,关联函数Web_reg_save_param详解 Search in:该选项设置关联查询的范围,这里VuGen提供了4个选项:Header、Body、Noresource、All。1、Noresource是从服务器返回的内容类别来考虑的, Noresource就是指只从资源文件中关联内容,也就是只从HTML文件格式中抓内容。2、Header/Body/All 这3个选项都是从请求返回的所有内容进行关联处理,包括图片、JavaScript脚本等。 Save Length:关联出来的内容所需要保存的长度 Save Offset:设置关联的内容偏移量,从第几位开始进行关联操作。,2019/6/29,27,LoadRunner学习-关联,谢 谢!,2019/6/29,28,