当前位置: 代码迷 >> 综合 >> 【LoadRunner】关联的作用以及如何进行关联
  详细解决方案

【LoadRunner】关联的作用以及如何进行关联

热度:75   发布时间:2023-10-12 07:24:56.0

文章目录

      • 为什么要进行关联?
      • 什么时候应该做关联?
      • 怎么去做关联呢?
        • 1.手工关联
          • 1.1 使用LR自带的WinDiff工具协助找出需要关联的数据:
          • 1.2 确认插入关联的位置
          • 1.3 web_reg_save_param 函数的书写方式
          • 1.4 将web_reg_save_param 函数插入
          • 1.5 将脚本中有用到关联的数据,用参数代替
          • 1.6 验证是否关联成功啦?
        • 2.自动关联
          • 2.1 回放脚本
          • 2.2 找到关联值
            • 2.3 进行关联

为什么要进行关联?

在录制生成的脚本中,录制到了一些服务器分配的数据,但是再回访的过程中,服务器又重新分配了新的数据,导致这些录制时生成的数据已经无法使用,需要使用服务器分配的最新数据。
关联可以在脚本中捕获到服务器分配的数据,存储到参数中,需要使用时从参数中取出,从而保证使用的是服务器最新分配的数据。
其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同。一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值。

什么时候应该做关联?

这里我用一个登录来举一个例子:
【LoadRunner】关联的作用以及如何进行关联
客户端向服务器发送一个登录的请求,然后服务器接受了并且给这个请求分配一个唯一的Session ID。
当用户输入用户名密码,请求登录时,该Session ID同时被发送到服务器端,但是这个ID只在当前会话中有效,当我刷新界面或者是换个账号登录,这个ID就失效啦,服务器就会给我发个新的Session ID。
但是我们录制脚本的时候录制的是第一个Session ID,那么我回放脚本的时候使用的录制时ID就不能用了,就会登录失败。。。
为了解决这个很重要的问题,我们就要使用关联功能!

怎么去做关联呢?

1.手工关联

使用手工关联我们需要找出有哪些数据是动态变化的,有时候一个脚本看不出来,我们可以录制两边找出其不同处,看这些数据是否需要关联。

1.1 使用LR自带的WinDiff工具协助找出需要关联的数据:
  1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份录制的脚本。
  2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。

找到不同的部分后,复制,然后打开Recording Log或是Generation Log,按Ctrl+F,在查找窗口中粘贴差异部分的内容,点击查找找到后,查看该部分的信息,确认是客户端的请求信息还是服务器回应的信息
如果出现在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$这个部分,那证明是客户端发出的请求,这里是不需要做关联的。
一般做的关联都是出现在****** Response Header For Transaction With Id 7 ************ Response Body For Transaction With Id 7 ******中的部分。
在找到这个信息后,需要记录如下信息:
a、记录这个不同数据之前的内容和之后的内容
b、记录这个不同数据出现的位置,是Header还是Body

1.2 确认插入关联的位置

我们在日志中找到了两次脚本的不同点的位置,根据这个位置,我们再确定是在哪个请求之后产生的,也就是说要定位发生不同点的response是由哪个request产生的,找到了这个请求的函数位置,我们就知道要往哪里做关联了。
一般情况下关联函数写到发出请求的函数之前就可以了。

1.3 web_reg_save_param 函数的书写方式

语法:

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

详情请参考LR帮助文档。在这个函数中,*ParamName是用来存放得到的动态内容的参数名称。
<list of Attributes>:其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写。这其中比较常见的是:

  • LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。
  • RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。
  • Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。
  • SaveOffSet:偏移量,指从左侧偏移几个位置后开始存储该数据。
  • SaveLen:存储长度,指从左侧开始,存储长度为多少的数据。
  • ORD:假如通过LB,RB取到了多个数据,通过此参数可以定位到底是要哪一个数据,默认为第一个。

这里举个LR自带的飞机订票网站中SessionID web_reg_save_param 函数的例子:
首先我们右键检查看订票网站的源代码,找到SessionID数据所在位置:
【LoadRunner】关联的作用以及如何进行关联
【LoadRunner】关联的作用以及如何进行关联
知道了SessionID的上下文环境之后就能够在web_reg_save_param函数中加入其他属性啦,函数如下:

web_reg_save_param("paramSessionID","LB=userSession value=","RB=>",LAST);

这句话的意思就是:我要把代码“userSession value=”“>”之间的代码,就是“124335.386634265zDQffAVptfDiDHDpAAiH”这一段保存在变量“paramSessionID”中,以后每一次调用次变量就相当于调用这之间的动态SessionID了。

也可以使用使用web_reg_save_param进行关联:
Insert .> New Step…,找到web_reg_save_param函数
【LoadRunner】关联的作用以及如何进行关联
填写参数名左右边界等信息
【LoadRunner】关联的作用以及如何进行关联
点击“OK”生成函数,如下图:
【LoadRunner】关联的作用以及如何进行关联

1.4 将web_reg_save_param 函数插入

该函数的作用是是捕获服务器所返回的一个数据并且存储到变量中,但是web_reg韩束比较特殊,必须要在请求前就定义该函数,然后才能使用。所以在之前的飞机订票例子中,我们就应该将该函数放在最前面。因为进入网站后我们就已经开始请求一个Session ID了,所以该函数要在请求前即进入网站时就定义。
【LoadRunner】关联的作用以及如何进行关联

1.5 将脚本中有用到关联的数据,用参数代替

我们定义了这个函数,和变量,但是还没有使用的,所以我们要在脚本中有用到此关联的数据的地方用参数代替。
【LoadRunner】关联的作用以及如何进行关联

1.6 验证是否关联成功啦?

我们回放一下脚本,在下面的Replay Log中查看是否有这样的语句:
【LoadRunner】关联的作用以及如何进行关联
这就说明已经关联成功了!

2.自动关联

2.1 回放脚本

回放脚本:回放之前要打开Tools->recording Options 窗口,点击correlation标签页,确保Enable correlation during recording 选项处于勾选状态,如下图
【LoadRunner】关联的作用以及如何进行关联
回放日志如下,出现了异常:Requested image not found
【LoadRunner】关联的作用以及如何进行关联

2.2 找到关联值

这时候我们可以通过扫描脚本查找关联值,如下图点击“Scan script for Correlations”,也可以用快捷键ctrl+F8
【LoadRunner】关联的作用以及如何进行关联
这里标黄的部分就是sessionid了,然后我们对这个sessionId做关联。

2.3 进行关联

选中这一大串sessionID,然后右键点击“Create Correlation”
【LoadRunner】关联的作用以及如何进行关联【LoadRunner】关联的作用以及如何进行关联
然后回到脚本中可以看到已经生成了一块函数web_reg_save_param_ex,被保存的参数名为“CorrelationParameter_1”
【LoadRunner】关联的作用以及如何进行关联
最后,打开登录函数块,我们就可以看到sessionid就已经参数化了,如下图。
【LoadRunner】关联的作用以及如何进行关联

如果本篇博客对你来说有用的话,请点个赞吧ヾ(?°?°?)??
【LoadRunner】关联的作用以及如何进行关联

最后总结一下:
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:593462778,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:暗潮汹涌
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

  相关解决方案