LR(三):lr技巧之关联设置

LR(三):lr技巧之关联设置,第1张

这篇文章主要记录一下我自己的一些学习成果,也为其他跟我一样的小白提供一些帮助

关联的方式一共有3中,下面开始一一介绍:

一、关联方法之手动关联

步骤:1、使用相同的业务流程与数据,录制二份一模一样的脚本 

2、找出两份脚本中不同的地方(可使用lr自带的WinDiff进行对比:Tools-Compare with Script)

3、确定脚本中有差异的地方是否需要关联(思考时间不需要做关联)

4、确定关联函数的插入位置

重新执行一遍脚本,而且这次会开启所有的Log。 在VuGen中点选【Vuser】>【Run-Time Settings】>【General】>【Log】>勾选【Enable logging】、【Always sends messages】、【Extended log】以及【Extended log】下的所有选项,按下【OK】,然后就可以执行脚本了。

执行完脚本之后,在Replay log中可以查看到动态值所在行

为什么关联函数要插入到动态值所属的请求前?而不是动态值所在的那一行?

 因为web_reg_save_param函数为注册函数,必须在动态值的前面,相当于先声明,后作用。注意:并不是在动态值的前面就行了,一定得在该 动态值所属的请求前,如例子中应该在“web_url”前面,而不是第17行的“web_submit_data”之前,这里需要好好理解一下。

5、使用web_reg_save_param函数手动建立关联 

web_reg_save_param("outFlightVal" , "LB=outboundFlight value=","RB= checked >", "Search=body",LAST )

6、参数化要关联的动态值

7、回放脚本验证关联是否成功

关于易混淆的两个地方这里再废话几句:

1、第一次是在Generation log日志中查找动态值,看动态值在日志中的标头是“response...”还是“request...”,来确定该动态值是否需要关联,动态值在responsez中的才需要关联,如果在request中,表示是在client中产生的,不需要做关联

2、第二次是在Repaly log日志中查找动态值所在行(注意:查找时复制的查找内容并不是动态值,而是动态值所在行的其他脚本内容,因为Repaly log日志是回放脚本时产生的,脚本经过回放后,动态值已改变,再复制动态值查找极有可能查找不到),目的是看该行前面的Action(X),来确定关联 函数应该插入的位置,X代表行,X为几,对应的关联就应该插入到此行前面。切记:第一次查找是确定动态值是否需要关联,第二次查找日志是确定关联函数应插 入在什么位置

二、关联方法之自动关联

1、在录制脚本之前,打开recording Options 窗口,点击correlation标签页。确保Enable correlation during recording 选项处于勾选状态。

2、录制完脚本之后,回放脚本,报错,点击选择菜单栏 Vuser ---> Scan Script for Correlations (快捷键ctrl + F8 )d出下面窗口

扫描不一样的值,点击 correlation就关联上了

三、关联方法之一边录制一边关联,也就是预关联

预关联也可以叫做“ 一边录制一边关联”。为什么录制某此系统,会得到一些自动关联函数呢?这就是系统默认提供自动关联设置。如果我们预先知道需要关联的内容时。可以预先设置好要关联的内容,这样在脚本录制的过程中自动对要关联的内容进行关联。

在录制脚本时打开Recording Options 设置窗口

(本文以loadrunner自带WebTours 的关联为例)

1、点击一New Application 按钮,新建一个叫做WebTours 的应用

2、选择这个规则,点击New Rule 按钮一个规则。

3、然后做如下设置:

然后使用web_reg_save_param 关联函数

n 保存来自服务器端的session,并传递给提交语句以保证验证通过。 需要关联的数据的特征 n 1,数据是从服务器传过来的。 n 2,数据是可变的。 VuGen与服务器的交互关联的主要条件n 1,简化或者优化代码。n 2,动态数据。n 3,提供唯一的数据。如何鉴定什么样的错误需要关联n 会出现什么错误讯息,与系统实做的错误处理机制有关。n 错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。n 在LR的LOG中也有些错误的提示:比如:27979等的错误(错误的原因是多种的,关联只是引起错误的一种原因)。LR中需要用到的关联函数n web_create_html_param Saves dynamic information on an HTML page to a parameter. (Obsolete: use only for LR 6.5 and below) n web_create_html_param_ex Saves recurring dynamic information on an HTML page to a parameter. (Obsolete: use only for LR 6.5 and below)n web_reg_save_param Saves non-NULL terminated dynamic data from an HTML page to a parameter. n web_save_param_length Saves the length of a parameter n web_save_timestamp_param Saves the current timestamp. web_set_max_html_param_len Sets the maximum length of retrieved dynamic HTML information. VuGen的关联方法 n 自动关联 n 手动关联自动关联n record options--->correlation中启用enable correlation during recording recording.LR会用自已的关联规则来匹配需要关联的脚本手动关联n 步骤:1,录制。2,回放。3,回放出错后开启LOG。4,出错后查看LOG。(定位到某一行)5,再重新录制一下脚本,把两份脚本对比。 录制回放n 回放出错如下:Action.c(37): Error -27979: Requested form not found [MsgId: MERR-27979]Action.c(37): web_submit_form("com.mercurytours.servlet.IteneraryServlet") highest severity level was "ERROR", 0 body bytes, 0 header bytes [MsgId: MMSG-26388] 开启LOG查找需要关联的数据n run-time settings-->Log,设置Extened log.n 再次回放。n 定位需要关联的数据。(单协议在recording log,多协议在Generation Log中查到数据) 写关联函数n char GlParam1_Text1//定义变量 n web_reg_save_param("GlParam1_Text1",n "LB= name=\"",n "RB=\"",n "Ord=all",n "RelFrameId=1",n "Search=Body",n "IgnoreRedirections=Yes",n LAST)n 在下面的语句中来调用:GlParam1_Text1 关联函数的位置n It registers a request to find and save a text string within the server response. The operation is performed only after executing the next action function, such as web_url. (from help).n 定位到变量的那一行的上面。 Note:引用web_reg_save_param中的变量时,要用{}。要打印出来,用lr_evel_string取值。n ctrl+F8可以扫描脚本中需要关联的地方

我以前给别人回答过 现在我再给你说一下: Session是Web浏览器的会话机制 正常 *** 作后面隐藏的具体过程如下: 张三请求登录(向服务器发Request),Web登录服务器给他回馈一个SessionID_zhangsan, 同时在服务器中记录(注意注意,这就是案底,日后对账要以这个作为依据); 登录之后,张三肯定还要继续请求其他服务(比如请求页面啊等等……), 张三请求服务的时候,得先给服务器喊暗号,服务器根据暗号来区分不同的Client, 张三就喊SessionID_zhangsan,李四就喊SessionID_lisi,王二麻子就喊SessionID_wangermazi……明白吧, 只有client提交的暗号跟服务器自己记录的案底对上了,服务器才能提供相应的服务, 如果对不上,不但不提供服务,还要报错; 以上说的是正常的情况,但是如果这个过程里面掺上了LR,那就不一样了,事情会变成这样: 录制的时候,假如还是张三请求登录,Web登录服务器给他回馈一个SessionID_zhangsan2, LR会从对话中捕捉这个SessionID_zhangsan2,写死到LR脚本里面(注意注意,这里是第二个关键), 服务器自己也会记录案底,然后一切都好,该请求的请求,该服务的服务,此后无话; (如果你看过一些资料,你会知道LR的工作原理就是捕捉Client与Server之间的对话) 等到了回放的时候,可就不是张三了,而是张三狗了,这就是LR的运行所引入的不同, 那么张三狗请求登录,Web登录服务器给他回馈一个SessionID_zhangsangou,但是并不捕捉记录到脚本, (注意注意,这里是第三个关键), 因为这是回放,不是录制,所以不会更新脚本,刚才捕捉的SessionID_zhangsan2不被覆盖, 张三狗请求其他服务的时候,本来应该喊暗号SessionID_zhangsangou, 但是注意,现在是LR代替张三狗登录,并不是真的张三狗,LR只能喊出SessionID_zhangsan2这个暗号, 因为SessionID_zhangsan2是写死的,并且没有被覆盖过,还记得吧, 回放的时候一切忠实于脚本,现在是SessionID_zhangsan2要和服务器记录的底子去对账, 那服务器记录的底子是什么呢?是SessionID_zhangsangou,这是录制的时候记进去的! 那肯定是对不上的呀,这脚本还怎么运行呢?性能测试还怎么继续呢? 关联,就是用来解决这个问题的: 当录制的时候,服务器不是反馈SessionID_zhangsan2吗?因为设置了关联,所以无论是录制过程还是回放过程,只要是服务器返回的,都记到一个变量里面,这样一来,服务器反馈什么,脚本就记录什么,而且是动态的, 不是写死的,这样就不会出现对不上的情况了。 当然并不是所有的服务器都有这么智能,如果服务器没这个对证机制,你就不需要做关联了; 关联可以手动 也可以自动 要在正确的位置插入关联函数 然后写对左右边界


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7817737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存